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

  • 关于教师节的感恩的话(关于教师节的感谢语)(关于教师节的感恩词)

    关于教师节的感恩的话(关于教师节的感谢语)(关于教师节的感恩词)

  • iphone13防水吗(iphone13防水吗可以放进水里吗)

    iphone13防水吗(iphone13防水吗可以放进水里吗)

  • 快手回收站在哪里(快手如何找回收藏的视频)

    快手回收站在哪里(快手如何找回收藏的视频)

  • qq离线文件和在线文件有什么区别(qq离线文件和在线一样吗)

    qq离线文件和在线文件有什么区别(qq离线文件和在线一样吗)

  • iqoo有多少个型号(iqoo一共有几种机型)

    iqoo有多少个型号(iqoo一共有几种机型)

  • opppa11跟oppoa11x区别(oppoa11与oppoa11x哪个好)

    opppa11跟oppoa11x区别(oppoa11与oppoa11x哪个好)

  • 小米手环3nfc和4nfc的区别(小米手环3nfc和小米手环3的区别)

    小米手环3nfc和4nfc的区别(小米手环3nfc和小米手环3的区别)

  • 快手电商是什么(快手电商是什么软件)

    快手电商是什么(快手电商是什么软件)

  • 磁盘格式化的目的(磁盘格式化的含义)

    磁盘格式化的目的(磁盘格式化的含义)

  • 小米6支持24w吗(小米6能用24w的充电头吗)

    小米6支持24w吗(小米6能用24w的充电头吗)

  • 苹果充电时导航没声音(苹果充电时导航没声音怎么办)

    苹果充电时导航没声音(苹果充电时导航没声音怎么办)

  • 为什么照片删了还会出现(为什么照片删了icloud里也没有了)

    为什么照片删了还会出现(为什么照片删了icloud里也没有了)

  • windows7常用附件有哪些(win7常用的附件)

    windows7常用附件有哪些(win7常用的附件)

  • oppor15有没有呼吸灯功能(oppor15x有呼叫语音助手吗)

    oppor15有没有呼吸灯功能(oppor15x有呼叫语音助手吗)

  • iphone11双卡双待怎么装(iphone11双卡双待显示一个卡关机怎么办)

    iphone11双卡双待怎么装(iphone11双卡双待显示一个卡关机怎么办)

  • 苹果怎么用微信充抖币(苹果怎么用微信支付游戏)

    苹果怎么用微信充抖币(苹果怎么用微信支付游戏)

  • 苹果11是不是双卡双待手机(苹果11是不是双卡槽)

    苹果11是不是双卡双待手机(苹果11是不是双卡槽)

  • c语言程序开发的步骤(c语言程序开发的六个阶段)

    c语言程序开发的步骤(c语言程序开发的六个阶段)

  • 360扩展器怎么设置(360扩展器怎么设置视频)

    360扩展器怎么设置(360扩展器怎么设置视频)

  • kmeans原理(kmeans原理及计算过程)

    kmeans原理(kmeans原理及计算过程)

  • beatsx怎么连接iphone

    beatsx怎么连接iphone

  • 华为pot一alooa是什么型号(华为pot aloo)

    华为pot一alooa是什么型号(华为pot aloo)

  • 小米8青春版多少克(小米8青春版多少瓦快充)

    小米8青春版多少克(小米8青春版多少瓦快充)

  • 苹果每年什么时候发布新品(苹果每年什么时候最便宜)

    苹果每年什么时候发布新品(苹果每年什么时候最便宜)

  • Windows更新出现问题(windows更新出现错误重新打开设置)

    Windows更新出现问题(windows更新出现错误重新打开设置)

  • c语言中fclose函数的使用(c语言fseek函数)

    c语言中fclose函数的使用(c语言fseek函数)

  • 营业税加收滞纳金的规定
  • 递延所得税资产和负债怎么计算
  • 税收 特征
  • 车辆购置税完税证明是什么
  • 发票已经报送怎么处理
  • 建筑公司包工包料账务处理
  • 收据税前扣除是多少
  • 实验用品包括实验仪器吗
  • 利润为负数利润增长率怎么算
  • 土地摊销计入在建工程吗
  • 计划成本法领用原材料会计分录
  • 固定资产汽车抵扣新政策
  • 单位起诉员工赔偿算劳动争议
  • 晚会主持人化妆
  • 增值税开错了
  • 税控维护费的分录
  • 工程施工直接费用包括哪些
  • 一人独资公司设立的条件
  • 净利润分配股利的会计分录
  • Win7/Win8/Win10单、多系统一键安装教程 只需30秒!
  • mac如何打电话
  • 无发票材料可以入材料账吗
  • 微软不包括
  • php 设计模式
  • 企业所得税汇算交税分录
  • springboot常用
  • 目标检测如何入门
  • 供电局销售电力产品
  • 成品油发票当月冲红
  • 坏账准备的借贷方向表示什么意思
  • java项目报错
  • vue通过url访问单个页面
  • 简述时期指标和时点指标的特点
  • 企业取得土地使用权可能作为什么核算
  • css定位属性的运用
  • 人工智能 深度
  • 收到房租怎么做账务处理
  • 命令行查看硬件信息
  • 帝国cms更换编辑器
  • python的pillow库如何安装
  • 小规模纳税人的企业所得税怎么算
  • 弥补以前年度亏损最多几年
  • 进口商品销售的会计分录
  • 不计提工资直接发放可以吗
  • 非金融企业之间借款利息可以抵扣吗
  • 车辆购置税能否融资租赁
  • 什么是企业会计确认计量和报告的空间范围
  • 汇算清缴思路
  • 会计学中的折旧是什么意思
  • 一般纳税人的建筑企业可以选择简易征收的条件
  • 除湿机计入固定费用吗
  • 上月计提多了怎么办
  • 分公司出现法律问题谁负责
  • 线上线下财务
  • 企业给员工单独交社保
  • 猪肉蔬菜是免税农产品吗
  • 如何理解其他应收款的概念
  • 打印机取消打印在哪里
  • Win10 PC/Mobile Creators快速预览版14959今日推送
  • win7旗舰版系统激活码
  • window10自带的软件有哪些
  • mission controller
  • win8.1改语言
  • winton
  • w7系统怎么添加打印机
  • centos7安装MySQL8.0
  • win7电脑剪贴板里面的内容在哪打开
  • Win10年度更新正式发布:功能全面升级
  • 一边做游戏一边学英语
  • 基于重大误解实施的民事法律行为
  • perl getoption
  • 详解JavaScript ES6中的Generator
  • 下载随手笔记
  • 法线贴图使用
  • android:thumb
  • JavaScript indexOf方法入门实例(计算指定字符在字符串中首次出现的位置)
  • 国家税务局湖北省税务总局
  • 临时税务登记证是什么意思
  • 餐厅税务依据有哪些
  • 计算出口退税的免抵税额,不计征城市维护建设税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设