位置: 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‘ )(怎样退出快手粉丝团 已解决)

  • 微信加入黑名单聊天记录会不会删除(微信加入黑名单怎么找回)

    微信加入黑名单聊天记录会不会删除(微信加入黑名单怎么找回)

  • cpu温度过高怎么解决(CPU温度过高怎么降温)

    cpu温度过高怎么解决(CPU温度过高怎么降温)

  • 手机最近突然变得很卡(手机最近突然变卡)

    手机最近突然变得很卡(手机最近突然变卡)

  • 微信视频小窗口怎么设置(微信视频小窗口怎么调出来)

    微信视频小窗口怎么设置(微信视频小窗口怎么调出来)

  • 一淘拼单是什么(一淘可以返利拼多多吗)

    一淘拼单是什么(一淘可以返利拼多多吗)

  • 华为怎么换图标的图案(华为怎么换图标和名字图片)

    华为怎么换图标的图案(华为怎么换图标和名字图片)

  • 苹果商店无法处理您的购买(苹果商店显示无法购买是为啥)

    苹果商店无法处理您的购买(苹果商店显示无法购买是为啥)

  • 荣耀x9和x9pro区别(荣耀x9和x9pro外形一样吗)

    荣耀x9和x9pro区别(荣耀x9和x9pro外形一样吗)

  • 淘宝记录删除能找回来吗(淘宝记录删了还可以查到吗?)

    淘宝记录删除能找回来吗(淘宝记录删了还可以查到吗?)

  • 微信小号是什么意思(微信小号是什么标志)

    微信小号是什么意思(微信小号是什么标志)

  • 连电了怎么查哪里短路(家里联电怎么查)

    连电了怎么查哪里短路(家里联电怎么查)

  • 千兆宽带用什么路由器(千兆宽带用什么路由器能跑满)

    千兆宽带用什么路由器(千兆宽带用什么路由器能跑满)

  • 视频脚本是什么(短视频脚本生成器)

    视频脚本是什么(短视频脚本生成器)

  • 美团的评价为什么不显示不出来(美团的评价为什么会被折叠呢)

    美团的评价为什么不显示不出来(美团的评价为什么会被折叠呢)

  • 联想电脑硬盘保护怎么解除(联想电脑硬盘保护系统怎么解除)

    联想电脑硬盘保护怎么解除(联想电脑硬盘保护系统怎么解除)

  • 黑鲸月卡有什么用(黑鲸会员月卡一个月了多少钱)

    黑鲸月卡有什么用(黑鲸会员月卡一个月了多少钱)

  • word ppt excel统称什么

    word ppt excel统称什么

  • powerpoint是哪个公司的产品(powerpoint叫什么)

    powerpoint是哪个公司的产品(powerpoint叫什么)

  • 怎么传输大容量视频(如何传输50多g的东西)

    怎么传输大容量视频(如何传输50多g的东西)

  • vivo支持无线充电吗(vivo支持无线充电的5g手机有哪些)

    vivo支持无线充电吗(vivo支持无线充电的5g手机有哪些)

  • 快手怎么看直播 找别人(快手怎么看直播回放完整版)

    快手怎么看直播 找别人(快手怎么看直播回放完整版)

  • 微信群太多怎么退(微信群太多怎么找出来)

    微信群太多怎么退(微信群太多怎么找出来)

  • iphone下载的视频在哪里找(iPhone下载的视频看不了)

    iphone下载的视频在哪里找(iPhone下载的视频看不了)

  • 抖音镜像两个人怎么拍(抖音镜像功能在哪里)

    抖音镜像两个人怎么拍(抖音镜像功能在哪里)

  • 苹果siri语音不识别(苹果siri语音不回答)

    苹果siri语音不识别(苹果siri语音不回答)

  • 育儿app开发类型有哪些(育儿类app是否适合提供知识付费功能)

    育儿app开发类型有哪些(育儿类app是否适合提供知识付费功能)

  • 汇算清缴加计扣除表
  • 小企业如何做帐
  • 办公室的饮用水应该放在哪个科目下?
  • 公司货款退款怎么写
  • 应收往来会计是做什么工作的
  • 餐饮注册个体工商户还是注册公司
  • 酒销售账务处理
  • 个人向个人借款100万交税吗
  • 合同签订之后国家降税怎么办?
  • 企业接收捐赠的会计分录
  • 支票的填写前应检查有哪些内容
  • 小规模纳税人如何开电子发票
  • 装修预付款怎么做分录
  • 无形资产和固定资产的折旧
  • 员工异地缴纳社保协议
  • 事业单位现金收支管理办法
  • 周转材料低值易耗品摊销
  • 总公司调到子公司
  • 红字发票需要做什么科目
  • 未取得正式发票怎么整改
  • 为什么中国没有工业革命
  • 小规模增值税怎么做账
  • 实收资本未注明投资款
  • 金税盘年费怎么做账
  • 含税销售额的计算公式是什么意思
  • 加盟商的作用
  • 企业取得代扣代缴个税手续费分录
  • 成本费用总额包括信用减值损失吗
  • 本年利润年末账务处理
  • 房地产土地增值税计税依据
  • 库管和车间工人哪个好
  • 谷歌浏览器adobe flash player已不再支持
  • 无线路由器指示灯怎么才是正常
  • 购买产品优惠计入什么科目
  • 开发商未出售的房子有产权证吗
  • 事业单位投资收回账务处理
  • php23种设计模式
  • rtfd文件
  • assoc.exe=exefile什么意思
  • php 配置
  • 公司股东年底分红怎么做账
  • Pytorch深度学习实战3-6:详解网络骨架模块nn.Module(附实例)
  • 前端开发工程师是干嘛的
  • php实现定时自动刷新
  • php获取ua
  • python中函数的用法
  • pyqt 菜单
  • python Timer定时器如何使用?
  • 递延收益为什么是递延所得税资产
  • 工程发票多少点
  • 收外汇是一定要交税吗
  • sql2008数据库维护计划
  • 公司房租只有房东交吗
  • 支付劳务费的账务处理
  • 成立业主委员会申请书
  • 一般纳税人附加税减半征收政策2023
  • 企业清算是怎么做账的
  • 企业向个人的借款合同
  • 建筑业清包工合同范本
  • 免税货物如何开具发票
  • 企业共同控制持股比例怎么算
  • 所有者权益是什么意思
  • 应付职工薪酬的会计科目
  • mysql导出语句
  • mysql 5.7.18 winx64安装配置方法图文教程
  • ubuntu server initramfs
  • xp系统做完了进不去
  • window1020h2
  • win10远程桌面连接教程
  • win10家庭版系统怎么样
  • win8软件安装
  • linux系统怎么弄
  • js 正则验证
  • Node.js中child_process实现多进程
  • eclipse怎么查看项目的位置
  • 浅谈python 四种数值类型(int,long,float,complex)
  • 小规模纳税人开专票
  • 北京大兴区地税局电话
  • 自用的房产怎么交房产土地税
  • 增值税发票怎么购票
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设