Tesseract OCR iOS图像格式

时间:2015-12-18 13:04:43

标签: ios objective-c uiimage tesseract

我已经使用Tesseract OCR iOS来扫描文本,我已经使用它来处理项目中包含的照片。

但是当从UIImagePickerController传递UIImage时,它不起作用。我设置了这个简单的测试:

  1. 从选择器中取出原始图像,并将其提供给tesseract:是否有效。
  2. 将UIImage保存为JPEG,将其从应用容器中复制,将其包含在项目中并将其提供给tesseract:是否正常工作。
  3. 在photoshop中打开已保存的UIImage,然后再次保存(默认JPEG质量12设置无更改)。将它包含在项目中以将其提供给tesseract:工作?!?
  4. Tesseract确实识别出原始行中的正确行数,但是作为垃圾(我测试了几个示例测试)。保存在Photoshop中后,图像具有良好的识别率。

    我根本无法弄清楚Photoshop以某种方式修复的原始UIImage有什么问题。请帮忙!

    以下是图片:

    将图像输送到tesseract的代码:

    - (void)recognizeWithImage:(UIImage *)image {
        G8RecognitionOperation *operation = [[G8RecognitionOperation alloc] initWithLanguage:@"dan"];
        operation.tesseract.image = image;
        self.imageView.image = image;
        operation.recognitionCompleteBlock = ^(G8Tesseract *recognizedTesseract) {
            NSLog(@"Result:\n%@", [recognizedTesseract recognizedText]);
        };
        NSOperationQueue *queue = [[NSOperationQueue alloc] init];
        [queue addOperation:operation];
    }

    以下是从相机获取图像的代码:

    - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
        [self dismissViewControllerAnimated:YES completion:nil];
        UIImage *originalImage = info[UIImagePickerControllerOriginalImage];
    
        NSData *dataForJPEGFile = UIImageJPEGRepresentation(originalImage, 1.0);
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *filePath = [paths[0] stringByAppendingPathComponent:@"temp_ocr_image_orig.jpg"];
        [dataForJPEGFile writeToFile:filePath atomically:YES];
    
        [self recognizeWithImage:originalImage];
    }

    测试两个图像文件:

    [self recognizeWithImage:[UIImage imageNamed:@"temp_ocr_image_orig.jpg"]];
    [self recognizeWithImage:[UIImage imageNamed:@"temp_ocr_image_photoshopped.jpg"]];

1 个答案:

答案 0 :(得分:3)

image orientation对于两个图像都不同。当您将图像加载到引擎中时:在您的情况下,两个图像都生成为与引擎具有不同方向的图像:

以下是他们对引擎的看法:

原始图片:

enter image description here

Photoshop图片:

enter image description here

如果你仔细观察,它们的呈现方式会有所不同。我相信UIImageJPEGRepresentation正在做一些疯狂的事情,或者当你将image写到container时,图像会进入不同的方向

您需要修改从拾取器或容器中获取的图像方向。

我做了一些组合以获得正确的方向作为photoshop图像:

                                                   //image is the original image
UIImage *imageToDisplay =[UIImage imageWithCGImage:[image CGImage]
                    scale:1.0
              orientation: UIImageOrientationRight];

UIImage *newImage=  [UIImage imageWithCGImage:[imageToDisplay CGImage]
                     scale:1.0
              orientation: UIImageOrientationDown];


UIImage *newImage2=  [UIImage imageWithCGImage:[newImage CGImage]
                                        scale:1.0
                                  orientation: UIImageOrientationLeft];

//Now I get the correct orientation

// Set the image on which Tesseract should perform recognition
operation.tesseract.image = newImage2 ;

现在您可以按预期从OCR获取文本。

您应该尝试在一行代码中获得正确的方向。我在这里使用了3次旋转。