为什么Tesseract OCR库(iOS)根本无法识别文本?
我正在尝试在iOS应用程序中使用Tesseract OCR
库。 我从github下载了tesseract-ios库,当我试图识别一个简单的文本图像时,我得到了垃圾。 这里是我试图认识到的一个形象:
我有不可读的文字:
T0I1101T0W KIR1 H1I1101T0W KIR1 H1I1101T0W CIBEPS H1 ES PBHY P306 EHH11 133I R1 11335 11I1H1 19 13S SYIL 3B19 M H300H1911 H1113 AIR1 J1 OIII 3I9SH5H133IS 13V9 I1 Q1H211 E015 19 W331 H1 111SW
为什么Tesseract无法识别简单的图像? 这里是我用来实例化Tesseract的代码:
Tesseract* tesseractObject = [[Tesseract alloc] initWithDataPath:@"tessdata" language:@"eng"]; [tesseractObject setVariableValue:@"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" forKey:@"tessedit_char_whitelist"]; [tesseractObject setImage:image]; [tesseractObject recognize]; NSLog(@"RECOGNISED= %@" , [tesseractObject recognizedText]);
这是我的项目结构:
我通过引用添加了英文testdata文件夹。 那么我做错了什么? 我怎样才能解决这个问题?
确保你有谷歌代码最新的tessdata文件
http://code.google.com/p/tesseract-ocr/downloads/list
这将为您提供一个tessdata文件列表,您需要下载并包括在您的应用程序,如果你还没有。 在你的情况下,你将需要tesseract-ocr-3.02.eng.tar.gz,因为你正在寻找英文文件
以下文章将向您显示您需要安装的位置。 当我构build了我的第一个Tesseract项目并发现它非常有用时,我通读了本教程
http://lois.di-qual.net/blog/install-and-use-tesseract-on-ios-with-tesseract-ios/
您正在使用tessedit_char_whitelist选项,其值为“0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ”,仅限于将字符识别限制在此列表中。 然而,你想要处理的图像包含小写字符,如果你想使用这个选项,你将不得不包含小写字母。
[tesseractObject setVariableValue:@"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" forKey:@"tessedit_char_whitelist"];
就像亚当说的,如果你想得到好的结果,你将不得不做一些image processing和configuration一些设置(白名单某些字符等)。
对于任何人都在这个问题上磕磕绊绊,我已经在这里做了一个示例项目 ,做一些白名单和image processing: https : //github.com/mstrchrstphr/OCR-iOS-Example
您可以使用ABBYY Cloud OCR Sdk识别图像中的文本, 而不使用Tesseract OCR库。 我已经尝试在我的应用程序,它的工作完美。 您可以尝试使用此链接演示示例: https : //github.com/abbyysdk/ocrsdk.com/tree/master/iOS/OcrSdkDemo
这些信息对所有人都是有帮助的。
和我的输出是
解答:
tesseract.language = @"eng+fra"; tesseract.pageSegmentationMode = G8PageSegmentationModeAuto; tesseract.engineMode = G8OCREngineModeTesseractCubeCombined; tesseract.image = [image.image g8_blackAndWhite]; tesseract.maximumRecognitionTime = 60.0; [tesseract recognize]; NSLog(@"%@", tesseract.recognizedText); reco_area.text = [tesseract recognizedText];
为tessdata 点击这里
无论@亚当·理查森解释是正确的,加上这1) scaleimage方法增加图像的大小(尺寸增加)
func scaleImage(image:UIImage,maxDimension:CGFloat) – > UIImage {
var scaledSize = CGSize(width: maxDimension, height: maxDimension) var scaleFactor: CGFloat if image.size.width > image.size.height { scaleFactor = image.size.height / image.size.width scaledSize.width = maxDimension scaledSize.height = scaledSize.width * scaleFactor } else { scaleFactor = image.size.width / image.size.height scaledSize.height = maxDimension scaledSize.width = scaledSize.height * scaleFactor } UIGraphicsBeginImageContext(scaledSize) image.draw(in: CGRect(x: 0, y: 0, width: scaledSize.width, height: scaledSize.height)) let scaledImage = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return scaledImage! }
2)将这个eng.traineddata语言文件存储在filemanager中
func storeLanguageFile() throws{ var fileManager: FileManager = FileManager.default let nsDocumentDirectory = FileManager.SearchPathDirectory.documentDirectory let nsUserDomainMask = FileManager.SearchPathDomainMask.userDomainMask let docDirectory = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true)[0] as NSString let path: String = docDirectory.appendingPathComponent("/tessdata/eng.traineddata") if fileManager.fileExists(atPath: path){ var data: NSData = NSData.dataWithContentsOfMappedFile((Bundle.main.resourcePath?.appending("/tessdata/eng.traineddata"))!)! as! NSData var error: NSError try FileManager.default.createDirectory(atPath: docDirectory.appendingPathComponent("/tessdata"), withIntermediateDirectories: true, attributes: nil) data.write(toFile: path, atomically: true) } }
3)之后,你可以使用https://github.com/BradLarson/GPUImage来增加图像的清晰度
你可以使用这个
func preprocessedImage(for tesseract: G8Tesseract!, sourceImage: UIImage!) -> UIImage! { var stillImageFilter: GPUImageAdaptiveThresholdFilter = GPUImageAdaptiveThresholdFilter() stillImageFilter.blurRadiusInPixels = 4.0 var filterImage: UIImage = stillImageFilter.image(byFilteringImage: sourceImage) return filterImage }
这3个步骤将帮助您将测量精度提高到60〜70%
- 未find插件,或者不是CDVPlugin。 在config.xml中检查你的插件映射
- 我编译Swift 2.3项目,并在Xcode 8.1上有这个问题
- didSelectRowAtIndexPath不能与NSNotificationCenter一起使用
- 为我们的iOS 360视频库开放源代码:DDDKit
- 如何停止使用dispatch_async创build的线程?
- iOS Swift – 如何以编程方式为所有按钮指定默认操作
- cancelAllLocalNotifications在iOS10中不起作用
- UICollectionViewFlowLayout子类有时会在iOS6上崩溃
- 如何使用IOBluetooth / CoreBluetooth服务请求?