【发布时间】:2012-10-26 05:19:29
【问题描述】:
在标记为复制或重复问题之前,请先阅读整个问题。
我现在可以做的如下:
- 获取图像并裁剪 OCR 所需的部分。
- 使用
tesseract和leptonica处理图像。 - 当应用的文档被裁剪成块(即每张图像 1 个字符)时,它可提供 96% 的准确度。
- 如果我不这样做并且文档背景为白色而文本为黑色,则它提供几乎相同的准确性。
例如,如果输入是这张照片:
照片开始
照片结束
我想要的是能够为这张照片获得相同的精度
不生成块。
我用来初始化tesseract并从图像中提取文本的代码如下:
对于tesseract的初始化
在 .h 文件中
tesseract::TessBaseAPI *tesseract;
uint32_t *pixels;
在 .m 文件中
tesseract = new tesseract::TessBaseAPI();
tesseract->Init([dataPath cStringUsingEncoding:NSUTF8StringEncoding], "eng");
tesseract->SetPageSegMode(tesseract::PSM_SINGLE_LINE);
tesseract->SetVariable("tessedit_char_whitelist", "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ");
tesseract->SetVariable("language_model_penalty_non_freq_dict_word", "1");
tesseract->SetVariable("language_model_penalty_non_dict_word ", "1");
tesseract->SetVariable("tessedit_flip_0O", "1");
tesseract->SetVariable("tessedit_single_match", "0");
tesseract->SetVariable("textord_noise_normratio", "5");
tesseract->SetVariable("matcher_avg_noise_size", "22");
tesseract->SetVariable("image_default_resolution", "450");
tesseract->SetVariable("editor_image_text_color", "40");
tesseract->SetVariable("textord_projection_scale", "0.25");
tesseract->SetVariable("tessedit_minimal_rejection", "1");
tesseract->SetVariable("tessedit_zero_kelvin_rejection", "1");
用于从图像中获取文本
- (void)processOcrAt:(UIImage *)image
{
[self setTesseractImage:image];
tesseract->Recognize(NULL);
char* utf8Text = tesseract->GetUTF8Text();
int conf = tesseract->MeanTextConf();
NSArray *arr = [[NSArray alloc]initWithObjects:[NSString stringWithUTF8String:utf8Text],[NSString stringWithFormat:@"%d%@",conf,@"%"], nil];
[self performSelectorOnMainThread:@selector(ocrProcessingFinished:)
withObject:arr
waitUntilDone:YES];
free(utf8Text);
}
- (void)ocrProcessingFinished0:(NSArray *)result
{
UIAlertView *alt = [[UIAlertView alloc]initWithTitle:@"Data" message:[result objectAtIndex:0] delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
[alt show];
}
但是我没有得到正确的车牌图像输出,要么它是空的,要么它为图像提供了一些垃圾数据。
如果我使用第一个图像,即白色背景,文本为黑色,那么输出的准确率是 89% 到 95%。
请帮帮我。
任何建议将不胜感激。
更新
感谢@jcesar 提供链接,也感谢@konstantin pribluda 提供有价值的信息和指导。
我能够(几乎)将图像转换为适当的黑白形式。因此对所有图像的识别效果都更好:)
在正确二值化图像方面需要帮助。任何想法将不胜感激
【问题讨论】:
-
也许您可以在尝试识别文本之前尝试操作图像,例如将每个非黑色(或接近黑色)的像素颜色更改为白色。目前我没有用于执行此操作的 Objective-c 代码,但我确信它可以完成。
-
我有它,但在这里我无法实现它。
-
感谢您的回复。现在我有办法了。 TY :)
-
@jcesar 感谢您的建议。我从您发布的链接中获取代码,目前正在尝试使我的代码正常工作:)
标签: ios ocr xcode4.5 tesseract leptonica