我使用这个教程来让Tesseract OCR在Swift中工作:http://www.piterwilson.com/blog/2014/10/18/minimal-tesseact-ocr-setup-in-swift/
如果我上传演示图片并调用它,它可以很好地工作。
tesseract.image = UIImage(named: "image_sample.jpg");
但是,如果我使用我的相机代码拍摄同一图像并调用
tesseract.image = self.image.blackAndWhite();
结果要么是乱码,如下所示:
s I 5E251 :Ec ‘-. —7.//:E*髧 a g :_{:7 IC‘ J 7 iii—1553‘ : fizzle —‘;-—:
; ~:~./: -:-‘-
‘- :~£:': _-'~‘:
: 37%; §:‘—_
: ::::E 7,;. 1f:,:~ ——,
或者返回BAD_EXC_ACCESS错误。我无法复制为什么会出现错误或乱码的原因。这是我的相机捕获代码(photo taken())和处理步骤(nextStepTapped()):
@IBAction func photoTaken(sender: UIButton) {
var videoConnection = stillImageOutput.connectionWithMediaType(AVMediaTypeVideo)
if videoConnection != nil {
// Show next step button
self.view.bringSubviewToFront(self.nextStep)
self.nextStep.hidden = false
// Secure image
stillImageOutput.captureStillImageAsynchronouslyFromConnection(videoConnection) {
(imageDataSampleBuffer, error) -> Void in
var imageData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(imageDataSampleBuffer)
self.image = UIImage(data: imageData)
//var dataProvider = CGDataProviderCreateWithCFData(imageData)
//var cgImageRef = CGImageCreateWithJPEGDataProvider(dataProvider, nil, true, kCGRenderingIntentDefault)
//self.image = UIImage(CGImage: cgImageRef, scale: 1.0, orientation: UIImageOrientation.Right)
}
// Freeze camera preview
captureSession.stopRunning()
}
}
@IBAction func nextStepTapped(sender: UIButton) {
// Save to camera roll & proceeed
//UIImageWriteToSavedPhotosAlbum(self.image.blackAndWhite(), nil, nil, nil)
//UIImageWriteToSavedPhotosAlbum(self.image, nil, nil, nil)
// OCR
var tesseract:Tesseract = Tesseract();
tesseract.language = "eng";
tesseract.delegate = self;
tesseract.image = self.image.blackAndWhite();
tesseract.recognize();
NSLog("%@", tesseract.recognizedText);
}
如果我取消注释的行,则图像将保存到相机胶卷中,并且完全可读。不确定为什么它不起作用。如果将图像直接作为支持文件上传到Xcode,则它可以轻松读取图像上的文本,但是如果我在屏幕上拍摄完全相同的图像,则无法读取它。