Лица везде! От простых селфи до интеллектуальных интеллектуальных систем распознавания лиц.
OpenCV включает в себя несколько основных каскадов, которые имеют очень хорошие практические приложения, такие как обнаружение лиц, распознавание номерных знаков транспортных средств и т. Д.
Вы когда-нибудь задумывались, что вы можете создать свой собственный Каскад для обнаружения любого объекта по вашему выбору? Объектом может быть что угодно, например фрукт, мяч, ручка, бутылка и т. Д., При условии, что у вас есть несколько положительных изображений того же самого.
Положительные изображения - это изображения, которые содержат наш объект. Например, позитивные изображения банана должны содержать банан на каждом из них на любом фоне. Пример -
Негативным изображением может быть что угодно, при условии, что оно не содержит конкретного объекта. Например, с бананом, это может быть любая картинка, только без банана.
Для более надежного классификатора / каскада вам понадобится много положительных и отрицательных изображений.
Мы сосредоточимся на создании классификатора / каскада / детектора для автомобиля. Я буду использовать каскад / классификатор / детектор как взаимозаменяемые.
Предварительные требования:
- Python (подойдет начальный уровень)
- OpenCV (подойдет начальный уровень)
Шаги
- Чтобы получить наши положительные изображения, мы будем использовать базу данных изображений для обнаружения автомобилей, которая доступна здесь. Вы можете скачать его и извлечь содержимое в свою папку. После извлечения вы обнаружите, что негативные и позитивные изображения присутствуют в папке TrainImages - 500 негативных изображений, 550 позитивных изображений. Извлеките их оба в отдельные папки, например:
2. Чтобы создать каскад, теперь нам нужно создать файл cars.info, который будет содержать информацию, необходимую для обучения позитивных изображений.
pos / pos-0.pgm → Расположение нашего позитивного изображения.
1 → Количество объектов на изображении
0 0 100 40 → Расположение изображения. 0 0 - координаты x и y, а 100 40 - ширина и высота, так что изображение простирается от (0,0) до ширины = 100 и высоты = 40.
Если у вас есть 2 или более объекта, ваше конкретное изображение на cars.info станет
pos / pos-1.pgm 2 0 0100 40 1 1 80 60
Для Объекта 1 от (0,0) до Ширина = 100, Высота = 40
Для Объекта 2 от (1,1) до Ширина = 80, Высота = 60
Я создал файл cars.info, его можно скачать здесь.
3. Чтобы описать все негативные изображения, мы просто собираем их имена в файле bg.txt. Он может быть найден здесь".
4. Теперь создадим файл vec с помощью OpenCV. В командной строке (в корневой папке) выполните команду:
opencv_createsamples -info cars.info -num 550 -w 48 -h 24 -vec cars.vec
num → количество имеющихся у нас объектов.
w, h → ширина и высота обучающих данных, которые мы хотим создать.
Теперь в корневой папке будет создан файл cars.vec.
Если вы столкнулись с ошибкой здесь opencv_createsamples не распознается…, извлеките этот zip в структуру папок вашего проекта.
Чтобы проверить созданный cars.vec на предмет допустимости, запустите команду
opencv_createsamples -vec cars.vec -w 48 -h 24
5. Чтобы обучить каскад, мы создадим каталог с именем data и запустим
opencv_traincascade -data data -vec cars.vec -bg bg.txt -numPos 500 -numNeg 500 -numStages 10-w 48 -h 24 -featureType LBP
Чем больше numStages, тем лучше наша модель.
6. Теперь в нашей папке данных у нас есть файл cascade.xml, который является нашим последним каскадом и может использоваться для обнаружения автомобилей. Он также содержит поэтапные xml-файлы после каждого этапа.
Протестируйте свой каскад и дайте мне знать результаты.
Пожалуйста, хлопайте в ладоши, если эта история вам помогла.