作者 | 努比

来源 | 小白学视觉

在Raspberry上启动项目很简单,所以让我们开始吧。

01. 产品清单

  • Raspberry Pi 4 Model B — 4GB

  • 适用于Raspberry Pi的Pan-Tilt HAT

  • Pi Camera v2 8MP

  • 微型SD卡

  • 迷你HDMI电缆

  • Raspberry Pi摄像头电缆—尺寸:457mm x 16mm(18“ x 0.6”)

  • USB-C充电器

  • USB-C外接电池(强烈建议选购)

云台HAT的选择是非常重要的。因为我们必须找到一种控制Pan-Tilt HAT的方法。我们使用的是Waveshare的Pan-Tilt HAT,小伙伴们可能需要花费一些时间来了解如何通过键盘或者通过HAT手动控制伺服电机。USB-C输出的电池对于Raspberry上的项目(其中Raspberry必须是可移动的)非常有用。

02. 软件安装

安装Raspberry操作系统:您可以选择任何Python可以正常运行的系统。这是Raspberry OS的官方页面:https : //www.raspberrypi.org/downloads。推荐使用Raspberry Pi OS

  • 为树莓派启用Pi相机

  • 在Raspberry上启用SSH

  • 安装Python,建议使用版本3

  • 建议安装OpenCV 4.2版

  • 如果Python缺少某些模块,请不要担心,并在Raspberry或Python社区中搜索其安装

03. 通过键盘控制云台相机

这部分对我们来说比较困难,为什么会有一定的困难?因为,有两种方法可以控制伺服电机:

  • 直接将伺服电机插入Raspberry,然后直接通过Raspberry控制它们,在这种情况下,需要使用GPIO接口

  • 将伺服电机插入HAT平台,然后将HAT插入Raspberry。因此,我们需要先控制HAT平台,然后再由HAT平台控制我们的伺服电机。在这种情况下可以使用waveshare PCA9685提供的给定驱动程序

04. 云台伺服电机校准

这部分虽然不是强制性的,但强烈建议使用。

伺服轴的螺丝

重要的是,一开始就不要拧紧伺服轴的螺钉,只需以可以自由旋转的方式稍微固定一下即可。使用键盘上的控件,大家可以尝试在0位置旋转舵机,然后将摄像机移动到首选的起始位置,现在可以拧紧伺服轴的螺钉。(云台螺钉在底座下方,因此我们需要在基座上安装云台,然后进行校准,拆卸和拧紧云台螺钉,然后再重新安装)

05. 人脸跟踪编码

>使用默认情况下随OpenCV一起提供的预安装CascadeClassifier来使操作变得简单。我们的工作重点是如何控制平移和倾斜角度。

CascadeClassifier具有在OpenCV目录+ /data/haarcascade_frontalface_default.xml中找到的正面人脸识别的预训练

所述CascadeClassifier给我们直接一组用于帧中的每个检测到的面部信息(X,Y,W,H)。(x,y)是检测到的面部的左上角的位置,(w,h)是检测到的面部的高度和与之的距离,根据这些信息,我们可以计算出检测到的面部的中心。

>脸部中心

当我们得到(x,y)时,将控制我们的摇摄和俯仰伺服器将摄像机移动到面部中心应靠近镜框中心的位置

>伪PD控制器

为什么是伪PD?因为我们的伺服器没有位置传感器,所以我们不知道机器人摄像头的摇摄角度和倾斜角度。因此,我们不能严格使用反馈控制。我使用了一个伪PD控制器,该控制器仅使用delta_PAN来递增/递减相机的pan-angle(resp。til-angle):

delta_PAN = k_PAN * delta_x + kd_PAN * delta_x_dot

大致来说,它是一种前馈控制器。

如果您在我们没有有关伺服器位置的信息时找到了一种更好的控制方式,请给我发送电子邮件告知我。

>拓展

我尝试添加一些随机消息模块:

  • bonjour:相机第一次检测到脸部时的随机欢迎消息

  • cachecache:当我们在相机前停留太长时间时,随机显示“远离我”消息

  • 缺少:什么都没检测到的随机消息

但是,添加这些消息有时会使算法产生一定的滞后。因此,大家可以消除这些模块以使相机更快。

>多脸检测

CascadeClassifier可以在一帧中找到多张脸,但是我将PD控制器限制为仅检测到一张脸1张脸的情况。轮到您改善此问题了。一种想法是计算检测到的面部的质心。

代码链接:

https : //github.com/nguyenrobot/palt-tilt-cam

基于 OpenCV 的人脸追踪相关推荐

  1. 基于opencv实现人脸检测

    基于opencv实现人脸检测 opencv简述 opencv是一个开源的计算机视觉库,它有着C++,Python,Java等接口,支持Windows,Linux,Mac OS,IOS 和 Androi ...

  2. 基于OpenCV实现人脸识别--Python

    目录 前言 第一章 OpenCV介绍 第二章 功能描述 2.1 对已有的数据进行检测 2.2 陌生人检测并发出警告 2.3 保存陌生人的视频 2.4 输入图片进行检测 2.5 现场录用信息 第三章 功 ...

  3. Python基于OpenCV的人脸表情识别系统[源码&部署教程]

    1.项目背景 人脸表情识别是模式识别中一个非常重要却十分复杂的课题.首先对计算机人脸表情识别技术的研究背景及发展历程作了简单回顾.然后对近期人脸表情识别的方法进行了分类综述.通过对各种识别方法的分析与 ...

  4. 【零基础跑项目】20代码教你基于opencv的人脸检测

    20代码教你基于opencv的人脸检测

  5. 基于OpenCV的人脸识别自助商店(源码&部署视频)

    1.模块功能介绍 实现人脸识别模块.人脸登录与注册功能.商店显示和用户余额页显示功能 用GUl图形界面实现(pyqt)语言python windows下软件pycharm 1.用户登录模块:刷脸登录 ...

  6. 树莓派 --- 基于OpenCV实现人脸识别

    目录 参考博客 调百度人脸识别的API也能达到目的,我这里是基于OpenCV进行人脸识别 OpenCV(Open source Computer Vision Library) 是一个开源的计算机视觉 ...

  7. Python基于OpenCV的人脸识别自助商店(源码&部署视频)

    1.模块功能介绍 实现人脸识别模块.人脸登录与注册功能.商店显示和用户余额页显示功能 用GUl图形界面实现(pyqt)语言python windows下软件pycharm 1.用户登录模块:刷脸登录 ...

  8. 【优秀毕设】基于OpenCV的人脸识别打卡/签到/考勤管理系统(最简基本库开发、可基于树莓派)

    [优秀毕设]基于OpenCV的人脸识别打卡/签到/考勤管理系统(最简基本库开发.可基于树莓派) 该系统利用Harr级联检测和LPBH进行人脸检测和训练.识别 利用Tkinter完成界面搭建 利用Fla ...

  9. 基于OpenCV的人脸识别系统的pyhon源代码

    本论文主要阐述了基于OpenCV的人脸识别原型系统.基于生物特征识别的身份认证方法有指纹.掌纹.眼睛虹膜.人脸等,其中,由于人脸的稳定性和可见性,人脸识别的研究与应用成为热点,本文针对出租公寓安全管理 ...

最新文章

  1. 干货|TensorFlow开发环境搭建(Ubuntu16.04+GPU+TensorFlow源码编译)
  2. linux小工具(1)查看shell的命令行历史记录
  3. 数据库元数据数据字典查询_10_列出数据库里的所有对象
  4. 浅谈代码的执行效率(2):编译器的威力 [摘自赵劼老师的博客]
  5. 什么是单模光纤收发器,应用范围有哪些?
  6. myeclipse怎么创建jframe类_创建型-建造者模式
  7. Kryo序列化实现源码分析
  8. wincc上位机与1200组态步骤_组态上位机WINCC与PLC通讯连接
  9. 新版手机浏览器_Firefox手机浏览器app下载安装_Firefox手机浏览器软件最新版免费下载...
  10. golang——channel笔记
  11. 股票语音播报软件 炒股语音实时播报
  12. 打印服务自动停止的解决方法
  13. 海康摄像机激活失败解决方法
  14. 电容或电感的电压_低成本电容电感测量电路
  15. CNI插件之bridge plugin
  16. 基于Myrocks和spider构建分布式数据库
  17. Android剥洋葱式解析JSON数据
  18. 跨境电商系统对接-进口篇
  19. 学习编程太枯燥?12款助你学编程的免费游戏
  20. jstree的简单使用例子

热门文章

  1. asp java 变量_ASP_用stack变量优化Java代码,  java程序包含了大量的对象 - phpStudy...
  2. sparkCore源码解析之思维脑图
  3. 使用树形结构保存实体
  4. 快速构建Windows 8风格应用27-漫游应用数据
  5. sftp 限制用户登陆指定目录(家目录)
  6. [Android]开发摇一摇分歧表决器过程
  7. Android组件系列----BroadcastReceiver广播接收器
  8. 应用基于资产的开发到 SOA 的服务中1
  9. ccache编译器缓存使用方法
  10. java 判断ocx是否存在_OCX控件的注册卸载,以及判断是否注册