Используйте opencv для отслеживания картофеля на ленте, лучшая альтернатива?

#python #opencv #image-processing

#python #opencv #обработка изображений

Вопрос:

Я хочу использовать какое-то машинное обучение для измерения (диаметра) и подсчета картофеля, проходящего по ленте. Я начал с opencv и начал обучать каскад положительным и отрицательным изображениям, это экран печати из короткого видео, которое я снял:

картофель на ленте

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

Итак, к вопросам,

  1. Как вы думаете, я на правильном пути?

  2. И есть идеи, как мне продолжить измерение диаметра?

  3. Как мне отслеживать каждую картофелину, чтобы она учитывалась только один раз?

(Это код, который я запускаю для идентификации картофеля)

 import numpy as np
import cv2
pot_cascade = cv2.CascadeClassifier('cascade.xml')
cap = cv2.VideoCapture('potatoe_video.mp4')
while 1:
    ret, img = cap.read()
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    potatoes = pot_cascade.detectMultiScale(gray, 5, 5)    
    for (x, y, w, h) in potatoes:
        cv2.rectangle(img, (x, y), (x   w, y   h), (255, 255, 0), 2)
    cv2.imshow('img', img)
    k = cv2.waitKey(30) amp; 0xff
    if k == 27:
        break

cap.release()
cv2.destroyAllWindows()
  

Комментарии:

1. Я могу сказать вам, что это почти невозможно, даже если это возможно, тогда это может быть очень, очень сложно реализовать с очень, очень низкой точностью.

2. Возможно ли установить камеру так, чтобы она смотрела вертикально вниз? проблема не в том, что это действительно сложно.

3. И было бы неплохо использовать камеру глубины

4. В качестве альтернативы машинному обучению темные промежутки между картофелем могут быть пороговыми, тогда можно вычислить расстояние до этих темных областей. Тогда можно применить алгоритм водораздела. как показано в docs.opencv.org/3.4.3/d3/db4/tutorial_py_watershed.html Хорошо: монеты на белом листе — простой случай по сравнению с картофелем…

Ответ №1:

Как вы думаете, я на правильном пути?

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

И есть идеи, как мне продолжить измерение диаметра?

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

Сначала вам нужно оценить перспективу (положение транспортной ленты относительно камеры), чтобы вы знали, как пространство изображения соотносится с реальным пространством на транспортной ленте. Что может помочь вам в определении преобразования реального пространства в пространство изображения — это наложить обычную сетку (например, лист с обычными черными точками) на ленту и наблюдать за ее движением. Установка камеры в режиме просмотра сверху может значительно упростить задачу.

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

В качестве альтернативы вычислите автоматическую корреляцию яркости картофеля (между картофелем темно, сам картофель отражает свет) и установите ширину пиков в автоматической корреляции. Или вычислите преобразование Фурье изображений и нормализуйте среднюю амплитуду в диапазоне частот, где вы ожидаете размер картофеля со средней амплитудой другого диапазона частот. Это работает лучше всего, если вы можете откалибровать метод с картофелем известного размера. Это означает, что вы можете записывать картофель заведомо разного размера и тем самым калибровать меры на основе автокорреляции или БПФ.

Я бы предпочел подход машинного обучения, потому что он потенциально дает вам единичные измерения картофеля.

Как мне отслеживать каждую картофелину, чтобы она учитывалась только один раз?

Каждая картофелина (потенциально) видна в течение временного интервала в видео, который необходим для транспортировки картофеля на ленте через поле зрения. Установив перспективу, вы можете связать положение на изображении и время записи с положением на конвейерной ленте, и пока картофель не меняет положение на конвейере, вы можете легко идентифицировать его во всем диапазоне времени, где он виден.

Вы в основном должны знать (оценивать) движение транспортной ленты, а затем вы можете «отменить» его (вычислительно) и усреднить по всем случаям, когда вы видели один и тот же картофель.

Я рекомендую следующий общий рабочий процесс:

  • Рассмотрите возможность размещения камеры в более выгодном положении (вид сверху).
  • Измерьте преобразование реального пространства в изображение-пространство-время, отслеживая объекты, которые легче обнаружить на известных расстояниях на ленте.
  • Примените обратное преобразование и, если хотите, усредните по всем изображениям одного и того же объекта (может помочь, если одно изображение зашумленное, с низкой контрастностью)
  • Либо используйте простое определение края и выполните некоторую статистику, чтобы получить средний диаметр картофеля (возможно, откалибруйте картофель известного размера), либо..
  • .. используйте машинное обучение, чтобы идентифицировать (и отслеживать, если вы не усредняли) отдельные картофелины
  • Если по пути вы столкнетесь с проблемами, разбейте их на мелкие кусочки и попросите решить каждую из них в отдельном вопросе.

Комментарии:

1. Спасибо за длинный и хороший ответ! Прочитав это пару раз, я думаю, что ключ в том, чтобы установить камеру в более выгодном положении и добавить некоторые эталонные измерения. Итак, когда начнется сезон сбора урожая (середина мая в Швеции), я получу новое видео, в котором я сосредоточусь на обнаружении краев! Затем я обновлю этот вопрос и, как вы предлагаете, разберу его на новые и отдельные вопросы.

2. @axel_ande Очень хороший комментарий. Пожалуйста, не обновляйте вопрос, а скорее откройте новый и обратитесь к этому. В конце концов, вы что-то изменили, и, вероятно, это новый вопрос. Удачи.