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

  • 微信怎么定位一个人的位置(微信怎么定位一句话回复)

    微信怎么定位一个人的位置(微信怎么定位一句话回复)

  • 华为手机微信美颜怎么设置(华为手机微信美颜怎么关)

    华为手机微信美颜怎么设置(华为手机微信美颜怎么关)

  • 手机充电口进了一点水(手机充电口进了水水干了能充上电吗)

    手机充电口进了一点水(手机充电口进了水水干了能充上电吗)

  • wmv是视频格式吗(wmv格式是视频格式吗)

    wmv是视频格式吗(wmv格式是视频格式吗)

  • 电脑关机usb不断电怎么办(电脑关机USB不断电)

    电脑关机usb不断电怎么办(电脑关机USB不断电)

  • 苹果xr哪个版本是单卡(苹果xr哪个版本适合养老)

    苹果xr哪个版本是单卡(苹果xr哪个版本适合养老)

  • 苹果手机调静音闹钟会叫的吗(苹果手机调静音闹钟会响吗)

    苹果手机调静音闹钟会叫的吗(苹果手机调静音闹钟会响吗)

  • 手机有流量有话费为什么上不了网(手机有流量有话费但是无法连接网络)

    手机有流量有话费为什么上不了网(手机有流量有话费但是无法连接网络)

  • ios有没有自动点击器(ios自动点击屏幕的软件)

    ios有没有自动点击器(ios自动点击屏幕的软件)

  • 毒上可以退货吗(毒上面能不能退货)

    毒上可以退货吗(毒上面能不能退货)

  • 小米耳机怎么充电(小米耳机怎么充值)

    小米耳机怎么充电(小米耳机怎么充值)

  • 华为tl00h是什么型号(华为 tl00)

    华为tl00h是什么型号(华为 tl00)

  • 手机怎么修改照片大小(手机怎么修改照片kb)

    手机怎么修改照片大小(手机怎么修改照片kb)

  • OPPO k5如何关闭全局搜索(oppo k5如何关闭HD)

    OPPO k5如何关闭全局搜索(oppo k5如何关闭HD)

  • 快手咋看直播间人数(快手的直播怎么看)

    快手咋看直播间人数(快手的直播怎么看)

  • 手机怎么远程控制手机(手机怎么远程控制汽车打火)

    手机怎么远程控制手机(手机怎么远程控制汽车打火)

  • 微信图片已过期是怎么回事(微信图片已过期怎么查看原图)

    微信图片已过期是怎么回事(微信图片已过期怎么查看原图)

  • 韩国苹果11什么时候上市(韩国iphone11)

    韩国苹果11什么时候上市(韩国iphone11)

  • 红魔手机后面的灯怎么亮(红魔手机后面的灯怎么关)

    红魔手机后面的灯怎么亮(红魔手机后面的灯怎么关)

  • 网站维护需要什么技能(网站维护需要什么资质证书)

    网站维护需要什么技能(网站维护需要什么资质证书)

  • 什么是mece(什么是Mesh网络)

    什么是mece(什么是Mesh网络)

  • iphone11有几个摄像头(apple11几个摄像头)

    iphone11有几个摄像头(apple11几个摄像头)

  • 硬盘和磁盘的区别(硬盘和磁盘的区别在哪里)

    硬盘和磁盘的区别(硬盘和磁盘的区别在哪里)

  • qq人工服务电话是多少(qq人工服务电话多少)

    qq人工服务电话是多少(qq人工服务电话多少)

  • 荣耀20长截屏在哪(荣耀20i长截屏)

    荣耀20长截屏在哪(荣耀20i长截屏)

  • 拼多多新店有扶持吗(拼多多新店有扶持期吗)

    拼多多新店有扶持吗(拼多多新店有扶持期吗)

  • 前端播放大视频卡顿的解决(m3u8视频流)(前端播放视频的插件)

    前端播放大视频卡顿的解决(m3u8视频流)(前端播放视频的插件)

  • 税后利润向股东分配股息
  • 公司给员工发放福利的说辞
  • 小企业一定要买五险吗
  • 发票认证是干嘛
  • 民办非企业单位是私立还是公立
  • 飞机票退票费如何处理账务
  • 没经营的个体户营业执照怎么注销
  • 逆流交易合并报表抵消分录
  • 多交增值税怎么调整
  • 出口抵减内销产品应纳税额年终结转
  • 城市维护建设税税率
  • 个人股东从公司借款合法吗
  • 政府会计基本准则的附则有
  • 小规模纳税人怎么算税
  • 租赁房屋的装修
  • 发票为什么会查不到信息
  • 发票上传出现手印怎么办
  • 工商年报单位缴费基数从哪看
  • 非居民企业从居民企业取得分红
  • 销售折扣与折让影响应收账款周转率吗
  • 预提差率费怎么记账
  • 亏损计提递延
  • 重置ie浏览器会有什么影响
  • 借助的近义词
  • 中秋节给员工买什么福利
  • 税款缴纳期初未缴税额
  • 强化税收风险意识
  • 租金没有收进来,房产税要交吗
  • 在php中,字符串有哪些表示形式
  • php基础编程题
  • 公司员工生病看望的红包能入公司账吗
  • html中a标签的作用
  • 编译安装php8
  • h5移动端网页设计
  • vue模块拖拽
  • 功能强大的php文件有哪些
  • 免征个人所得税33种情形
  • 融资租入固定资产的账务处理
  • 差旅费可以加计吗
  • 贴现资产卖断会怎么样
  • 残保金滞纳金可以税前扣除吗
  • 怎样回到一年前
  • 破产审计需要几年的账
  • 个税申报子女教育有年龄限制吗
  • 揭秘蟹卡骗局
  • 28栏分次预缴税额是手动填写吗?
  • 专利年费计入哪里
  • 融资性无形资产的入账价值
  • 当月发票是否需要当月支付
  • 净资产增加是好还是坏
  • 付款申请单如何转填记账凭证
  • 买断式买入
  • 其他应付款时间长了怎么处理?
  • 企业建账要求
  • 利润表的编制方法和步骤实操
  • 改制后的企业
  • mysql压缩包安装教程8.0.20
  • sqlserver存储过程怎么查看
  • ubuntu ifdown
  • windows 安装源
  • 任务管理器快捷键ctrl+alt+
  • w10鼠标
  • 关于linux操作系统的描述中
  • win10系统代理在哪
  • window10光驱不能用了
  • 正二十面体怎么建模
  • linux命令shell脚本
  • python int 转 float
  • nodejs连接redis
  • python xml.etree.ElementTree遍历xml所有节点实例详解
  • jquery自带的弹出框
  • java script
  • js动态设置css样式
  • python中的类怎样理解
  • 副局长哪里任命
  • 四川国家税务局官网
  • 安徽国家税务局增值税发票查询平台
  • 增值税申报表更正申报期限
  • 开票后怎么报税呢
  • 小汽车碰撞游戏视频
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设