We are going to see how to built a camera that can detect and track faces .
HOW DOES IT WORK ??!
A webcam capture and feeds images to a program running on a computer .
The program process the images to detect faces .
If no face is detected in the image the camera will start randomly roaming until it finds a face to track .
If a face is detected the camera will try to move to get the detected face in the centre of image .
The camera movement is handled by 2 servos controlled by an arduino Uno communicating with the face tracking program using serial communication through USB .
The 3 LED's on the case let us know the state of the tracking :
- Red : no face detected .
- Yellow : face detected but not in the center of the image .
- Green :face detected and in the center of the image .
WHAT YOU NEED .
*** disclaimer : some of the links below are affiliate links, this means I get a small commission when you purchase using them ( at no extra cost to you ) . If you like this website please consider using them but you don't have to ! ***
- Arduino Uno R3
- 2 x MG-90S servos (You can also use SG-90 servos)
- Power supply ( needs to deliver over 7 volts and 2 amps )
- 5V voltage regulator
- 2.1x5.5mm jack plug
- male pin header
- heatshrink tubing
- M2x10mm self tapping screw
- rubber band ( you can also use zip ties )
- 3 x LED ( optional )
- 3 x 220 ohm resistor ( optional )
- something to check dimensions, a ruler or a caliper
- wire stripper
- soldering iron
- multi-meter .
*** If you do not have access to a 3D printer check the
FACE TRACKING CAMERA CARDBOARD version . ***
Here are the 8 parts you will need to print :
- Camera holder arm
- Upper bracket
- Lower bracket
- LED lock
- Short axle end
- Long axle end
CAMERA HOLDER ARM
SHORT AXLE END
LONG AXLE END
1 . Fit the upper bracket to the camera holder arm using the short axle end (on the side of the camera holder arm with the groove ) .
2 . Screw the long axle end to the upper bracket .
Make sure the parts move freely but without excessive play .
3 . If your webcam has a stand, remove it .
4 . Use a few rubber bands to hold the webcam on its arm .
5 . Screw the pan servo onto the upper bracket . Hold the servo and webcam cables between the servo and the upper bracket .
6 . Screw the tilt servo onto the upper bracket .
7 . Fit the lower bracket and screw both servos on it .
8 . Screw the stand on the case .
9 . Screw the pan servo horn on the stand and trim any excess length .
10 . Unfold the paper clip to get a straight rod . Then create a couple of 90 degrees bends 30 mm apart .
11 . Fit one end of the rod in the pinhole on the side of the camera holder arm .
Then slide the tilt servo horn on the other end .
We will need to set up the servos before bolting the horn onto the servo .
12 . Mark the tilt servo wire . It will help to identify each servo once everything is assembled .
13 . Pass the servo wires through the hole at the top of the case .
14 . You can then temporary mount the camera assembly to the case .
It will have to come off after setting up the servos .
The assembly is pretty much done !!! We just have to take care of the wiring before being able to bolt the servo horns in their final position .
Once everything is done you should end up with something like this .
wiring photo assembly here
software (and servos setup) .
We will now see how to use the software and setup the servos .
The software comes in 2 version :
- An executable that you just have to download and run (this is great if you can't code . unfortunately this only works on windows) .
- And a repository including all the python, UI and haar cascade file required to run the program . Feel free to improve and build upon the existing code !
1 . The software comes with an arduino sketch named "Camera_tracking.ino" .
Upload it to the arduino .
Then unplug the arduino from the computer .
2 . Temporary plug the servos to the arduino then plug the power supply to the jack .
The sketch we just uploaded includes a starting routine that involve the position of both servo to be set at 90 degrees .
3 . Carefully unscrew the pan servo horn without changing the servo position and remount the camera facing forward .
4 . Fit the tilt servo horn to get the camera to point straight forward .
5 . Fit the jack and voltage regulator to the case .
6 . Fit the LED's to the case using the LED lock part .
6 . Seal everything by screwing the arduino to the case .
7 . Plug the power supply to your arduino, plug the arduino to you computer and don't forget to also plug the USB webcam .
Then start the face tracking software .
8 . You might get a warning message since I am not a certified Microsoft developer . You can ignore it or if you don't trust me use the python file and check the code for yourself . I won't blame you for Being too careful !!!