Подглава 2.5 Работа с ROS-пакетом для отслеживания лиц
Last updated
Was this helpful?
Last updated
Was this helpful?
Мы уже создали или скопировали пакет face_tracker_pkg в рабочую область и обсудили некоторые из его важных зависимостей. Теперь мы собираемся обсудить, что именно делает этот пакет!
Этот пакет состоит из узла ROS с именем face_tracker_node, который может отслеживать лица с помощью API OpenCV и публиковать центроид лица в теме. Вот блок-схема работы face_tracker_node:
Давайте обсудим вещи, связанные с face_tracker_node. Один из разделов, который может быть вам незнаком, - это классификатор Face Haar:
Face Haar классификатор: Каскадный классификатор на основе признаков Хаара - это подход машинного обучения для обнаружения объектов. Этот метод был предложен Полом Виола и Майклом Джонсом в их работе «Быстрое обнаружение объектов» с использованием расширенного каскада простых функций в 2001 году. В этом методе каскадный файл обучается с использованием положительного и отрицательного образца изображения, и после обучения этот файл используется для обнаружения объекта.
track.yaml: Это файл параметров ROS, имеющий такие параметры, как путь к файлу Haar, topic входного изображения, topic выходного изображения и флаги для включения и отключения отслеживания лица. Мы используем файлы конфигурации ROS, потому что мы можем изменить параметры узла без изменения исходного кода трекера лица. Вы можете получить этот файл из face_tracker_pkg/config/track.xml.
Узел usb_cam. В пакете usb_cam есть узел, публикующий поток изображений с камеры в сообщениях ROS Image. Узел usb_cam публикует изображения с камеры в topic /usb_cam/raw_image, и этот topic подписывается узлом отслеживания лица для обнаружения лица. Мы можем изменить topic ввода в файле track.yaml, если потребуется.
face_tracker_control: это второй пакет, который мы собираемся обсудить. Пакет face_tracker_pkg может обнаруживать лица и определять центр тяжести лица на изображении. Сообщение центроида содержит два значения, X и Y. Мы используем пользовательское определение сообщения для отправки значений центроида. Эти значения центроида подписываются узлом контроллера и перемещают Dynamixel для отслеживания лица. Dynamixel контролируется этим узлом.
Вот файловая структура face_tracker_pkg:
Давайте посмотрим, как работает код отслеживания лица. Вы можете открыть файл CPP по адресуface_tracker_pkg/SRC/face_tracker_node.cpp, Этот код выполняет обнаружение лица и отправляет значение центроида в topic.
Мы рассмотрим и поймем некоторые фрагменты кода.
В нашем случае мы используем обученный файл классификатора Haar вместе с исходным кодом OpenCV. Вы получите эти файлы классификатора Хаара из папки данных OpenCV (). Вы можете заменить нужный файл Haar в соответствии с вашей задачей. Здесь мы используем классификатор лица. Классификатор это XML-файл, в котором есть теги, содержащие признаки лица. После того, как функции внутри XML совпадают, мы можем извлечь интересующую область (ROI) лица из изображения, используя API-интерфейсы OpenCV. Вы можете проверить классификатор Хаара этого проекта из face_tracker_pkg/data/face.xml.