The origin is JavaScript Drones; howerver, I intergrated the pre-trained Haar cascade classifier (haarcascade_frontalface_default.xml) to condtuct the face detection in the frame.
Overall, the script is designed to make the drone take specific actions (take off, move, rotate, land) when a face is detected in its camera feed, and simultaneously record this footage.
I've created a Python script that makes use of the djitellopy
library to control a Tello drone and the cv2
library from OpenCV for video processing and face detection. Here's a summary of the code's functionalities:
-
Initialization:
- Required libraries like
cv2
(OpenCV),numpy
,djitellopy
,time
, andthreading
are imported. - Constants like
ESC
are defined. - A connection to the Tello drone is established, its battery status is printed, and its video streaming is started.
- Required libraries like
-
Video Recording:
- The function
videoRecorder
records the drone's video feed. It initializes a video writer object (video.avi
using XVID codec at 30 fps) and records frames from the drone as long askeepRecording
remains True.
- The function
-
Main Functionality:
- The
main
function continuously captures and processes video frames from the drone:- The frame is resized and flipped.
- The frame is converted to grayscale.
- A pre-trained Haar cascade classifier (
haarcascade_frontalface_default.xml
) is used for face detection in the frame. - If a face is detected in the frame:
- The face's bounding box is drawn on the frame.
- A new thread is started for video recording using the
videoRecorder
function. - The drone takes off, moves down a bit, rotates 360 degrees counter-clockwise, and then lands.
- After landing, video recording is stopped.
- The processed frame is displayed in a window named 'video'.
- If the ESC key is pressed, all windows are destroyed and the program exits.
- The
Watch the videos:
Part 1 → https://www.youtube.com/watch?v=JzFvGf7Ywkk
Part 2 → https://www.youtube.com/watch?v=ozMwRq-IT2w
IBM is giving away 2,000 DJI Tello drones as part of a contest and I made this video to help them promote it.
- Enter the contest at https://developer.ibm.com/contest (US/ Canada Only)
- More details about the challenge at https://developer.ibm.com/blogs/2018/11/12/win-a-drone-program-a-drone-change-the-world/
- React (with React Hooks!)
- Styled Components for styling
- Node.js and UDP4 sockets for communicating with drone
- Socket.io WebSockets for sending data to/from the browser
- Next.js for easy react setup
- DJI Tello Drone
- Extra Batteries - it comes with one and I bought two extra. For continual development I'd say you only need two — one in the charger and one in the drone. For flying away from your house you definitely need at least 3 as they only last about 10-15 mins.
- Fast Battery Charger with 4 slots
- cd
frontend
npm install
npm run dev
- cd
backend
npm install
- connect to drone via wifi
npm start
Docs for Tello are available here
I had to update the firmware of my drone when it came in the mail before I could use this 1.3 API. Do this via the Tello app on your phone.
If you let the drone's WIFI connection lapse, you have to restart the server by typing rs
into the terminal. This will re-run the command command
that puts the drone in SDK mode. If you don't do this, it will ignore any commands you send it.
I want you to build cool stuff with this.
Please hack on it and make your own cool things.
- jsolderitsch/tello-nodejs - very simple JavaScript examples
- FFMpeg + Node.js Video in the browser complicated example
- Some Japanese Developer Figured out how to get video working with WebRTC
- Drone Keyboard for Tello
- Link your repo here for others to learn!