You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tika.apache.org by ta...@apache.org on 2017/06/07 19:17:41 UTC
[tika] branch master updated: TIKA-2387 -- parameterize scale for
image rendering of pages in PDFs for OCR
This is an automated email from the ASF dual-hosted git repository.
tallison pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tika.git
The following commit(s) were added to refs/heads/master by this push:
new 7acf48d TIKA-2387 -- parameterize scale for image rendering of pages in PDFs for OCR
7acf48d is described below
commit 7acf48d4c0b1ffcde5659a26e279f63ffb5ec0fc
Author: tballison <ta...@mitre.org>
AuthorDate: Wed Jun 7 15:17:30 2017 -0400
TIKA-2387 -- parameterize scale for image rendering of pages in PDFs for OCR
---
.../apache/tika/parser/pdf/AbstractPDF2XHTML.java | 3 ++-
.../java/org/apache/tika/parser/pdf/PDFParser.java | 5 +++++
.../apache/tika/parser/pdf/PDFParserConfig.java | 26 ++++++++++++++++++++++
.../apache/tika/parser/pdf/PDFParser.properties | 2 ++
.../org/apache/tika/parser/pdf/PDFParserTest.java | 2 ++
.../apache/tika/parser/pdf/tika-inline-config.xml | 1 +
6 files changed, 38 insertions(+), 1 deletion(-)
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/pdf/AbstractPDF2XHTML.java b/tika-parsers/src/main/java/org/apache/tika/parser/pdf/AbstractPDF2XHTML.java
index 3147656..fc46136 100644
--- a/tika-parsers/src/main/java/org/apache/tika/parser/pdf/AbstractPDF2XHTML.java
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/pdf/AbstractPDF2XHTML.java
@@ -325,7 +325,8 @@ class AbstractPDF2XHTML extends PDFTextStripper {
PDFRenderer renderer = new PDFRenderer(pdDocument);
TemporaryResources tmp = new TemporaryResources();
try {
- BufferedImage image = renderer.renderImage(pageIndex, 2.0f, config.getOcrImageType());
+
+ BufferedImage image = renderer.renderImage(pageIndex, config.getOcrImageScale(), config.getOcrImageType());
Path tmpFile = tmp.createTempFile();
try (OutputStream os = Files.newOutputStream(tmpFile)) {
//TODO: get output format from TesseractConfig
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/pdf/PDFParser.java b/tika-parsers/src/main/java/org/apache/tika/parser/pdf/PDFParser.java
index 1d85181..7adc281 100644
--- a/tika-parsers/src/main/java/org/apache/tika/parser/pdf/PDFParser.java
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/pdf/PDFParser.java
@@ -645,6 +645,11 @@ public class PDFParser extends AbstractParser {
defaultConfig.setOcrImageFormatName(formatName);
}
+ @Field
+ void setOcrImageScale(float imageScale) {
+ defaultConfig.setOcrImageScale(imageScale);
+ }
+
@Field
void setExtractBookmarksText(boolean extractBookmarksText) {
defaultConfig.setExtractBookmarksText(extractBookmarksText);
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/pdf/PDFParserConfig.java b/tika-parsers/src/main/java/org/apache/tika/parser/pdf/PDFParserConfig.java
index ed73253..ef1d667 100644
--- a/tika-parsers/src/main/java/org/apache/tika/parser/pdf/PDFParserConfig.java
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/pdf/PDFParserConfig.java
@@ -46,6 +46,7 @@ import org.apache.tika.config.Field;
*/
public class PDFParserConfig implements Serializable {
+
public enum OCR_STRATEGY {
NO_OCR,
OCR_ONLY,
@@ -122,6 +123,7 @@ public class PDFParserConfig implements Serializable {
private ImageType ocrImageType = ImageType.GRAY;
private String ocrImageFormatName = "png";
private float ocrImageQuality = 1.0f;
+ private float ocrImageScale = 2.0f;
private AccessChecker accessChecker;
@@ -207,6 +209,8 @@ public class PDFParserConfig implements Serializable {
setOcrImageType(parseImageType(props.getProperty("ocrImageType")));
+ setOcrImageScale(getFloatProp(props.getProperty("ocrImageScale"), getOcrImageScale()));
+
setExtractActions(getBooleanProp(props.getProperty("extractActions"), false));
@@ -535,6 +539,15 @@ public class PDFParserConfig implements Serializable {
return Integer.parseInt(p);
}
+ //throws NumberFormatException if there's a non-null unparseable
+ //string passed in
+ private static float getFloatProp(String p, float defaultMissing) {
+ if (p == null) {
+ return defaultMissing;
+ }
+
+ return Float.parseFloat(p);
+ }
/**
* String representation of the image format used to render
* the page image for OCR (examples: png, tiff, jpeg)
@@ -616,6 +629,19 @@ public class PDFParserConfig implements Serializable {
}
/**
+ * Scale to use if rendering a page and then running OCR on that rendered image.
+ * Default is 2.0f.
+ * @return
+ */
+ public float getOcrImageScale() {
+ return ocrImageScale;
+ }
+
+ public void setOcrImageScale(float ocrImageScale) {
+ this.ocrImageScale = ocrImageScale;
+ }
+
+ /**
* Whether or not to extract PDActions from the file.
* Most Action types are handled inline; javascript macros
* are processed as embedded documents.
diff --git a/tika-parsers/src/main/resources/org/apache/tika/parser/pdf/PDFParser.properties b/tika-parsers/src/main/resources/org/apache/tika/parser/pdf/PDFParser.properties
index c35c216..e39a08a 100644
--- a/tika-parsers/src/main/resources/org/apache/tika/parser/pdf/PDFParser.properties
+++ b/tika-parsers/src/main/resources/org/apache/tika/parser/pdf/PDFParser.properties
@@ -33,3 +33,5 @@ ocrDPI 300
ocrImageFormatName png
#options: argb, binary, gray, rgb
ocrImageType gray
+#scale to use when rendering a page image for OCR
+ocrImageScale 2.0
\ No newline at end of file
diff --git a/tika-parsers/src/test/java/org/apache/tika/parser/pdf/PDFParserTest.java b/tika-parsers/src/test/java/org/apache/tika/parser/pdf/PDFParserTest.java
index 2c3dd64..165dde5 100644
--- a/tika-parsers/src/test/java/org/apache/tika/parser/pdf/PDFParserTest.java
+++ b/tika-parsers/src/test/java/org/apache/tika/parser/pdf/PDFParserTest.java
@@ -1346,8 +1346,10 @@ public class PDFParserTest extends TikaTest {
assertEquals(false, pdfParserConfig.getExtractUniqueInlineImagesOnly());
assertEquals(314, pdfParserConfig.getOcrDPI());
assertEquals(2.1f, pdfParserConfig.getOcrImageQuality(), .01f);
+ assertEquals(1.3f, pdfParserConfig.getOcrImageScale(), .01f);
assertEquals("jpeg", pdfParserConfig.getOcrImageFormatName());
assertEquals(false, pdfParserConfig.getCatchIntermediateIOExceptions());
+
}
}
diff --git a/tika-parsers/src/test/resources/org/apache/tika/parser/pdf/tika-inline-config.xml b/tika-parsers/src/test/resources/org/apache/tika/parser/pdf/tika-inline-config.xml
index 84c83d6..71017dd 100644
--- a/tika-parsers/src/test/resources/org/apache/tika/parser/pdf/tika-inline-config.xml
+++ b/tika-parsers/src/test/resources/org/apache/tika/parser/pdf/tika-inline-config.xml
@@ -30,6 +30,7 @@
<param name="ocrDPI" type="int">314</param>
<param name="ocrImageQuality" type="float">2.1</param>
<param name="ocrImageFormatName" type="string">jpeg</param>
+ <param name="ocrImageScale" type="float">1.3</param>
<!-- we really should throw an exception for this!! -->
<param name="someRandomThingOrOther" type="bool">true</param>
</params>
--
To stop receiving notification emails like this one, please contact
['"commits@tika.apache.org" <co...@tika.apache.org>'].