Face Detection For Mobile Robots

tracking01_0193

This is the project I started working on for the completion of my masters degree. The goal of the project was to examine existing face detection systems in order to optimize them for the use on Unmanned Aerial Vehicles (UAV) platforms. The resulting system is a package for Robotics Operating System (ROS), which allows for it to be easily integrated with other robotics systems. For the detection itself, I made use of the OpenCV boosting cascade detection. In addition to the simple detection, I applied the Lucas-Kanade Optical flow to track detected faces from previous frames in order to make the system more consistent. For easy use with other ROS packages, the settings of the detection system can be changed over the ROS rqt_reconfigure set-up. After the detection, the package publishes the coordinates of the detected faces to a ROS-topic, so that they can be accessed by other nodes. The code for the face detection package can be found on my Github page. The following is a list of included Features:

  • Face Detection OpenCV
  • Face Detection Dlib
  • Optical Flow Tracking
  • CUDA Support
  • ROS rqt interface

 

The following video shows the face detection with tracking. Green boxes are detected faces, while blue boxes represent faces which have been tracked from a previous frame. The little dots indicate the direction of the tracking.

 

This video shows a simplified version of the system which only makes use of face detection.

 

The interface allows for changes to all of the significant variables in the program.

screenshot_interface

The system is still under development, and I am providing regular updates as well as fixes. Some of the features planned include:

Improve Cuda Support This is aimed at small mobile platforms such as the Nvidia Jetson TK1
Face Recognition In order to achieve a continuous face ID, one needs to recognize faces after losing their track. This could be done with EigenFaces or LBP-Histograms
Separate Launch files To account for different scenarios, I would like to implement separate launch files.
General performance improvements I am still looking into different ways to improve performance, such as using LBP features instead of Haar-based features for the detection.

 

This is the mobile platform which I am currently working on. It’s a Nvidia TK1 developer kit, which is small enough to be mounted on a UAV:

IMG_1967