OpenCV - обнаружение рукописной отметки флажков из анкеты

Я работаю над множеством анкет для пациентов. Вот отсканированный пример Анкеты. Мне нужно обработать их и сохранить в базе данных, но у меня была проблема с обнаружением этих рукописных меток:

Анкета для пациентов

Анкета для пациентов

Существуют различные типы отметок в анкетах. Некоторые флажки окрашены в черный цвет. Некоторые флажки имеют галочки или крестики. Все эти отметки означают, что флажки установлены. Мне нужно использовать opencv2, чтобы узнать, какие поля отмечены.

Я пробовал Оптическое распознавание символов, но результат не может помочь. Метки имеют слишком много форм, поэтому OCR распознает их как разные символы. Мне нужно выяснить, какие поля отмечены в анкете. cv2 мог бы решить эту проблему, но я понятия не имею.

# Expected input: An image of Questionnaire

# Expected output:
Have you seen other health care providers for your problems of dizziness 
and/or imbalance? [selected] Yes [unselected] No

Have you been through a program of Vestibular and Balance Rehabilitation 
Therapy? [selected] Yes [unselected] No

=============================
[unselected] vertigo
[unselected] falling
...
[selected] Drunk-like

=============================
[selected] Vertigo
[selected] Falling
[selected] Fatigue
[selected] Wooziness
[selected] Spinning
[unselected] Disconnected

Моя предыдущая попытка использования пакета OCR для Python tesseract:

from PIL import Image
import pytesseract
path ="page1.jpg"
img = Image.open(path)
text = pytesseract.image_to_string(img, lang='eng', config='-c preserve_interword_spaces=1 --psm 6')
print text

O Vertigo           O Falling              O Fatigue                 W Vertigo          YA Falling             y[ Fatigue
[ Wooziness     O Spinning         O Disconnected       A \Wooziness     Q Spinning         [ Disconnected
O Imbalance      B Drunk-like        O Swirling             O Imbalance      O Drunk-like       @ Swirling      ;
O Faint            [ Rocking        O Can’tfocus         M Faint           4 Rocking          O Can’t focus
O Lightheaded O Swaying -~ . -0 Unsteady       O Lightheaded O Swaying       N Unsteady
O “onaboat” O Swimming sensation                      Weonaboat” @ Swimming sensation
O Other:                                                        0 Other:

Я подумал: если OCR распознает прямоугольный флажок как символ "O" или число "0", флажок должен быть снят. В противном случае это должно быть выбрано. Основываясь на этом правиле, я могу обнаружить рукописную метку по результатам распознавания. Я протестирую несколько образцов и увижу точность, хотя я не уверен, выполнимо ли это. Если так, я сообщу к этому посту несколько минут спустя.

0 ответов

Видя из примера, я увидел, что черный цвет довольно доминирует в отмеченной области флажка. Вы можете использовать OCR для ориентации области флажка (при условии, что ваше отсканированное расположение никогда не будет точным) путем обнаружения текста, и я бы посоветовал вам просто вычислить среднее значение пикселей в области флажка (это не обязательно быть на 100% точным, пока вы усредняете его с размером области).

Другие вопросы по тегам