基于大疆EP和Opencv完成人脸跟随项目

  • 知识储备
  • 实现步骤
  • 环境安装
  • 具体步骤
  • 总体代码

知识储备

我们需要了解三方面的知识,第一方面是python的语法结构,也是最基础的,第二方面是opencv的基础知识,第三方面就是大疆的SDK啦,只有我们具备了这些知识,就可以简单完成人脸识别项目啦。
Opencv学习网站https://www.bilibili.com/video/BV1oJ411D71z
大疆EP的开发者文档网址https://robomaster-dev.readthedocs.io/zh_CN/latest/
至于python的语法结构,大家可以到MOOC,哔哩哔哩等地方找资源哦,适合自己的才是最好的哦

实现步骤

连接EP——获取EP图像——处理EP图像——获得人脸坐标——控制云台运动
下面我们就开始吧。

环境安装

安装python请参考https://blog.csdn.net/qq_43603247/article/details/105520688
在运行程序的时候我们需要在python安装robomaster库和opencv库
安装robomaster库 在电脑的cmd输入pip install robomaster
在使用SDK时候需要安装VC,不然会出现下面的错误

需要安装VC,下载地址https://github.com/dji-sdk/robomaster-sdk
安装opencv : pip install opencv-python

具体步骤

1.连接EP,在大疆的开发者文档里有
WiFi 直连

import robomaster
from robomaster import robotif __name__ == '__main__':# 如果本地IP 自动获取不正确,手动指定本地IP地址# robomaster.config.LOCAL_IP_STR = "192.168.2.20"ep_robot = robot.Robot()# 指定连接方式为AP 直连模式ep_robot.initialize(conn_type='ap')version = ep_robot.get_version()print("Robot version: {0}".format(version))ep_robot.close()

其他连接方法请参考大疆的SDK开发文档
2.获取EP的视频流-该项目显示200帧的视频流

// An highlighted block
import time
import cv2
import robomaster
from robomaster import robotif __name__ == '__main__':ep_robot = robot.Robot()ep_robot.initialize(conn_type="sta")ep_camera = ep_robot.camera# 显示200帧图传ep_camera.start_video_stream(display=False)for i in range(0, 200):img = ep_camera.read_cv2_image()cv2.imshow("Robot", img)cv2.waitKey(1)cv2.destroyAllWindows()ep_camera.stop_video_stream()ep_robot.close()

3.处理EP图像并获取人脸坐标

def shibei():global RLzhongxi_x,RLzhongxi_y #定义两个全局变量,用来储存人脸的坐标cv2.namedWindow("img", 1)  #新建一个显示窗口cv2.resizeWindow("img", 800, 400)  #图像框的大小ret,img=cap.read()#vc.read()读取图片的第一帧 返回两个值,第一个值是true或者false,判断有没有读取到,第二个值是当前的一帧图像gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#将读取到的值转化为灰度图faces = face_cascade.detectMultiScale(gray,1.1,5)#检测出图片中所有的人脸,并将人脸的各个坐标保持到faces里if len(faces)>0:#判断是否检测到人脸for faceRect in faces:   #依次读取faces的值x,y,w,h = faceRectcv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),3)#绘制人脸框roi_gray = gray[y:y+h//2,x:x+w]roi_color = img[y:y+h//2,x:x+w]RLzhongxi_x = x+w/2 #获取人脸中心坐标RLzhongxi_y = y+h/2eyes = eye_cascade.detectMultiScale(roi_gray,1.1,1,cv2.CASCADE_SCALE_IMAGE,(2,2))#检测眼睛for (ex,ey,ew,eh) in eyes:cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)#绘制眼睛框cv2.imshow("img",img)#显示图像return RLzhongxi_x,RLzhongxi_y#返回人脸中心坐标

4.控制云台运动
云台有两个轴,分别是航向轴和俯仰轴,航向轴是围绕的y轴转动,俯仰轴是围绕x轴转动,我们要做的是控制两个轴转到人脸的中心。

// An highlighted block
def Error():RLzhongxi_x_1=centre[0]#将上面的值传到这里RLzhongxi_y_1=centre[1]TXzhongxi_x=400 #整个图像的中心坐标TXzhongxi_y=200error_x=TXzhongxi_x-RLzhongxi_x_1 #偏航轴的的误差error_y=TXzhongxi_y-RLzhongxi_y_1#俯仰轴的误差if abs(error_x) < 10:#判断误差是否小于10,如果小于默认为到达人脸中心yaw0_speed = 0else:yaw0_speed = KP*error_x#输出偏航轴的速度if abs(error_y) < 10:pitch0_speed = 0else:pitch0_speed = -KP*error_y#输出俯仰轴的速度print("yaw的速度:",yaw0_speed)print("Pitch的速度:",pitch0_speed)ep_gimbal.drive_speed(pitch_speed='{pitch}', yaw_speed='{yaw}'.format(pitch=pitch0_speed,yaw=yaw0_speed))#控制云台

总体代码

#导入需要用到的库
import cv2
import numpy as np
import wave
import re
import socket
import sys
import numpy as np #创建新的对象
ep_robot = robot.Robot()# 指定连接方式为AP 直连模式,初始化
ep_robot.initialize(conn_type='ap')    #开始获取视频流,但是不播放
ep_camera.start_video_stream(display=False)#设置模式为自由模式
ep_robot.set_robot_mode(mode=robot.FREE)#获取官方提供的特征库,根据自己电脑设置路径
face_cascade = cv2.CascadeClassifier("D://python38//Lib//site-packages//cv2//data//haarcascade_frontalface_default.xml")
eye_cascade = cv2.CascadeClassifier("D://python38//Lib//site-packages//cv2//data//haarcascade_eye.xml")
KP = 0.15#比例系数,让云台转的慢一点def shibei():global RLzhongxi_x,RLzhongxi_y #定义两个全局变量,用来储存人脸的坐标cv2.namedWindow("img", 1)  #新建一个显示窗口cv2.resizeWindow("img", 800, 400)  #图像框的大小    img = ep_camera.read_cv2_image()#获取视频流的一帧图像gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#将读取到的值转化为灰度图faces = face_cascade.detectMultiScale(gray,1.1,5)#检测出图片中所有的人脸,并将人脸的各个坐标保持到faces里if len(faces)>0:#判断是否检测到人脸for faceRect in faces:   #依次读取faces的值x,y,w,h = faceRectcv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),3)#绘制人脸框roi_gray = gray[y:y+h//2,x:x+w]roi_color = img[y:y+h//2,x:x+w]RLzhongxi_x = x+w/2 #获取人脸中心坐标RLzhongxi_y = y+h/2eyes = eye_cascade.detectMultiScale(roi_gray,1.1,1,cv2.CASCADE_SCALE_IMAGE,(2,2))#检测眼睛for (ex,ey,ew,eh) in eyes:cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)#绘制眼睛框cv2.imshow("img",img)#显示图像cv2.waitKey(2)#每两帧的间隔时间return RLzhongxi_x,RLzhongxi_y#返回人脸中心坐标def Error():RLzhongxi_x_1=centre[0]#将上面的值传到这里RLzhongxi_y_1=centre[1]TXzhongxi_x=400 #整个图像的中心坐标TXzhongxi_y=200error_x=TXzhongxi_x-RLzhongxi_x_1 #偏航轴的的误差error_y=TXzhongxi_y-RLzhongxi_y_1#俯仰轴的误差if abs(error_x) < 10:#判断误差是否小于10,如果小于默认为到达人脸中心yaw0_speed = 0else:yaw0_speed = KP*error_x#输出偏航轴的速度if abs(error_y) < 10:pitch0_speed = 0else:pitch0_speed = -KP*error_y#输出俯仰轴的速度print("yaw的速度:",yaw0_speed)print("Pitch的速度:",pitch0_speed)ep_gimbal.drive_speed(pitch_speed='{pitch}', yaw_speed='{yaw}'.format(pitch=pitch0_speed,yaw=yaw0_speed))#控制云台while True:shibei()centre = shibei()Error()

因为EP借出去了,没有测试过新版的SDK,以前就旧的SDK是可以用的,如果有问题,希望大家指正,谢谢,微信:13580449720

基于大疆EP和Opencv完成人脸跟随项目相关推荐

  1. 基于大疆无人机SDK二次开发

    基于大疆无人机SDK二次开发 近期公司项目需求,需要基于大疆无人机SDK开发一款手机 APP,用于配合后台实现对无人机的管理.当然大疆本身也给我们提供了管理平台-----大疆司空.通过大疆的官方 AP ...

  2. python大疆EP

    目录 下单 专用库 安装库 引库 大疆EP主要函数 1.robomaster.chassis(EP 底盘模块) (1)drive_speed(x=0.0, y=0.0, z=0.0, timeout= ...

  3. 在树莓派3B+上安装大疆EP的SDK全纪录

    目录 First Blood: 一.设备清单: 二.系统: 三.烧录工具: 四.正式开始:树莓派系统的安装 Double Kill: 一.设备清单: 二.系统: 三.烧录工具: 四.格式化工具: 步骤 ...

  4. 基于大疆无人机全景拍照的实现思路

    本文将介绍利用大疆无人机基于 DJI SDK 拍摄全景图所需要的图片,不包括图片后期的合成拼接算法. 全景图基本实现过程 全景视图是指在一个固定的观察点,能够提供水平方向上方位角360度,垂直方向上1 ...

  5. 基于大疆智图和云端地球,发布OSGB格式三维航拍模型

    一 三维模型生成 1.利用大疆精灵4进行航拍 2.利用大疆智图进行三维建模,在1处选择拷贝的航拍文件夹,2处勾选三维模型. 在高级设置里面选择模型格式,这里我们选择最普遍的格式之一,OSGB格式. 结 ...

  6. 基于大疆RM3508电机的串级PID(角度环+速度环)

    1.前言 最近参加ROBOCON,我负责编写传球机器人,由于传球机构需要一个电机转固定角度来带动球,所以便用大疆3508电机通过串级PID来实现,不得不说3508电机还是真的强,先看一下效果吧. 视频 ...

  7. opencv之人脸检测项目实战(二)

    自我介绍 目录 一.人脸检测整体架构 1.1 什么是人脸检测? 1.2 人脸检测的应用场景 1.3 人脸检测核心架构 二.人脸检测实现技术储备 2.1 NDK开发的原理 2.2 什么是JNI 2.3 ...

  8. 大疆TT无人机编程初体验,教你对拥抱开源的无人机为所欲为!

    先放个项目演示视频镇帖: 可能是大疆TT无人机的第一款DIY遥控器!大疆TT无人机编程试飞初体验! 认识我的朋友,大概都知道,我是一个"运气爆棚"的人,经常能"捡&quo ...

  9. 试玩系列 | 真香!大疆TT无人机编程初体验,教你对它为所欲为!

    先放个项目演示视频镇帖(点击小程序查看演示视频): 认识我的朋友,大概都知道,我是一个"运气爆棚"的人,经常能"捡"到一些好玩的东西.这不,前两天在家门口&qu ...

最新文章

  1. 关于.NET玩爬虫这些事 【初码干货】
  2. Zookeeper常用命令使用
  3. 客户端向服务端传送特殊字符解决方法(检测到有潜在危险的 Request.Form 值)
  4. 成功解决eric6 Create Dialog Code XXX.py exists but does not contain any classes
  5. C3P0 释放连接 的问题
  6. [3/21]Windows Server 2008时钟方面的改进展示
  7. java long short_Java Long类shortValue()方法与示例
  8. 8 -- 深入使用Spring -- 4...3 AOP的基本概念
  9. 2018数据可视分析挑战赛-二等奖作品及历年优秀作品
  10. Shell 批量复制文件名相近的文件到指定文件名中
  11. 小米路由器恢复出厂设置方法详解
  12. Unity编辑器(Editor)的问题全解以及使用
  13. 微信公众号编辑器的附件功能(如Word、Excel、Pdf等)
  14. 华三防火墙旁路部署三种方式之子接口旁路
  15. 扁平和树形结构的几种互转
  16. IntelliJ IDEA--配置导入导出
  17. 探究Bitmap在Android中的内存占用
  18. u盘容量变小了怎么恢复
  19. 2021 市场上cmr硬盘盘点
  20. ARM FPU 加速浮点计算 介绍

热门文章

  1. 引用账户锁定无法登录_引用的帐户当前已锁定无法登录相关问题解答
  2. 时间管理四象限法怎么运用?这款待办工具来帮你
  3. Unity UGUI烟雾效果
  4. 2021最新—Swift面试题
  5. 华为鸿蒙os支持华为手机,华为鸿蒙OS 2.0支持哪些机型?
  6. 精美表格html代码
  7. 如何对多个版本的Word文档对比,查找变动删减的内容
  8. 【C语言】题集 of ④
  9. 带计算机功能的私有云,不怕网盘关闭!老司机教你用PC搭建私人云网盘
  10. linux 查看连接wifi密码,linux 查看wifi密码