Tesseract OCR w / iOS& Swift返回错误或乱码

时间:2015-03-30 00:06:17

标签: ios swift tesseract

我使用本教程让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' :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中,则读取图像上的文本没有问题,但是如果我在屏幕上拍摄完全相同的图像,则无法读取它。

1 个答案:

答案 0 :(得分:3)

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

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

  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
}