感谢许多与Tesseract光学字符识别相关的帖子,specifically this one,我现在正在将Tesseract集成到一个应用程序中,专门用于食品杂货收据的光学识别。然而,我得到了垃圾结果,我不知道为什么。我已经三次检查了tessdata语言文件,它们是3.04/3.05版本的英语立方体数据文件。
下面是我的代码的核心:
if let tesserect = G8Tesseract(language: "eng") {
self.receiptPhoto.image = UIImage(named: "TradersReceipt")?.g8_blackAndWhite()
self.receiptPhoto.image = self.receiptPhoto.image?.toGrayScale()
self.receiptPhoto.image = self.receiptPhoto.image?.binarise()
self.receiptPhoto.image = self.receiptPhoto.image?.scaleImage()
// OCR the receipt in receiptPhoto
tesserect.delegate = self as G8TesseractDelegate
tesserect.engineMode = .tesseractCubeCombined
tesserect.pageSegmentationMode = .singleBlock
tesserect.image = self.receiptPhoto.image
tesserect.recognize()
// Update the UITextField in the destination VC being segued to
textOfReceipt.text = tesserect.recognizedText
}请注意,函数toGrayScale等来自本文第一句中链接的SO post。可以看到,我刚刚硬编码了Trader Joe的收据用于测试,收据在这里:
但我的问题是,显示的UITextView (textOfReceipt.text)是垃圾:
Garbage Results from tesseract.recognize
我觉得我错过了一些简单的东西。感谢任何人的帮助。
发布于 2017-08-29 07:26:57
事实证明代码是很好的。Tesseract只是不能很好地处理Trader Joe的收据,可能是因为Tesseract不能很好地处理Trader Joe的字体使用和/或与收据上的一些特殊字符混淆。其他收据做得更好,尽管在OCR收据时结果的质量有很大的差异。如果我对普通文本进行OCR,例如从一本书中,结果会很棒。
https://stackoverflow.com/questions/45703362
复制相似问题