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