RED-1390: Do not classify images that are nearly as big as the page
This commit is contained in:
parent
816f44edf0
commit
8de0e5a338
@ -30,6 +30,8 @@ public class Page {
|
|||||||
private StringFrequencyCounter fontCounter = new StringFrequencyCounter();
|
private StringFrequencyCounter fontCounter = new StringFrequencyCounter();
|
||||||
private StringFrequencyCounter fontStyleCounter = new StringFrequencyCounter();
|
private StringFrequencyCounter fontStyleCounter = new StringFrequencyCounter();
|
||||||
|
|
||||||
|
private double cropBoxArea;
|
||||||
|
|
||||||
|
|
||||||
public boolean isRotated() {
|
public boolean isRotated() {
|
||||||
|
|
||||||
|
|||||||
@ -28,6 +28,13 @@ public class ImageClassificationService {
|
|||||||
|
|
||||||
if (settings.isEnableImageClassification()) {
|
if (settings.isEnableImageClassification()) {
|
||||||
|
|
||||||
|
double imageArea = image.getPosition().getHeight() * image.getPosition().getWidth();
|
||||||
|
if(imageArea / page.getCropBoxArea() >= settings.getMaxImageCropboxRatio()){
|
||||||
|
log.info("Skipping image classification because image area is almost as big as the page");
|
||||||
|
image.setImageType(ImageType.OTHER);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
long start = System.currentTimeMillis();
|
long start = System.currentTimeMillis();
|
||||||
try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
|
try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
|
||||||
ImageIO.write(image.getImage(), "png", baos);
|
ImageIO.write(image.getImage(), "png", baos);
|
||||||
@ -38,7 +45,6 @@ public class ImageClassificationService {
|
|||||||
log.error("Could not classify image", e);
|
log.error("Could not classify image", e);
|
||||||
image.setImageType(ImageType.OTHER);
|
image.setImageType(ImageType.OTHER);
|
||||||
}
|
}
|
||||||
|
|
||||||
log.info("Image classification took: " + (System.currentTimeMillis() - start));
|
log.info("Image classification took: " + (System.currentTimeMillis() - start));
|
||||||
} else {
|
} else {
|
||||||
image.setImageType(ImageType.OTHER);
|
image.setImageType(ImageType.OTHER);
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
package com.iqser.red.service.redaction.v1.server.segmentation;
|
package com.iqser.red.service.redaction.v1.server.segmentation;
|
||||||
|
|
||||||
|
import com.iqser.red.service.redaction.v1.model.Rectangle;
|
||||||
import com.iqser.red.service.redaction.v1.server.classification.model.Document;
|
import com.iqser.red.service.redaction.v1.server.classification.model.Document;
|
||||||
import com.iqser.red.service.redaction.v1.server.classification.model.Page;
|
import com.iqser.red.service.redaction.v1.server.classification.model.Page;
|
||||||
import com.iqser.red.service.redaction.v1.server.classification.model.TextBlock;
|
import com.iqser.red.service.redaction.v1.server.classification.model.TextBlock;
|
||||||
@ -93,6 +94,10 @@ public class PdfSegmentationService {
|
|||||||
Page page = blockificationService.blockify(stripper.getTextPositionSequences(), cleanRulings.getHorizontal(), cleanRulings
|
Page page = blockificationService.blockify(stripper.getTextPositionSequences(), cleanRulings.getHorizontal(), cleanRulings
|
||||||
.getVertical());
|
.getVertical());
|
||||||
|
|
||||||
|
PDRectangle cropbox = pdPage.getCropBox();
|
||||||
|
float cropboxArea = cropbox.getHeight() * cropbox.getWidth();
|
||||||
|
page.setCropBoxArea(cropboxArea);
|
||||||
|
|
||||||
page.setRotation(rotation);
|
page.setRotation(rotation);
|
||||||
page.setLandscape(isLandscape || isRotated);
|
page.setLandscape(isLandscape || isRotated);
|
||||||
page.setPageNumber(pageNumber);
|
page.setPageNumber(pageNumber);
|
||||||
|
|||||||
@ -13,4 +13,6 @@ public class RedactionServiceSettings {
|
|||||||
|
|
||||||
private boolean enableImageClassification = true;
|
private boolean enableImageClassification = true;
|
||||||
|
|
||||||
|
private float maxImageCropboxRatio = 0.9f;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user