在标记为复制或重复问题之前,请先阅读整个问题。
我现在能做的如下:
- 获取图像并裁剪 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 提供有价值的信息和指导。
我能够将图像转换为正确的黑白形式(几乎)。因此所有图像的识别效果都更好:)
需要帮助进行正确的图像二值化。任何想法将不胜感激