Конференция "Прочее" » Алгоритмы распознавания 2D изображений с фото
 
  • Кто б сомневался © (27.08.16 18:11) [0]
    Подскажите что почитать на эту тему.
    Возможно есть и инфа связанная с Delphi (как оптимальнее и быстрее делать анализ TBitmap) или даже исходники.
    Задача - распознать определенные рисунки с вебкамеры.

    Спасибо.
  • Eraser © (27.08.16 18:20) [1]
    велосипед будет изобрести сложно, я бы глянул сюда OpenCV
  • Кто б сомневался © (27.08.16 18:52) [2]
    Хотелось бы теории почитать.
    Скорее всего придется самому разрабатывать на Delphi быстрый алгоритм под конкретные узкоспециализированные условия, который будет работать на мобильных устройствах.
  • Pavia © (27.08.16 19:22) [3]
    Есть два варианта OpenCV, ROS. Причем вторая мне нравится больше. Особо не сравнивал, но были отличные проекты.

    Delphi? А сколько человек у вас в команде? А сил то хватит, не надорвётесь?


    > быстрый алгоритм под конкретные узкоспециализированные условия,
    >  который будет работать на мобильных устройствах.

    Они все узко специализированные.


    > Задача - распознать определенные рисунки с вебкамеры.

    Колитесь что за рисунки?
    Лица, BarCode, QRCode, текст, галочки в тесте, автомобильные-номера, здания, товар на полке?
  • Кто б сомневался © (27.08.16 19:32) [4]
    Условно говоря - есть форма объекта, допустим красный прямоугольник с черной рамкой - массив чисел -  это шаблон (эталон), с ним будут сверяться остальные объекты.

    Эти объекты (другие прямоугольники) по масштабу конечно будут отличаться от эталона.
    Суть - нужно найти на картинке прямоугольник, с похожими пропорциями. Вот это для меня загадка.
    Как это обычно делается? Если эталонный прямоугольник у нас 2x2 см. А тот с которым сравниваем - 5x5 см.

    Вопрос в том, как обычно сравнивают новый объект с эталоном. Какие методики существуют, какие фильтры обычно используют чтобы упростить распознавание - напр. убрать шум, сделать "четче" объект итп.
    По идее нужно - выделить прямоугольник из общей картины, выделить контуры, и далее  просчитать разницу между эталоном и новым прямоугольником (сравнить пропорционально). Вот последний этап мне пока не совсем понятен.

    Pavia ©   (27.08.16 19:22) [3]

    Пусть будет "товар на полке". Грубо говоря форма коробочки или бутылочки.
  • Кто б сомневался © (27.08.16 19:42) [5]
    Если ли алгоритмы реализованные на Delphi для выделения различных линий на изображениях?
  • Кто б сомневался © (27.08.16 21:08) [6]
    [распознавание образов]

    https://habrahabr.ru/search/?q=%5B%D1%80%D0%B0%D1%81%D0%BF%D0%BE%D0%B7%D0%BD%D0%B0%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%5D&target_type=posts

    Также тэги [распознавание текста] и [распознавание текстов]

    --------------
    С контурами примерно понятно - обычный обход с сравнением цвета.

    Теперь главный вопрос как обычно сравнивают контуры с эталонным шаблоном? Притом что сравниваемый контур может немного отличаться от эталонного.
    Вот насчет этого почитать бы..
  • Pavia © (27.08.16 21:19) [7]

    > Эти объекты (другие прямоугольники) по масштабу конечно
    > будут отличаться от эталона.
    > Суть - нужно найти на картинке прямоугольник, с похожими
    > пропорциями. Вот это для меня загадка.
    > Как это обычно делается? Если эталонный прямоугольник у
    > нас 2x2 см. А тот с которым сравниваем - 5x5 см.

    Камеру подвинул ближе размер изменился. Под углом начал снимать картинка изменилась в пропорциях. Так что это плохой признак.

    А так либо допуск и отсечение по порогу. Либо перебор возможных вариантов.


    > Вопрос в том, как обычно сравнивают новый объект с эталоном.

    Нейронные сети, метод опорных векторов, каскады. И таки да в вашем случае с эталоном не сравнивают, а выполняют классификацию. Пусть даже классифицируют на 2-класса. Но суть в том что есть отрицательные шаблоны.


    > какие фильтры обычно используют чтобы упростить распознавание

    Там много всего, нет общих подходов.


    >  напр. убрать шум, сделать "четче" объект итп.

    Что-бы убрать шум применяют сглаживание Blur. Чётче обычно никто не делает, хотя алгоритмы есть. А вот адаптивную бинаризацию применяют.


    > По идее нужно - выделить прямоугольник из общей картины,
    >  выделить контуры, и далее  просчитать разницу между эталоном
    > и новым прямоугольником (сравнить пропорционально). Вот
    > последний этап мне пока не совсем понятен.

    Ну что-же подобные работы по поиску прямоугольника я видел.
    А что с пропорцией не понятно? Вычисляем размеры и сравниваем.
    К примеру

    NewBitmap:=Canny(Bitmap);// Выделяем границы
    Rect:=GetAABB(Imge); // Ищем прямоугольник
    Aspect:=Rect.Width/Rect.Height; // Соотношения
    { Сравнение с допуском EQ(Aspect,AspectEtalon, Eps)}
    if Abs(Aspect-AspectEtalon)<= Eps then
       Result:=Eq // равны
     else
       Result:=NotEq; // не равны.




    > Если ли алгоритмы реализованные на Delphi для выделения
    > различных линий на изображениях?

    Что ты заладил Delphi, Delphi? Delphi умерло. Нету кода на Delphi.

    Есть Delphi OpenCV, заголовочные файлы для OpenCv 1 или 2 версии. Заброшено 5 лет не обновляется. Работает разумеется только на x86.

    А так у меня есть своя библиотека. Сейчас на реконструкции, поэтому не выкладываю.
  • Кто б сомневался © (27.08.16 21:26) [8]
    Реализация простейшего алгоритма распознавания графических образов.
    (попиксельный анализ рукописного текста с классификацией)
    http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1203


    > Что ты заладил Delphi, Delphi? Delphi умерло. Нету кода
    > на Delphi.


    У меня нет времени на изучение С++, жизнь так коротка...
    Тем более нужно написать под андроид и IOS, а тут С++ не совсем мне товарищ, больше гемора будет..
  • Кто б сомневался © (27.08.16 21:30) [9]
    Еще на Delphi

    Распознаем текст, используя расстояние Хэмминга + составление массива эталона + алгоритм сравнивания из ссылки выше.
    https://geektimes.ru/post/90867/
  • Pavia © (27.08.16 21:31) [10]

    > Теперь главный вопрос как обычно сравнивают контуры с эталонным
    > шаблоном? Притом что сравниваемый контур может немного отличаться
    > от эталонного.
    > Вот насчет этого почитать бы..

    Сравнение всегда идёт с допуском. Про это можно не упоминать.

    Поиск контуров
    http://robocraft.ru/blog/computervision/640.html
    сравнение контуров
    http://robocraft.ru/blog/computervision/867.html
    А так обычно любое сравнение сводится к НС и прочим классификаторам.
  • Pavia © (27.08.16 21:40) [11]

    > У меня нет времени на изучение С++, жизнь так коротка...
    > Тем более нужно написать под андроид и IOS, а тут С++ не
    > совсем мне товарищ, больше гемора будет..

    Си++ вы выучите за 1-2 неделю. А задача распознавания не имеют общих алгоритмов и решает частными. А на поиск частных вы потратите недели месяцы. Так что провозитесь гораздо дольше.


    > Реализация простейшего алгоритма распознавания графических
    > образов.(попиксельный анализ рукописного текста с классификацией)

    Проблема в том что найти алгоритм который бы работал в любых условиях не возможно. За исключение ABBYY которая за  более чем 20 лет таки родила отличную программу по распознаванию.
    Большинство, почти все публикации по распознаванию носят рекламный характер. Материал носят постановочный характер.
    Выставляется свет, чтобы не было шума. Из 10 дублей выбирается удачный. подбираются те изображения где алгоритм работает лучше всего.

    Так вот OpenCV это кладезь уже отработанных алгоритмов. Вы начинаете не с 0, а с уже более или менее работающими алгоритмами.
  • Pavia © (27.08.16 21:46) [12]
    http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1203
    https://geektimes.ru/post/90867/
    И что вы их пробовали? Я пробовал. Не работает. Метод годится для цифр и то с натяжкой. А для букв уже непригоден, слишком много ошибок. Поэтому надо использовать классификатор оптимизированный глобально.
  • Кто б сомневался © (27.08.16 22:10) [13]

    > Так вот OpenCV это кладезь уже отработанных алгоритмов.
    > Вы начинаете не с 0, а с уже более или менее работающими
    > алгоритмами.

    Одна проблема - эти алгоритмы универсальные. А значит потребуют больше ресурсов, особенно на моб. платформах, где их и так не много.
    Плюс время которое потратиться на изучение всей библиотеки.

    С другой стороны, если начну с нуля, то результат можно сделать заточенным под конкретную задачу, что увеличит производительность, улучшит мультиплатформенность (будет один код - один проект, а как я это сделаю с OpenCV - там придется делать 2 проекта, на 2 разных языках, плюс по опыту знаю,  обязательно что-то будет отваливаться),
    да и мне будет проще в будущем разобраться, зная основы и что где подкрутить..


    > И что вы их пробовали? Я пробовал. Не работает. Метод годится
    > для цифр и то с натяжкой. А для букв уже непригоден, слишком
    > много ошибок.

    Мне главное идею подхватить.
    Вообще мне нужно определить цвет и форму определенных объектов на фото (не текст) и сравнить из с базой эталонных объектов (классифицировать объект). Объекты по условию будут 2D, в правильном ракурсе, фон будет всегда определенного цвета.
  • Кто б сомневался © (27.08.16 22:21) [14]
    Отличная статья с сырцами Delphi

    http://www.ampersant.ru/glaz/
  • Pavia © (27.08.16 23:12) [15]
    Про цвет сразу забудьте.
    Если настроить камеру, то цвет можно определить. А если не настроена, то там чудеса бывают: красный в зелёный превращается. А синий в жёлтый.
    Плюс наличие тени тоже влияет. http://www.psy.msu.ru/illusion/contrast.html
    Типичные способы это выкрутить насыщенность на максимум. Или использовать HSV модель.


    > Одна проблема - эти алгоритмы универсальные. А значит потребуют
    > больше ресурсов, особенно на моб. платформах, где их и так
    > не много.

    Вы неправы, универсальность не связана со скоростью. Распознавание это не завершённая область. Эта область всё ещё находится в научном поиске.
    Поэтому тут нет нельзя чётко сказать вот это лучше а значит медленнее. К примеру угловой детектор Fast не только быстрее, но и лучше чем детектор Хафа.
    Что касается мобильной платформы, я вам ROS уже советовал. Она лучше заточена под мобильную платформу.


    > как я это сделаю с OpenCV - там придется делать 2 проекта,
    >  на 2 разных языках, плюс по опыту знаю,  обязательно что-
    > то будет отваливаться),

    Про оптимизацию я вообще молчу. Это отдельная тема. Но тут как я вижу не обойтись и полюбому надо делать 2 проекта. Один пусть медленный но качественный. А второй быстрый, но менее качественный.
    Причем качественный можно вынести на сервер и брать деньги за быстрое распознавание.


    > Объекты по условию будут 2D, в правильном ракурсе, фон будет
    > всегда определенного цвета.

    С этого и надо было начинать. А то витрина в магазине это совершенно разный класс задач по сложности.
    Это хорошо что фон однородный. Тогда у вас вообще всё просто.
    Может у вас и освещение всегда одинаковое?
  • DVM © (28.08.16 09:39) [16]

    > Pavia ©   (27.08.16 21:19) [7]


    > Есть Delphi OpenCV, заголовочные файлы для OpenCv 1 или
    > 2 версии. Заброшено 5 лет не обновляется. Работает разумеется
    > только на x86.

    Да ладно, чушь то не неси

    https://github.com/Laex/Delphi-OpenCV 23 дня назад обновлено


    > Кто б сомневался ©   (27.08.16 19:32) [4]

    Прямоугольники ищут с помощью преобразования Хафа, например.
  • DVM © (28.08.16 09:45) [17]

    > Pavia ©   (27.08.16 19:22) [3]
    > Есть два варианта OpenCV, ROS. Причем вторая мне нравится
    > больше. Особо не сравнивал, но были отличные проекты.
    >
    > Delphi? А сколько человек у вас в команде? А сил то хватит,
    >  не надорвётесь?

    Задачи машинного зрения обычно наделяют некой совершенно мистической сложностью. Это от незнания с чего начать. И с кажущегося отсутствия информации в интернете.
    Для частных задач алгоритмы как правило не сложные и под силу одному человеку.
  • Игорь Шевченко © (28.08.16 09:51) [18]

    > Что ты заладил Delphi, Delphi? Delphi умерло. Нету кода
    > на Delphi.


    Жалко, что только Delphi.
  • Pavia © (28.08.16 10:53) [19]

    > Прямоугольники ищут с помощью преобразования Хафа, например.

    А сами пробовали?
  • Кто б сомневался © (28.08.16 13:24) [20]

    > Что касается мобильной платформы, я вам ROS уже советовал.
    >  Она лучше заточена под мобильную платформу.


    А можно ссылку на ROS или расшифровку аббревиатуры.
    Я что-то никак не найду.
    Спасибо..
  • Eraser © (28.08.16 15:14) [21]

    > Кто б сомневался ©   (27.08.16 21:26) [8]

    http://opencv.org/downloads.html
    OpenCV for Windows
    OpenCV for Linux/Mac
    OpenCV for Android
    OpenCV for iOS

    imho, намного быстрее сделать/найти заголовочные файлы, чем лезть в эту область.
  • Pavia © (28.08.16 15:43) [22]
    Вот вам ссылочка на ROS. Вернее просто хотелось показать именно этот проект, что бы вы посмотрели и оценили  как люди оптимизируют.
    http://wiki.ros.org/tum_ardrone
  • DVM © (28.08.16 16:41) [23]

    > Pavia ©   (28.08.16 10:53) [19]


    > А сами пробовали?

    Пробовал. И не только прямоугольники, но и прямые, окружности и пр.
    Кстати, в том же OpenCV есть все готовое.
  • Pavia © (28.08.16 23:54) [24]
    Да, знаю что OpenCV есть. Вопрос в том что на синтетических тестах он работает отлично, а на реальных тестах плоха. И чтобы загнать в рамки нормы придётся повозиться.
  • DVM © (29.08.16 12:38) [25]

    > Pavia ©   (28.08.16 23:54) [24]


    > Вопрос в том что на синтетических тестах он работает отлично,
    >  а на реальных тестах плоха.

    Ну я дальше синтетических тестов не пошел, меня скорость не устроила.
  • GanibalLector © (29.08.16 13:02) [26]

    > какие фильтры обычно используют чтобы упростить распознавание
    > - напр. убрать шум, сделать "четче" объект итп.


    Deskew (устранение углового перекоса), Despeckle (удаление мелкого шума). Можно логическими функциями пользоваться, чтобы сделать толще или наоборот.
  • GanibalLector © (29.08.16 13:12) [27]

    > За исключение ABBYY которая за  более чем 20 лет таки родила
    > отличную программу по распознаванию.


    У них все отлично с печатным, спору нет. А вот с рукописным я бы так не был уверен. Про естественный рукописный я вообще молчу. Пользуюсь решением Parascript для этих целей. Но там правда ценник очень высокий.
  • Кто б сомневался © (29.08.16 15:53) [28]

    > DVM ©   (29.08.16 12:38) [25]
    >
    >
    > > Pavia ©   (28.08.16 23:54) [24]
    >
    >
    > > Вопрос в том что на синтетических тестах он работает отлично,
    >
    > >  а на реальных тестах плоха.
    >
    > Ну я дальше синтетических тестов не пошел, меня скорость
    > не устроила.


    Хм, если на PC скорость не устроила, то на моб. процессорах вообще не очень будет.
    И в какую сторону вы пошли дальше?
  • DVM © (29.08.16 17:00) [29]

    > Кто б сомневался ©   (29.08.16 15:53) [28]


    > Хм, если на PC скорость не устроила, то на моб. процессорах
    > вообще не очень будет.

    Да не так там все плохо было, это меня не устроило и не устроила конкретная реализация из OpenCV. Мне надо было просто значительно быстрее.
  • DVM © (29.08.16 17:07) [30]

    > Кто б сомневался ©   (29.08.16 15:53) [28]

    Ты скачай OpenCV, либо в чистом виде либо с оберткой на Delphi ссылку на которую я привел выше. Там в примерах как раз есть поиск фигур, можешь замерять время сам.

    Еще есть вот такая библиотека на C# http://www.aforgenet.com/aforge/framework/
    В ней тоже есть преобразования Хафа и его легко портировать на Delphi.
 
Конференция "Прочее" » Алгоритмы распознавания 2D изображений с фото
Есть новые Нет новых   [134431   +13][b:0][p:0.001]