我已经使用Tesseract OCR iOS来扫描文本,我已经使用它来处理项目中包含的照片。
但是当从UIImagePickerController传递UIImage时,它不起作用。我设置了这个简单的测试:
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"]];
答案 0 :(得分:3)
image
orientation
对于两个图像都不同。当您将图像加载到引擎中时:在您的情况下,两个图像都生成为与引擎具有不同方向的图像:
以下是他们对引擎的看法:
原始图片:
Photoshop图片:
如果你仔细观察,它们的呈现方式会有所不同。我相信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次旋转。