2010-12-20 88 views
2

我想检查图像中是否存在特定的字符串。那可能吗? pngj可以做到吗?如何使用Java在png文件中获取文本

我的文件将包含一个图形和一些传说。我想检查一下传说是否正确。

+1

您要找的是OCR软件。 'pngj'库没有提到它可以做OCR。 – 2010-12-20 09:08:56

+0

PNGJ不能那样做。你需要一个文本识别库。 – khachik 2010-12-20 09:09:15

+0

这绝对不是微不足道的。一般过程称为OCR(光学字符识别),它读取文本。然而,它并不完美,可能会选取不是文本的东西,如果图表中有更多文本(坐标轴上的标签等),它们也会被读取。 – falstro 2010-12-20 09:10:29

回答

4

不,你不能用pngj做到这一点。在PNG图像中可见的文本不在内部存储为文本。如果您想识别文本,您将需要OCR软件。

但是,如果能够以另一种更容易被计算机解析的格式获得数据,那么它将会更好

+0

您的意思是其他格式?请详细说明。 – Rajasankar 2010-12-20 10:26:37

+0

@Rajasankar:像CSV文件或XML文件这样的东西比解析PNG文件要容易得多。 – 2010-12-20 10:44:19

1

是的,它似乎是可能的。但是,您应该找到一个好的OCR库。然后,假设您的OCR库返回了正确的结果,那么您需要以某种方式验证您的传说是否放置在适当的位置。

0

这里我使用scala来给出我的解决方案。如果您是java开发人员,将scala代码转换为java代码非常容易。

第一步:在build.sbt多加一个行

libraryDependencies += "com.asprise.ocr" % "java-ocr-api" % "[15,)" 

第二步:进口

import com.asprise.ocr.Ocr 

第二步:斯卡拉code.Please注:这里是一个文件类型。如果您只有fileName/filePath,则需要使用新文件()进行转换。

try { 
     // Image 
     Ocr.setUp() 
     val ocr = new Ocr 
     ocr.startEngine("eng", Ocr.SPEED_FASTEST) 
     val files = List(<your_file>) 
     val outputString = ocr.recognize(files.toArray, Ocr.RECOGNIZE_TYPE_ALL, Ocr.OUTPUT_FORMAT_PLAINTEXT) 
     ocr.stopEngine() 
     Some(outputString) 
} catch { 
     case e: Exception => None // todo: to support multiple file types 
} 

我也写博客透露更多的细节信息关于how to extract text/content from another file(pdf, html, image, etc)

如果您想了解更多关于此Java-OCR-API,你可以阅读its official website here

相关问题