Создание собственного каскада Хаара для обнаружения объектов: пошаговое руководство

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

  1. Соберите положительные и отрицательные изображения:

    • Соберите большое количество позитивных изображений, содержащих объект, который вы хотите обнаружить. На этих изображениях объект должен быть центрирован и снабжен аннотациями.
    • Собирайте негативные изображения, не содержащие интересующий объект.
  2. Установить OpenCV:

    • Каскадное обучение Haar требует наличия OpenCV, поэтому убедитесь, что он у вас установлен. Вы можете использовать следующую команду для установки через pip:
      pip install opencv-python
  3. Создавайте положительные образцы:

    • Используйте утилиту opencv_createsamplesдля создания положительных образцов из ваших аннотированных положительных изображений. Эта утилита создает несколько положительных образцов, применяя различные преобразования к аннотированным изображениям.
    • Вот пример команды:
      opencv_createsamples -info positive.txt -vec samples.vec -w 24 -h 24

      В этой команде positive.txt— это текстовый файл, содержащий пути к вашим аннотированным позитивным изображениям, а samples.vec— это выходной файл, который будет содержать позитивные изображения. образцы.

  4. Создайте список отрицательных образцов:

    • Создайте текстовый файл, содержащий пути к вашим негативным изображениям. Каждая строка должна содержать один путь.
  5. Создать файл описания:

    • Создайте файл описания (например, cascade.xml), в котором указаны параметры для обучения вашего каскада. Этот файл должен включать такую ​​информацию, как количество этапов, размер положительных и отрицательных образцов, а также желаемое качество обнаружения.
    • Вот пример файла описания:
      opencv_traincascade -data cascade -vec samples.vec -bg negatives.txt -numStages 10 -minHitRate 0.995 -maxFalseAlarmRate 0.5 -numPos 2000 -numNeg 1000 -w 24 -h 24
  6. Обучение каскадного классификатора:

    • Используйте утилиту opencv_traincascadeдля обучения каскадного классификатора Хаара с использованием положительных и отрицательных выборок.
    • Вот пример команды:
      opencv_traincascade -data cascade -vec samples.vec -bg negatives.txt -numStages 10 -minHitRate 0.995 -maxFalseAlarmRate 0.5 -numPos 2000 -numNeg 1000 -w 24 -h 24

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

  7. Проверьте каскадный классификатор:

    • После завершения обучения вы можете протестировать каскадный классификатор на новых изображениях, чтобы обнаружить интересующий объект.
    • Вот пример того, как загрузить обученный каскад и обнаружить объекты на изображении с помощью Python и OpenCV:
      import cv2
      cascade = cv2.CascadeClassifier('cascade.xml')
      image = cv2.imread('test_image.jpg')
      gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
      objects = cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(24, 24))
      for (x, y, w, h) in objects:
       cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)
      cv2.imshow('Object Detection', image)
      cv2.waitKey(0)
      cv2.destroyAllWindows()