感谢许多SO Tesseract OCR相关帖子,specifically this one,我现在正在将Tesseract集成到应用程序中,专门用于OCR的杂货收据。但是,我得到垃圾结果,我无法弄清楚为什么。我已经检查了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帖子。可以看出,我刚刚对Trader Joe的收据进行了硬编码测试,收据就在这里:
但是这是我的问题,显示的UITextView(textOfReceipt.text)是垃圾:
Garbage Results from tesseract.recognize
我觉得我错过了一些简单的事情。任何和所有帮助表示赞赏。
答案 0 :(得分:0)
原来代码很好。 Tesseract只是不能很好地处理Trader Joe的收据,大概是因为Tesseract无法很好地处理Trader Joe使用的字体和/或与收据上的某些特殊字符混淆。其他收据做得更好,尽管OCR收据时的结果质量范围很广。如果我OCR常规文本,例如,从书中,结果是太棒了。