位置: IT常识 - 正文

树莓派+MediaPipe+PCA9685+自制摄像机云台实现人脸跟踪移动(树莓派能干什么)

编辑:rootadmin
树莓派+MediaPipe+PCA9685+自制摄像机云台实现人脸跟踪移动 目录前言一、准备材料二、代码部分前言1.引入库2.客户端(即PC端)3.服务端(即树莓派端)演示前言

推荐整理分享树莓派+MediaPipe+PCA9685+自制摄像机云台实现人脸跟踪移动(树莓派能干什么),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:树莓派的功能用途,树莓派是什么,树莓派开发板,树莓派是什么,树莓派开发板,树莓派4b,树莓派和单片机的区别,树莓派是什么,内容如对您有帮助,希望把文章链接给更多的朋友!

博主闲得无聊,利用某宝几十块钱的机械臂自制了一个摄像头云台,使用了两个MG90S舵机和一块PCA9685驱动的16路舵机扩展板,再通过谷歌的MediaPipe库实现摄像机跟随人脸移动的功能,代码十分简单,快来给你的树莓派添加一个新玩法吧~

一、准备材料

①树莓派(这个肯定需要有的)

②摄像头 ③PCA9685驱动的16路舵机扩展板(关于这部分的教程可以百度或谷歌一下,建议先调试成功后再开始这个项目,不然容易把舵机烧坏)

④舵机

⑤制作云台的工具(我是用某宝买的四自由度亚克力机械臂拆出来做的)

二、代码部分前言

代码经过测试,Mediapipe项目部署在树莓派上的视频帧率只有十几帧左右,如果真的想流畅运行,就需要借助MJPG-streamer工具传输树莓派上的摄像头视频到PC端,然后在PC端进行脸部识别,这样可以实现几乎0延迟传输并控制云台移动,且PC端运算能力强,可以做更多处理。

具体实现步骤可以进这篇某乎上看看👇 树莓派利用MJPG-streamer传输摄像头视频

1.引入库树莓派+MediaPipe+PCA9685+自制摄像机云台实现人脸跟踪移动(树莓派能干什么)

Mediapipe

sudo pip3 install mediapipe-rpi3

如果是4版本则使用用命令:

sudo pip3 install mediapipe-rpi4

导入控制舵机的PCA驱动(这部分工作可以网上搜一下“树莓派PCA控制舵机”)

sudo pip install adafruit-pca9685

2.客户端(即PC端)

client.py 用于定义客户端

import socketclass connect_Raspberry(): def __init__(self,host,port): print("客户端开启") # 套接字接口 self.mySocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 设置ip和端口 try: self.mySocket.connect((host, port)) #连接到服务器 print("连接到服务器") except: #连接不成功,运行最初的ip print('连接RASP不成功') def send(self, words): # 发送消息 msg = words # 编码发送 self.mySocket.send(msg.encode("utf-8")) # print("成功发送消息") def close(self): self.mySocket.close() print("与树莓派丽连接中断\n") exit()

main.py 用于接收树莓派视频以及人脸识别,并发送识别位置到树莓派

import cv2import mediapipe as mpimport numpy as npimport client#检测脸部mp_face_detection = mp.solutions.face_detectionmp_drawing = mp.solutions.drawing_utils#通信传输myRaspConnection = client.connect_Raspberry('你的树莓派ip', 8888)if __name__ == "__main__": capture = cv2.VideoCapture("http://你的树莓派ip:8080/?action=stream") ref, frame = capture.read() fps = 0.0 while(True): ref, frame = capture.read() h,w,_ = np.shape(frame) if not ref: break image = cv2.cvtColor(frame,cv2.COLOR_BGR2RGB) #脸部检测 with mp_face_detection.FaceDetection(model_selection=0, min_detection_confidence=0.8) as face_detection: results = face_detection.process(image) if results.detections: for detection in results.detections: box=detection.location_data.relative_bounding_box #cx,cy,cw,ch=box cx=box.xmin cy=box.ymin cw=box.width ch=box.height cv2.rectangle(image, (int(cx*w) , int(cy*h)), (int((cx+cw)*w) , int((cy+ch)*h)),(0, 255, 0), 2) #控制云台 msg = str(int(cx*w)) + " " + str(int(cy*h)) + " " + str(int((cx+cw)*w)) + " " + str(int((cy+ch)*h)) myRaspConnection.send(msg) frame = cv2.cvtColor(image,cv2.COLOR_RGB2BGR) # cv2.rectangle(frame, (int(cx*w) , int(cy*h)), (int((cx+cw)*w) , int((cy+ch)*h)),(0, 255, 0), 2) cv2.imshow("video",frame) c= cv2.waitKey(1) & 0xff if c==27: capture.release() break print("Video Detection Done!") capture.release() cv2.destroyAllWindows()3.服务端(即树莓派端)

sever.py 用于定义服务端

import socketprint("服务开启")mySocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)host = "你的树莓派ip"port = 8888 #自己定义的端口号mySocket.bind((host, port))mySocket.listen(10)

main.py 用于接收pc端的人脸位置信息,并控制云台移动

import timeimport severimport Adafruit_PCA9685def set_servo_angle(channel, angle):#输入角度转换成12^精度的数值 date=int(4096*((angle*11)+500)/20000)#进行四舍五入运算 date=int(4096*((angle*11)+500)/(20000)+0.5) pwm.set_pwm(channel, 0, date)pwm = Adafruit_PCA9685.PCA9685()pwm.set_pwm_freq(50)if __name__ == '__main__': print("等待连接") client,address = sever.mySocket.accept() print("新连接") print("IP is %s" % address[0]) print("port is %d\n" % address[1]) beangle = 100 #每个人的初始角度不同,建议先自己测试好角度 beangle0 = 60#舵机插的通道口 channel1 = 4 #上下 channel2 = 8 #左右#变化幅度(这个越大,舵机动的幅度就越大) angleFreq = 1#超出屏幕范围(这个调大后,脸部离视频边界检测更灵敏) changeFreq = 20 #初始化角度 set_servo_angle(channel1,beangle) set_servo_angle(channel2,beangle0) while True: msg = client.recv(1024) msg = msg.decode("utf-8") if msg != "": mess = msg.split(' ') x0 = int(mess[0])#左上角x y0 = int(mess[1])#左上角y x1 = int(mess[2])#右下角x y1 = int(mess[3])#右下角y#超出屏幕外 if x0 < changeFreq: beangle += angleFreq if beangle >= 180: beangle = 180 set_servo_angle(channel1,beangle) if y0 < changeFreq: beangle0 += angleFreq if beangle0 >= 180: beangle0 = 180 set_servo_angle(channel2,beangle0) if x1 > 640 - changeFreq: #窗口宽为640 beangle -= angleFreq if beangle <= 30: beangle = 30 set_servo_angle(channel1,beangle) if y1 > 480 - changeFreq: #窗口高为480 beangle0 -= angleFreq if beangle0 <= 30: beangle0 = 30 set_servo_angle(channel2,beangle0)演示

B站演示

本文链接地址:https://www.jiuchutong.com/zhishi/296022.html 转载请保留说明!

上一篇:JavaWeb 购物车项目(一)(java web 购物车)

下一篇:已解决:TypeError: Cannot read properties of undefined (reading ‘name‘ )(怎样退出快手粉丝团 已解决)

  • win10绯荤粺鎹ista(vista换xp)

    win10绯荤粺鎹ista(vista换xp)

  • iphone13摄像头像素(iphone13摄像头像素为什么不提高)

    iphone13摄像头像素(iphone13摄像头像素为什么不提高)

  • 华为nova5手机怎么长截屏(华为nova5手机怎么开空调遥控器)

    华为nova5手机怎么长截屏(华为nova5手机怎么开空调遥控器)

  • 华为手机怎么拦截骚扰电话(华为手机怎么拦截境外00开头电话)

    华为手机怎么拦截骚扰电话(华为手机怎么拦截境外00开头电话)

  • 什么是串行异步通信(串行异步通信的概念)

    什么是串行异步通信(串行异步通信的概念)

  • 为啥QQ不显示5G在线(为啥QQ不显示厘米秀了)

    为啥QQ不显示5G在线(为啥QQ不显示厘米秀了)

  • 荣耀9x充电器头型号(华为荣耀9x充电器头)

    荣耀9x充电器头型号(华为荣耀9x充电器头)

  • qq超级会员可以退费吗(qq超级会员可以恢复多久的好友)

    qq超级会员可以退费吗(qq超级会员可以恢复多久的好友)

  • qq等级4个皇冠之后是什么(qq等级四个黄冠)

    qq等级4个皇冠之后是什么(qq等级四个黄冠)

  • 什么是POS机(什么是pos机,它是干什么用的)

    什么是POS机(什么是pos机,它是干什么用的)

  • 知道抖音名字为什么搜不到(抖音知道抖音名字怎么找她呢)

    知道抖音名字为什么搜不到(抖音知道抖音名字怎么找她呢)

  • i53470最高配什么显卡(i53470性能如何)

    i53470最高配什么显卡(i53470性能如何)

  • 手机如何设置流量短信提醒(手机如何设置流量定时关闭)

    手机如何设置流量短信提醒(手机如何设置流量定时关闭)

  • 苹果耳机有线和无线区别(苹果耳机有线和无线哪个音质好)

    苹果耳机有线和无线区别(苹果耳机有线和无线哪个音质好)

  • wps表格转化为文本(wps表格怎么转化成文本格式)

    wps表格转化为文本(wps表格怎么转化成文本格式)

  • 快手视频超过10分钟怎么发(快手视频超过15分钟怎么发)

    快手视频超过10分钟怎么发(快手视频超过15分钟怎么发)

  • 苹果手机录音功能在哪里(苹果手机录音功能怎么调出来的)

    苹果手机录音功能在哪里(苹果手机录音功能怎么调出来的)

  • word轮廓文本2怎么弄(轮廓文本2在哪里)

    word轮廓文本2怎么弄(轮廓文本2在哪里)

  • 微信小号和大号的区别(微信小号和大号会共享信息吗)

    微信小号和大号的区别(微信小号和大号会共享信息吗)

  • oppo手机检测功能在哪(oppo手机检测怎么检测)

    oppo手机检测功能在哪(oppo手机检测怎么检测)

  • x9支持nfc功能吗(9x带nfc吗)

    x9支持nfc功能吗(9x带nfc吗)

  • airpods充电的时候耳机要拿出来吗(AirPods充电的时候会亮灯吗)

    airpods充电的时候耳机要拿出来吗(AirPods充电的时候会亮灯吗)

  • 怎么用iphone制作视频(怎么用iphone制作长图)

    怎么用iphone制作视频(怎么用iphone制作长图)

  • 【Vue+element-ui搭建前端页面】适用于初学者学习(vue+element-ui项目)

    【Vue+element-ui搭建前端页面】适用于初学者学习(vue+element-ui项目)

  • 历代程序员都无法逃脱的诅咒 -- 低代码(100多年前程序员)

    历代程序员都无法逃脱的诅咒 -- 低代码(100多年前程序员)

  • 符合条件的小型微利企业所得税税率为
  • 企业办理纳税手续需要带什么材料
  • 母公司出售子公司给另一家子公司
  • 负利润的话小型微利企业减免企业所得税吗
  • 快递费专票可以报销吗
  • 企业筹建期间利息支出税前扣除怎么算
  • 小规模交了增值税还要交什么
  • 将自产产品赠送他人
  • 外购白酒用于个人销售吗
  • 营改增转让土地税收政策
  • 欠税已经缴纳会影响征信吗
  • 税务小规模定律是什么意思
  • 发票报销增值税
  • 什么情况下从价计征房产税
  • 个税申报系统换一台电脑要怎么办
  • 出口退税系统怎么导入数据
  • 享受小型微利企业标准
  • 外购无形资产如何摊销
  • 应收账款收不回来了怎么销账
  • 劳务报酬个税计算公式表
  • linux i
  • 微信支付被限制是怎么回事
  • 公司收入没有进项税额
  • 电脑开机显示屏显示无信号黑屏怎么办
  • 基础知识讲解
  • 应缴纳的房产税计入什么科目
  • 航天信息开票软件客服
  • 结转,结余
  • 事业单位收到的罚款收入应纳入
  • 企业会计准则对收入的定义
  • 租店铺需要什么流程需要注意什么事项?
  • 帝国cms栏目分类
  • 帝国cms获取当日发布的url链接
  • 建筑总承包分包单位可以是市政总承包吗
  • 年终奖怎么计算个税
  • 财务状况简单说明
  • 报销宽带费属于什么费用
  • MSSQL output使用
  • 对方多开发票怎么处理?
  • 无成本票如何避税
  • 网上报税流程演示2019
  • 银行业务冲正
  • 一般纳税人抵扣进项税流程
  • 弥补亏损的会计处理
  • 通过实例认识MySQL中前缀索引的用法
  • Linux环境下mysql5.7.13安装教程
  • sql server使用教程(图文)
  • win8怎么查看系统版本
  • xp系统多了explorer进程
  • ssh debian
  • 虚拟网络无网络访问权限
  • windows8.1安装windows7
  • 怎么查显卡信息
  • win10mobile官网
  • qcwlicon.exe - qcwlicon是什么进程 有何作用
  • 从此学会隐藏悲伤全文
  • xboxone系统更新错误
  • oodag.exe - oodag是什么进程 有什么作用
  • 苹果win10更新48%不动了
  • 安卓手机好用的笔记类app
  • Node.js中的什么模块是用于处理文件和目录的
  • 利用jQuery及AJAX技术定时更新GridView的某一列数据
  • Eclipse运行快捷键
  • unity工程文件怎么弄
  • jquery的使用步骤
  • shell脚本检测文件是否存在
  • jquery中有哪些dom操作?
  • javascript面向对象精要pdf下载
  • jQuery插件ajaxfileupload.js实现上传文件
  • 表单中的单选框
  • Python线程进程协程
  • 安卓通用代码
  • 重庆税务局官网发票查询
  • 矿产资源税的计税依据
  • 残疾人个人所得税怎么申报退税
  • 湖北省税务申报流程 个体户
  • 电子发票开具之前有销售方字样,为什么开具出来就不显示了?
  • 国税车购税征收标准
  • 实名办税的法律依据
  • 国际贸易争端的形式
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设