具有iOS和Swift的Tesseract OCR返回错误或乱码

我使用本教程让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*éed§ag:_ {:7 IC’J 7 iii-1553’:fi zzle – ‘; – :

; 〜:〜。/: – : – ‘ –

‘ – :〜£:’:_ – ‘〜’:

:37%; §:’-_

::::: E 7 ,;。 1f:,:〜 – ,

或者它返回BAD_EXC_ACCESS错误。 我无法重现为什么它会给出错误或乱码的原因。 这是我的相机捕捉代码(拍照())和处理步骤(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中,则读取图像上的文本没有问题,但是如果我在屏幕上拍摄完全相同的图像则无法读取它。

偶然发现了这个教程: http ://www.raywenderlich.com/93276/implementing-tesseract-ocr-ios

碰巧提到缩放图像。 他们选择最大尺寸为640.我将我的照片视为640×480,所以我认为我不需要缩放它们,但我认为这段代码基本上重绘了图像。 出于某种原因,现在我的照片OCR相当不错。 我仍然需要处理较小文本的图像处理,但它适用于大文本。 通过这个缩放function运行我的图像,我很高兴。

  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.drawInRect(CGRectMake(0, 0, scaledSize.width, scaledSize.height)) let scaledImage = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return scaledImage }