Думал в конце будет линк :)) идея классная, ничего не скажешь. Еще бы фотка не сохранялась а вместо этого в заметках появлялся текст например (можно в заметках софтинки самой)
Был бы благодарен, в конце поста увидеть ссылки, откуда брали информацию для реализации (оператора Собеля, пирамиды Гаусса, адаптивной бинаризации). Или хотя бы описание алгоритмов
Гауссова пирамида изображений:«Для получения слоя (i+1) в Гауссовской пирамиде из слоя i пирамиды, нам необходимо сначала свернуть этот слой с помощью Гауссовского ядра, а затем удалить все чётные строки и столбцы. Конечно из этого следует что каждое последующее изображение будет занимать четверть площади его предшественника.»
Это конечно можно, но из моего опыта, пользователи айфонов, в большинстве своем, такие люди что им нужна одна кнопка «Сделать красиво». Так что в своем приложении я этого не планирую.
Я делал подобную задачу под андроид, но там надо было распознавать автомобильные номера
Столкнулся с такими проблемами — очистка от шума, искажения и т.д.
Я, правда boofCV использовал, так как реализовывать все алгоритмы было довольно утомительно, например морфологические операции, кэнни
Да и как показывает практика — функции, реализованные в таких библиотеках хорошо оптимизированы по быстродействию и использованию памяти, что очень критично на мобильных девайсах
В итоге я использовал кэнни, затем фильтровал области по размеру и скармливал в OCR по одному символу — получилось довольно эффективно
Позвольте поинтересоваться. Вы реализовывали только распознавание или еще и поиск номера?
В данный момент, как раз работаю над такой задачей. И успешный поиск автомобильного номера происходит в ~80-85% случаев(что меня не очень устраивает).
Если вы работали над поиском, то было бы интересно узнать процент успешной локализации номера и, если не секрет, в общих чертах алгоритмы.
Конечно необходимо было номер найти и локализовать. Для этого я искал прямоугольники на изображении с определенным процентом заполнения черными пикселями. В версии для десктопа я использовал opencv и пример для поиска прямоугольников который идет в комплекте с этой библиотекой. Процент попаданий, к сожалению был не очень большой — процентов 60-80, так как картинки были в разных качествах, под разными углами, но я алгоритм потихоньку оптимизирую. Кроме этого возникнет проблема ложных срабатываний, понадобится дополнительный фильтр по ним
Линии принадлежащие одному контуру? Не совсем понимаю, как это.
Если не используются аппроксимации, то все же банально, например: проходим по картинке, нашли белый пиксель, создали контур, все соседние(и соседние соседних и т.д. рекурсивно) белые пиксели добавляем в этот контур, при этом помечая их как-нибудь.
Ну и еще иерархия контуров составляется.
Можно, конечно, глянуть исходники OpenCV, благо они под рукой, но слабонервным этого делать не стоит.
Вот была у меня однажды необходимость посмотреть как что-то там реализовано в модуле calib3d.
И поругался и повеселился, но, так и не разобравшись, плюнул на это дело. Реализовал сам.
Сейчас вот глянул contours.cpp. Не знаю, сколько потребуется времени, чтобы загрузить в мозг эти алгоритмы по коду.
Форматирование кода нормальное. Но одно-двух-трех-буквенные названия переменных и дикое обилие magic numbers… нет, я это читать не могу.
Когда пишешь сам, лучше понимаешь как это работает. Можешь изменить пару цифр в алгоритме и сразу видишь что изменилось на выходе. Не знаю как на андроиде, но в opencv под iOS мне кажется, размытие по гауссу делается только с ядром 5. Т.е. ты уже в определенных рамках, а если мне надо ядро 3 или 7. Начинаешь писать сам недостающие функции, так уж легче все с нуля самому написать.
Это да, поэтому, недавно реализовал размытие гаусса в общем виде (для retinex — там ядро большое нужно). Но опять таки моя реализация вышла чуть более требовательной по памяти.
У меня во дворе автолюбители часто «запирают» друг друга, оставляя телефонный номер под лобовым стеклом. Неоднократно приходила в голову мысль сделать распознавание телефонного номера по фотографии, чаще эта мысль посещает зимой и в темноте, ближе к лету функция частоты асимптотически стремится к нулю с редкими осцилляциями.
Ну эта штука, по идее, есть команда. То бишь фотографируя какую-то надпись и получая ее в виде текста, мы можем трактовать это как просьбу пользователя сделать что-то с этими данными. Трактовка зависит от вида данных.
Например, если сфотографирован номер авто, то получаем по нему какую-то информацию.
Или фотографируется какой-то продукт в магазине и по нему получается дополнительная информация.
Хочу сказать, что необязательно это в другой стране делать. Может примеры несколько надуманны, но смысл в том, что это как Siri. Только не говоришь в нее запрос, а фотографируешь.
Под андроид это умеет делать google translate, а под iOS похоже его не научили. Поэтому на айфоне можно воспользоваться google goggles: www.wikihow.com/Translate-With-Google-Goggles
подобная функциональность уже заявлена в последнем google translate.
пока работает плохо, но…
P.S. а что касается «ориентироваться в Израиле»… громко и внятно, на всю улицу, на любом доступном Вам языке кричите «И что за х… я тут написана??!» и вам немедленно отвечают.
В свое время я делал штуку для выделения текста (номера автомобиля) и применил построчно для этого прямое и обратное БПФ — после прямого отбрасывал в результате те гармоники, которые относятся к очень низким и очень высоким частотам и делал обратное преобразование. после этого применял нечто, что называл «инерциальный» фильтр — по сути суммировал вдоль строки яркости бегущим окном и если значение было больше порога, то отмечал точку. В результате получал размеченные зоны, где был некоторый ритм, характерный для текста. Это еще в 97-98гг было, работало почти в реальном времени на i486, правда с камеры было невысокое разрешение. БПФ помню еще Watcom C компилировал, а потом руками дооптимизировал, sin & cos по таблице итп.
Учитывая развитие google translate и похожих утилит, за то время пока будете дорабатывать продукт можно потерять ЦА.
ИМХО — как раз тут ключевым плюсом была бы дополненная реальность. Чтобы навести телефон на текст, а прога затирала его цветом фона и поверх выводила перевод в том же месте и с теми же искажениями… Если в реальном времени не получится — то хоть на готовой фотке.
Даже в тех макетах что у вас — google translate — просто выдал бы кучу неструктурированного текста, читать который крайне неудобно…
Спасибо за пост и подробное описание именно реализации. Единственное удивило, что не много программ с такой функциональностью (которые поддерживают русский), например, на Nokia Lumia своей пользуюсь Bing Translator (обычно как раз для не English текстов и надписей), который умеет в live-режиме с камеры переводить — вот ссылка на только что сделанный перевод.
Детектирование и локализация произвольного текста на изображениях, полученных с помощью фотокамер мобильных телефонов