Вот текущий процесс обработки (упрощенный):
Код: Выделить всё
def extra_process(img):
sm = cv2.bilateralFilter(img, d=9, sigmaColor=75, sigmaSpace=75)
lab = cv2.cvtColor(sm, cv2.COLOR_BGR2LAB)
l, a, b = cv2.split(lab)
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8))
l_clahe = clahe.apply(l)
lab_cl = cv2.merge((l_clahe, a, b))
return cv2.cvtColor(lab_cl, cv2.COLOR_LAB2BGR)
def process_pipeline(img):
enhanced = extra_process(img)
gray = cv2.cvtColor(enhanced, cv2.COLOR_BGR2GRAY)
gray = cv2.equalizeHist(gray)
blur = cv2.GaussianBlur(gray, (5, 5), 0)
canny = cv2.Canny(blur, 30, 150, 3)
kernel = np.ones((3,3), np.uint8)
closed = cv2.morphologyEx(canny, cv2.MORPH_CLOSE, kernel)
cnt, _ = cv2.findContours(closed.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_TC89_KCOS)
rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
cv2.drawContours(rgb, cnt, -1, (0, 255, 0), 2)
counted = sum(1 for c in cnt if cv2.contourArea(c) > 100)
return rgb, counted
Мои цели:
Я хочу создать полуавтоматический рабочий процесс самообучения, который поможет компьютеру учиться быстро создавать новые типы объектов.
Идея:
- Таким образом, система может быстро адаптироваться к новым моделям без необходимости полного внешнего цикла обучения.
- Затем она запрашивает два, три или более одинаковых объектов, возможно, перекрывающихся или находящихся под разными углами.
- Система использует эти образцы, чтобы научиться распознавать и разделять их. объекты.
- После подтверждения пользователь может разместить сотни похожих объектов на лотке для автоматического подсчета.
Я избегаю использования YOLO или предварительно обученных моделей. Основная причина в том, что моя производственная линия имеет очень большое разнообразие объектов — иногда ежедневно появляются две или более новых объектных моделей.
Повторное обучение или точная настройка YOLO (или любой предварительно обученной CNN) для каждой новой модели было бы слишком трудоемким и неэффективным.
Вместо этого я ищу облегченный подход к локальному обучению или адаптивному распознаванию на основе OpenCV.
Мой вопрос:
- Возможен ли подобный рабочий процесс самообучения исключительно с использованием OpenCV (классические методы)?
- Какой подход будет хорошим, чтобы помочь системе распознавать и разделять перекрывающиеся небольшие объекты одного и того же типа?
- Любые советы, ссылки на исследования или аналогичные проекты, на которые вы можете мне указать, будут очень признательны.
Подробнее здесь: https://stackoverflow.com/questions/797 ... -camera-no