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>'].