Прежде чем отметьте как копию или повторите вопрос, сначала прочтите весь вопрос.
Я могу сделать при нажатии, как показано ниже:
- Чтобы получить изображение и обрезать нужную часть для 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];
}
Но я не получаю правильный вывод для изображения номерной таблички, либо он равен null, либо дает некоторые данные мусора для изображения.
И если я использую изображение, которое является первым, то есть белый фон с текстом как черный, то вывод будет точным от 89 до 95%.
Пожалуйста, помогите мне.
Любое предложение будет оценено.
Обновление
Благодаря @jcesar для предоставления ссылки, а также @konstantin pribluda, чтобы предоставить ценную информацию и руководство.
Я могу преобразовать изображения в правильную черно-белую форму (почти). и поэтому распознавание лучше для всех изображений:)
Нужна помощь при правильной бинаризации изображений. Любая идея будет оценена