Не соблаговолите ли больше не нарушать, сэр (мэм)?

в 17:44, , рубрики: обработка изображений, распознавание номеров, я пиарюсь

Примерно неделю назад Vasyutka опубликовал пост про распознавание номеров и обещал, что мы выложим софт, который можно будет опробовать. Мы немножко схитрили, не рассказав все подробнее. Ну, а то бы никакой интриги не было! Ядро алгоритма распознавания мы сделали с полгода назад, но тот проект, для которого оно было сделано, не двинулся. Он остановился где-то на альфа-версии. Подумав, и посовещавшись с заказчиком, мы решили, что это нехорошо, когда такой алгоритм пылится на полке и не приносит пользу обществу. С другой стороны выкладывать все исходники распознающей части не хотелось. Тогда и родилась идея, о которой пойдёт речь в этой статье.
image
Решили мы, собственно, сделать открытый сервер, который бы распознавал номера, приходящие http-запросами. Так как вся идея некоммерческая, то сервер, конечно, слабенький, но на то, чтобы народ игрался, надеюсь, его хватит.
А вот тут крутой поворот сюжета. Пост этот не про протокол обращения к серверу. Об этом будет следующий пост. Этот пост о программе, которую мы начали делать как пример работы с сервером, но которая вылилась в интересную на наш взгляд концепцию. В статье будет рассказано про Android-приложение, которым можно сфотографировать номер автомобиля… И обругать владельца бранным словом! Ну, или посмотреть статистику того, сколько раз сего автомобилиста обругали.
Те, кому невтерпёж, смогут расковырять работу с сервером из исходников в конце статьи. Остальных подержим пару дней в напряжении, а потом выложим законченный мануал.

В принципе идея такого софта проскакивала периодически. Но в исполнении Android – приложения, где процесс съёмки был бы автоматизирован, я его не видел. Возможно, наша реализация первая.
Мы с Vasyutka ни разу не android-программисты, поэтому всё немножко криво. Как и серверная часть. Будем благодарны за советы.

Пару слов о программе

Программа доступна в Google Play. Называется «Recognitor». Работает на всех телефонах, которые мы смогли добыть и протестировать. На некоторых планшетах для корректного отображения видео нужно вызвать меню и нажать там «flip». В программе используется OpenCV, который тащит за собой библиотеки. Поэтому и такой размер (11 мб). После запуска программы на экране пойдёт видеопоток с камеры. Для запуска детектирования достаточно нажать на кнопку съёмки. Выделение номера происходит на телефоне, распознавание — на сервере.
Не соблаговолите ли больше не нарушать, сэр (мэм)?
При съёмке номер должен быть различим глазом в видео. Это достигается при расстоянии не более 7-8 метров. Так же требуется, чтобы угол наклона номера горизонтали не превышал 15-20%, а машина стояла под углом не более 30-40 градусов к снимающему. После съёмки программа пробует связаться с сервером для распознавания номера (информации передаётся порядка 10кб — вырезанный фрагмент с номером).
Не соблаговолите ли больше не нарушать, сэр (мэм)?
Распознавание у нас не отлажено и идёт порядка 1 секунды на номер + тратится время на передачу, так что через пару секунд, если номер был детектирован, выводится менюшка следующего содержания:
Не соблаговолите ли больше не нарушать, сэр (мэм)?
Распознавание у нас многопоточно, несколько номеров параллельно принимает. Слева сверху выводится отснятый номер, который программа обнаружила. Справа его текстовое представление, которое можно отредактировать. По центру номер выводится ещё раз. Если ткнуть по кнопкам, из которых состоит номер, то можно поправить его побуквено без вызова клавиатуры.
Не соблаговолите ли больше не нарушать, сэр (мэм)?
Снизу слева выводится, сколько раз обругали водителя с этим номером. Снизу справа выводится кнопочка с нехорошим словом, которым можно обругать человека. Если номер поправить, то происходит обращение к базе за новой информацией.

Алгоритм

После того, как человек фотографирует, происходит выделение кадра из видеопотока и его обработка классификатором Хаара. В случае, если такой номер был найден — происходит его отправка на сервер для дальнейшего распознавания. Если номер не найден — программа продолжает работу.
Сам обученный классификатор у нас просили после прошлой статьи несколько раз. В исходниках, приведённых в конце он есть. Через пару дней будет статья про протоколы обращения к серверу, он там будет приложен отдельным файлом с пояснениями.
Номер на сервере обрабатывается нашим алгоритмом, немножко про который было рассказано в прошлой статье. Производится поиск обнаруженного номера в базе. Пользователю отправляется распознанный номер и количество его обнаружений в базе.
Если пользователь изменяет номер, то происходит повторный запрос по номеру автомобиля.
Вкратце саму концепцию можно представить следующим образом:
Не соблаговолите ли больше не нарушать, сэр (мэм)?

Что не сделано

Не сделано дофига в части связанной с андроидом и сервером:
• Дизайн программы как в младшей школе
• Вместо полноразмерной фотографии берётся кадр из потока
• Очень слабая инфраструктура проекта, по сути можно только обругать человека, но нельзя сказать за что, нельзя обругать другими словами
• Не все связи с сервером выделены в отдельные потоки, в результате в случае пропадания связи программа после нажатия на некоторые из кнопок подвисает на 10 секунд.

Вместо того, чтобы перечислять недостатки, проще сказать, что ничего кроме базового каркаса программы у нас и нет.

С распознаванием всё куда более радужно, мы потихоньку доклёпываем его, сейчас осталось:
• Распознаются только белые номера вида: «буква — три цифры — две буквы – регион».
• При первичном выделении бывают проблемы для номеров на белых машинах (где номер белее, чем машина).
• Периодические сбои в процессе обработки, сказывающиеся на стабильности алгоритма (порядка 3-5% кадров не выделяют никакого номера).

Мысли вслух

Нам кажется, что концепция софта, представленная тут, вполне жизнеспособна и имеет право на существование. К тому же, простите за пафосность, она социально-ориентированная. Если человека часто будут ругать — может он пересмотрит своё поведение на дороге и при парковке?
Но сил сделать полноценное приложение с разветвлённой структурой, интерфейсом и сайтом у нас нет (максимум будем поддерживать текущее, если его будут использовать). Если вдруг кто-то имеет такие силы, или придумает другое интересное и полезное приложение, то мы будем поддерживать и улучшать текущий сервер распознавания.

Собственно ссылки:

Сама прога на андроиде — на всём чём смогли проверили. Вроде работает. Не стесняйтесь использовать номер моей машинки, отснятой в статье:)
Исходники проекта — на андроиде, под эклипсом. Библиотеки OpenCV включены.
Статья Васи по теме распознавания номеров.

P.S. Сейчас смотрим, что приходит на сервер. Люди, номер должен быть в фокусе! Сильно размазанные номера не распознаются у нас!

Автор: ZlodeiBaal

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js