Как определить наличие объекта на изображэнии при помощи OpenCV?

Здравствуйте.

Речь НЕ пойдет о лицах, книгах, номерах. Задача, как мне кажется, несколько проще:

Есть автопогрузчик с вилочным захватом. Работает с поддонами подхвата.

На вилку "смотрит" камера Андроид телефона. (сзади, немножко сверху)

Задача: Определить, загружен ли автопогрузчик, то есть лежит ли на вилке поддон (заполеный какими то объектами) или нет. Разбить процесс вычисления на блоки. Максимальное количество блоков обработать на телефоне, а то что не "поместилось" (например, из-за времени) передать через вайфай на терминал водителя, дообработать там и вывести результат.

Софт: OpenCV, OpenCV4Android

Был испробован
Подход 1: (базировался на предыдущей работе коллеги) Камера устанавливается в фиксированой точке. На изображении указываются два PointsOfInterest - точки которые лежат на зубцах вилки.
  1. Вокруг POI делается распознавание по градиенту и находятся приблизительные контуры зубцов вилки.
  2. Вокруг зубцов "рисуются" прямоугольники.
  3. Подсчитывается сума площадей прамоугольников для незагруженой вилки
  4. Если на вилке поддон, то получается лишь один большой прямоугольник.
  5. Площадь большого прямоугольника значительно превышает площадь для незагруженой вилки.
  6. Профит


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

Поэтому решено применить новый подход. Идея проста:
Подход 2:
  1. Нарезать видео с камеры на отдельные картинки.
  2. Разбить на учебный и тестовый наборы (загружен/пустой).
  3. На десктопе прогнать несколько алгоритмов машинного обучения.
  4. Алгоритм наиболее подходящий для задачи закодить на телефоне
  5. Профит


Насколько я понимаю лучше всего для картинок просчитывать HOG и гонять обучение по нему.
Но дальше образуется загвоздка:
То есть, общие знания про машинное обучение с Википедии, Хабра и документации OpenCV дают понимание, что надо как минимум запустить нейронную сеть в нескольких вариантах, но...

Вопрос
:
  1. Жизнеспособна ли идея второго подхода?
  2. Какие алгоритмы лучше всего использовать?
  3. На что обратить внимание, что я упустил?


Буду благодарен за любые наводки.
Извините, если сильно протупил с вопросом.

Читал про каскад Хаара на Хабре, но кажется это немного перебор.
  • Вопрос задан
  • 3139 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Rascko
А почему бы не сделать немного проще:
1. На каждый зубец вилки погрузчика вешаем по яркому-яркому светодиоду/просто какому-то высококонтрастному объекту (светодиод+катафот, например)
2. Если палета их закрывает -> Они не распознаются -> Что-то есть на вилке. Если они видны - значит, вилка свободна.

Распознавать две яркие светящиеся точки с известным линейным расстоянием между ними - имхо, легче, чем контуры вилки и груза, особенно в полутемном складе.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы