如何解决为什么在FlatMap函数中调用Tessercat时返回错误?
我需要使用tessearct库(tess4j)从bufferImage中提取文本,但是函数会引发NullPointerException。我正在使用flink 1.10
PS:当我在flatMap范围之外执行getImageText()函数时,该函数运行正常
public String getImgText(BufferedImage bufferImage) throws TesseractException {
ITesseract instance = new Tesseract();
try
{
String imgText = instance.doOCR(bufferImage);
return imgText;
}
catch (TesseractException e)
{
return "Error while reading image: "+e.getMessage();
}
}
e_stream.flatMap(new FlatMapFunction<BufferedImage,String>() {
@Override
public void flatMap(BufferedImage iBuffer,Collector<String> out) throws Exception{
TextExtraction ocr = new TextExtraction();
String cv = ocr.getImgText(iBuffer);
out.collect(cv);
}
}).print();
11:01:44,650 ERROR net.sourceforge.tess4j.Tesseract -
java.lang.NullPointerException
at sun.java2d.cmm.lcms.LCMS.getProfileSize(LCMS.java:67)
at java.awt.color.ICC_Profile.getData(ICC_Profile.java:1359)
at com.github.jaiimageio.impl.plugins.tiff.TIFFImageWriter.setupMetadata(TIFFImageWriter.java:1141)
at com.github.jaiimageio.impl.plugins.tiff.TIFFImageWriter.convertImageMetadata(TIFFImageWriter.java:433)
at com.github.jaiimageio.impl.plugins.tiff.TIFFImageWriter.getDefaultImageMetadata(TIFFImageWriter.java:350)
at com.github.jaiimageio.impl.plugins.tiff.TIFFImageWriter.write(TIFFImageWriter.java:2565)
at com.github.jaiimageio.impl.plugins.tiff.TIFFImageWriter.write(TIFFImageWriter.java:2383)
at net.sourceforge.tess4j.util.ImageIOHelper.getImageByteBuffer(ImageIOHelper.java:293)
at net.sourceforge.tess4j.Tesseract.setImage(Tesseract.java:398)
at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:291)
at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:264)
at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:245)
at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:229)
at OCR.TextExtraction.getImgText(TextExtraction.java:27)
at org.example.StreamingJob$2.flatMap(StreamingJob.java:59)
at org.example.StreamingJob$2.flatMap(StreamingJob.java:55)
at org.apache.flink.streaming.api.operators.StreamFlatMap.processElement(StreamFlatMap.java:50)
at org.apache.flink.streaming.runtime.tasks.OperatorChain$CopyingChainingOutput.pushToOperator(OperatorChain.java:641)
at org.apache.flink.streaming.runtime.tasks.OperatorChain$CopyingChainingOutput.collect(OperatorChain.java:616)
at org.apache.flink.streaming.runtime.tasks.OperatorChain$CopyingChainingOutput.collect(OperatorChain.java:596)
at org.apache.flink.streaming.api.operators.AbstractStreamOperator$CountingOutput.collect(AbstractStreamOperator.java:730)
at org.apache.flink.streaming.api.operators.AbstractStreamOperator$CountingOutput.collect(AbstractStreamOperator.java:708)
at org.apache.flink.streaming.api.operators.StreamSourceContexts$NonTimestampContext.collect(StreamSourceContexts.java:104)
at org.apache.flink.streaming.api.operators.StreamSourceContexts$NonTimestampContext.collectWithTimestamp(StreamSourceContexts.java:111)
at org.apache.flink.streaming.connectors.kafka.internals.AbstractFetcher.emitRecordWithTimestamp(AbstractFetcher.java:398)
at org.apache.flink.streaming.connectors.kafka.internal.KafkaFetcher.emitRecord(KafkaFetcher.java:185)
at org.apache.flink.streaming.connectors.kafka.internal.KafkaFetcher.runFetchLoop(KafkaFetcher.java:150)
at org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumerBase.run(FlinkKafkaConsumerBase.java:715)
at org.apache.flink.streaming.api.operators.StreamSource.run(StreamSource.java:100)
at org.apache.flink.streaming.api.operators.StreamSource.run(StreamSource.java:63)
at org.apache.flink.streaming.runtime.tasks.SourceStreamTask$LegacySourceFunctionThread.run(SourceStreamTask.java:200)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。