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

  • 网络营销怎么做?教你4步做好免费推广(网络营销怎么做推广)

    网络营销怎么做?教你4步做好免费推广(网络营销怎么做推广)

  • iwatch充电线type-c怎么充电(Iwatch充电线上有mw字样)

    iwatch充电线type-c怎么充电(Iwatch充电线上有mw字样)

  • iqoou1电池容量有多大(iqoo手机电池容量)

    iqoou1电池容量有多大(iqoo手机电池容量)

  • 拼多多自己的账号哪里看(拼多多自己的账号怎么查)

    拼多多自己的账号哪里看(拼多多自己的账号怎么查)

  • oppo怎么召唤小欧语音助手(OPPO怎么召唤小欧)

    oppo怎么召唤小欧语音助手(OPPO怎么召唤小欧)

  • oppo怎么截视频的一部分画面出来(oppo怎么截视频方法)

    oppo怎么截视频的一部分画面出来(oppo怎么截视频方法)

  • 怎样在电脑上打出@符号(怎样在电脑上打印微信图片)

    怎样在电脑上打出@符号(怎样在电脑上打印微信图片)

  • 华为畅享7怎么恢复出厂设置(华为畅享7怎么样)

    华为畅享7怎么恢复出厂设置(华为畅享7怎么样)

  • ipadpro能当笔记本用吗(ipadpro2021能当笔记本用吗)

    ipadpro能当笔记本用吗(ipadpro2021能当笔记本用吗)

  • 苹果手机语音发不出去是什么原因(苹果手机语音发不出去系统错误)

    苹果手机语音发不出去是什么原因(苹果手机语音发不出去系统错误)

  • 华为荣耀的语音助手叫什么(华为荣耀的语音输入在手机哪个部位)

    华为荣耀的语音助手叫什么(华为荣耀的语音输入在手机哪个部位)

  • oppoa5手机屏幕失灵怎么办(oppoa5手机屏幕失灵怎么办关机都关不了)

    oppoa5手机屏幕失灵怎么办(oppoa5手机屏幕失灵怎么办关机都关不了)

  • 小米8青春版快充功率(小米8青春版快充怎么设置)

    小米8青春版快充功率(小米8青春版快充怎么设置)

  • 苹果授权经销商可信吗(苹果授权经销商可以修手机吗)

    苹果授权经销商可信吗(苹果授权经销商可以修手机吗)

  • iphone4s花屏怎么办(苹果4花屏了怎么办)

    iphone4s花屏怎么办(苹果4花屏了怎么办)

  • 微信支付交易明细怎么查(微信支付交易明细证明怎么查看)

    微信支付交易明细怎么查(微信支付交易明细证明怎么查看)

  • vivox27微信怎么美颜(vivox27微信怎么投屏到电视)

    vivox27微信怎么美颜(vivox27微信怎么投屏到电视)

  • ios辅助功能设置连点器(iphone辅助的按钮在哪里设置)

    ios辅助功能设置连点器(iphone辅助的按钮在哪里设置)

  • 天猫88折卡如何获取(天猫88折vip卡什么样的商品使用)

    天猫88折卡如何获取(天猫88折vip卡什么样的商品使用)

  • 3dmax设置中文(3Dmax设置中文)

    3dmax设置中文(3Dmax设置中文)

  • qq的视频怎么保存到手机(qq的视频怎么保存到u盘)

    qq的视频怎么保存到手机(qq的视频怎么保存到u盘)

  • 魅族个人助理在哪(魅族个人助理卸载了怎么装回去)

    魅族个人助理在哪(魅族个人助理卸载了怎么装回去)

  • 设置系统自动更改桌面壁纸的质量(设置系统自动更新一般通过什么窗口)

    设置系统自动更改桌面壁纸的质量(设置系统自动更新一般通过什么窗口)

  • discuz后台登陆地址是什么(discuz论坛无法登录)

    discuz后台登陆地址是什么(discuz论坛无法登录)

  • 织梦dedecms教程:Nginx验证码不显示解决方法(织梦cms要钱吗)

    织梦dedecms教程:Nginx验证码不显示解决方法(织梦cms要钱吗)

  • 税金及附加借贷科目
  • 给客户开增值税专用发票
  • 小规模纳税人普票交税吗
  • 附加税扣款比例
  • 淘宝买货没有发票
  • 如何区分总额法和净额法
  • 土地增值税属于所得税类
  • 展会门票费计入什么科目
  • 从国内往国外寄东西要多久
  • 劳务费税收分类是什么
  • 代扣代缴个人所得税税率表
  • 无人机开票税收编码是多少
  • 开票资料中没有电话可以吗
  • 对方给我们开发票
  • 企业收到固定资产投资时应按什么入账
  • 增值税税率调整时间16变13
  • 押金拿不到怎么解决
  • 制造业购买纸箱子记入什么科目
  • 工程施工科目月末如何结转
  • 变动成本法和完全成本法利润差异
  • system进程有什么用
  • pcas service进程可以关闭么
  • newdot.exe - newdot是什么进程 有什么用
  • NJeeves.exe - NJeeves进程文件是什么意思 有什么用
  • 营改增后,个人转让房屋的个人所得税
  • PHP:is_dir()的用法_Filesystem函数
  • 商企预提待付费什么意思
  • 付了款对方不开发票
  • 银行贷款成本高
  • 计算机视觉的未来发展方向有哪些
  • $ajax请求
  • 支付宝服务窗支付是啥
  • 税控盘减免税款会计分录
  • 预交增值税款在申报表哪里填列的
  • 已经认证了的专利怎么办
  • 什么叫资本退出
  • 出纳报销时应注意什么
  • 公司购买办公家具可以抵扣吗
  • 营业税减免会计分录
  • 职工教育经费包括住宿费吗
  • 融资租赁各方
  • 个体户开票超过多少认定为小规模
  • 小微企业增值税优惠政策最新2023
  • 成本核算的科目有哪些
  • sqlgun
  • mysql配置文件my.ini如何创建
  • 共管账户取钱需要多久到账
  • 预收账款如何做账务处理
  • 土地增值税预缴计算方法70号公告
  • 筹建期间发生的长期借款利息费用计入财务费用
  • 抵扣旅客运输服务申报时填哪行
  • 法人存入公户的钱摘要
  • 以考核为由扣除工资
  • 土地作为无形资产还是固定资产
  • 亏损弥补的会计处理方法
  • 冲减以前年度未开票收入开票如何申报小规模纳税人
  • 总分类账封面封地和启用页的区别
  • 预计负债计入哪里
  • 计提工资和发放工资的账务处理
  • 如何申请高新技术企业认定
  • mysql忘记了初始密码
  • fedora怎么样
  • windows10的改进
  • vista win
  • windows不认u盘
  • centos yum 命令
  • win7开启远程设置
  • 微软为什么这么贵
  • xcopy 批处理
  • css在ie失效
  • Python通过DOM和SAX方式解析XML的应用实例分享
  • unity 3d场景2d角色
  • python的idle打不开解决办法
  • canvas实例
  • 异步加载场景
  • js原型使用场景
  • adb远程调试工具
  • 地税怎么查个人所得税
  • 太原市税务局电话
  • 北京税务稽查局网站
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设