Я только начал загрязнять руки в библиотеке Tesseract, но результаты действительно очень плохие.
Я выполнил инструкции в репозитории Git (https://github.com/gali8/Tesseract-OCR-iOS). Мой ViewController использует следующий метод для распознавания:
Tesseract *t = [[Tesseract alloc] initWithLanguage:@"deu"];
t.delegate = self;
[t setVariableValue:@"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" forKey:@"tessedit_char_whitelist"];
[t setImage:img];
[t recognize];
NSLog( @"Recognized text: %@", [t recognizedText] );
labelRecognizedText.text = [t recognizedText];
t = nil;
Образец изображения из проекта tempalte
работает хорошо (это говорит мне, что сам проект настроен правильно), но всякий раз, когда я пытаюсь использовать другие изображения, признанный текст является полным беспорядком. Например, я попытался сделать снимок моего искателя, отображающего образец изображения:
https://dl.dropboxusercontent.com/u/607872/tesseract.jpg (1,5 МБ)
Но Tesseract распознает:
Recognized text: s f l TO if v Ysssifss f
ssqxizg ss sfzzlj z
s N T IYIOGY Z I l EY s s
k Es ETL ZHE s UEY
z xhks Fsjs Es z VIII c
s I XFTZT c s h V Ijzs
L s sk sisijk J
s f s ssj Jss sssHss H VI
s s H
i s H st xzs
s s k 4 is x2 IV
Illlsiqss sssnsiisfjlisszxiij s
K
Даже когда белый список символов содержит только цифры, я не получаю результат, даже близкий к тому, как выглядит изображение:
Recognized text: 3 74 211
1
1 1 1
3 53 379 1
3 1 33 5 3 2
3 9 73
1 61 2 2
3 1 6 5 212 7
1
4 9 4
1 17
111 11 1 1 11 1 1 1 1
Я предполагаю, что что-то не так с тем, как фотографируются фотографии с мини-камеры iPad, которую я сейчас использую, но я не могу понять, что и почему.
Любые подсказки?
Обновление # 1
В ответ на Tomas:
Я следил за учебником в вашем посте, но столкнулся с несколькими ошибками на пути...
- Категория
UIImage+OpenCV
не может использоваться в моем проекте ARC - Я не могу импортировать
<opencv2/...>
в мои контроллеры, автозаполнение не предлагает (и поэтому[UIImage CVMat]
не определено)
Я думаю, что что-то не так с моей интеграцией OpenCV, хотя я следовал за Hello-tutorial и добавил фреймворк. Должен ли я создавать OpenCV на моем Mac или достаточно просто включить фреймворк в мой проект Xcode?
Так как я действительно не знаю, что вы можете считать "важным" на этом этапе (я уже читал несколько сообщений и руководств и пробовал разные шаги), не стесняйтесь спрашивать:)
Обновление # 2
@Томас: спасибо, ARC-часть была существенной. Мой ViewController уже переименован в .mm
. Забудьте о том, что "невозможно импортировать opencv2/", поскольку я уже включил его в свой TestApp-Prefix.pch
(как указано в Hello-tutorial).
К следующему вызову;)
Я заметил, что когда я использую снимки, сделанные с камерой, оценки для объекта roi
не вычисляются успешно. Я играл с ориентацией устройства и ставил UIImage
на мой взгляд, чтобы увидеть шаги обработки изображения, но иногда (даже когда изображение правильно выровнено) значения отрицательны, поскольку if
-condition в bounds.size()
- for
-loop не выполняется. В худшем случае у меня были: minX/Y и maxX/Y никогда не были затронуты. Короче говоря: строка, начинающаяся с Mat roi = inranged(cv::Rect(
, выдает исключение (утверждение не выполнено, потому что значения были < 0
). Я не знаю, имеет ли значение количество контуров, но я предполагаю, что чем больше изображений, тем вероятнее исключение утверждения.
Чтобы быть абсолютно честным: у меня не было времени прочитать документацию OpenCV и понять, что делает ваш код, но на данный момент я не думаю, что есть способ. Похоже, что, к сожалению, для меня моя первоначальная задача (получение проверки, запуск OCR, отображение элементов в таблице) требует больше ресурсов (= время), чем я думал.