DIY人脸跟踪电风扇送女朋友(4)
成果展示:
如下视频所示为制作好的人脸跟踪电风扇
人脸跟踪风扇
相关代码已经放在百度网盘上面了。
链接:https://pan.baidu.com/s/188AylEd2QgOiA6YFv01N3A
提取码:e2og
主要原理
其主要原理就是,摄像头对风扇前面的内容进行预览,树莓派对摄像头拍到的画面进行实时的检测,检测出人脸的位置。然后根据位置来控制云台的转动,从而达到风扇始终对着人脸的目标。
原理示意图:
树莓派通过检测人脸位置,大致判断人脸相对自己的位置,然后转换成角度,控制云台运动。
代码编写:
这里主要看一下最重要的代码,就是在获取到一帧图像之后的处理流程,我把它放在slot_camera方法中
1 def slot_camera(self):2 if (self.cap.isOpened()):3 self.frame += 14 # get a frame5 ret, img = self.cap.read()6 height, width, bytesPerComponent = img.shape7 bytesPerLine = bytesPerComponent * width8 9 if self.frame % 1 == 0:10 image_p = img.ctypes.data_as(ctypes.c_char_p)11 self.alg_handle.alg_run.restype = ctypes.POINTER(ctypes.c_float)12 result = self.alg_handle.alg_run(image_p, 11, height, width, 4)13 14 # cls15 if int(result[0]) == 0:16 pass17 # det18 elif int(result[0]) == 1:19 box_count = int(result[1])20 for j in range(box_count):21 cls = int(result[2 + j * 6 + 0])22 prob = float(result[2 + j * 6 + 1])23 if prob < 0.4:24 continue25 x1 = int(float(result[2 + j * 6 + 2]) * width)26 y1 = int(float(result[2 + j * 6 + 3]) * height)27 x2 = int(float(result[2 + j * 6 + 4]) * width)28 y2 = int(float(result[2 + j * 6 + 5]) * height)29 cv2.rectangle(img, (x1, y1), (x2, y2), (0, 0, 255), 1)30 x_center = (float(result[2 + j * 6 + 2]) + float(result[2 + j * 6 + 4])) / 231 y_center = (float(result[2 + j * 6 + 3]) + float(result[2 + j * 6 + 5])) / 232 x_angle = int((x_center - 0.5) * 40 / 0.5)33 y_angle = int((y_center - 0.5) * 40 / 0.5)34 self.servo_cmd['x_dir'] = 'left' if x_angle <= 0 else 'right'35 self.servo_cmd['x_angle'] = abs(x_angle)36 37 cv2.cvtColor(img, cv2.COLOR_BGR2RGB, img)38 cv2.putText(img, 'x:%s %d'%( self.servo_cmd['x_dir'], self.servo_cmd['x_angle']), (10, 40), cv2.FONT_HERSHEY_SIMPLEX, 1.2, (0, 0, 255), 2)39 ServoControl('x', self.servo_cmd['x_dir'], self.servo_cmd['x_angle'])40 41 self.image = QImage(img.data, width, height, bytesPerLine, QImage.Format_RGB888)42 self.label_frame.setPixmap(QPixmap.fromImage(self.image).scaled(self.label_frame.width(), self.label_frame.height()))43 44
DIY人脸跟踪电风扇送女朋友(4)相关推荐
- DIY人脸跟踪电风扇送女朋友(1)
女朋友的生日快到了,作为一个屌丝程序员,想要送给女朋友一个特别的礼物,最终结合现在火热的深度学习技术,选择做一个人脸跟踪电风扇,能够跟踪人脸,始终对着人脸吹,让女友无时无刻不感受到"清风徐来 ...
- DIY人脸跟踪电风扇送女朋友(3)
下面要重点介绍一下深度学习技术以及yolov3目标检测网络 深度学习技术: 深度学习技术实际上是从早期的人工神经网络发展而来的.本质上就是用一个函数去拟合输入(图片)到结果(目标框)的映射.因为函数本 ...
- DIY人脸跟踪电风扇送女朋友(2)
接着之前的内容,我们来编写一下云台控制的代码.实际上由于安装了开源的Adafruit_Python_PCA9685模块,操作舵机非常的简单.这里我们把舵机的控制分成x轴和y轴,x轴可以像左或者向由旋转 ...
- 【数学建模】DIY人脸识别(原创)
文章目录 题目 论文:DIY人脸识别技术 摘 要 1.问题的重述 2.问题的分析 3.模型的假设与符号说明 4.模型的准备 4.1 基于Adaboost算法的Haar强特征级联分类器 4.2Adabo ...
- TensorFlow实时任意风格迁移,送女朋友的创意礼物有了
TensorFlow实时任意风格迁移,送女朋友的创意礼物有了 前言 自适应实例规范化 风格迁移网络 编码器结构与实现 通过反射填充(reflection padding)减少块伪影 解码器结构与实现 ...
- 【深度学习】DIY 人脸识别技术的探索(一)
[深度学习]DIY 人脸识别技术的探索(一) 文章目录 摘要 问题重述 模型假设 定义与符号说明 问题分析 模型的建立与求解 参考 摘要 伴随着人工智能技术的发展,人们对信息安全有了更高的要求,传统的 ...
- 【深度学习】DIY 人脸识别技术的探索(二)
[深度学习]DIY 人脸识别技术的探索(二) 文章目录 训练模型 工具 结果展示 问题二的模型建立与求解 基于 KNN 的人脸识别模型 训练模型 MTCNN 可以并行训练(3 个网络同时训练,前提是内 ...
- 非刚性人脸跟踪 —— 实用工具
面向对象设计 与人脸检测和人脸识别一样,人脸跟踪也由两部分组成:数据和算法.算法通过预先储存(即离线)的数据来训练模型,然后对新来的(即在线)数据执行某类操作.因此,采用面向对象设计是不错的选择. 在 ...
- 非刚性人脸跟踪 —— 人脸跟踪
人脸跟踪问题可认为是寻找一种高效和鲁棒性的方法,它能将各种面部特征的单独检测与这些特征的几何依赖性结合起来,已得到连续帧中每幅图像面部特征位置的精确估计.基于此,需仔细考虑几何依赖性的必要性.下图为用 ...
最新文章
- 董小姐的空调不一定能当发电站,但牛放屁确实可以发电
- 用Android自带的signapk.jar + .x509.pem + .pk8签名应用程序
- SwiftUI之深入解析高级动画的几何效果GeometryEffect
- 下单问题分析及解决方式
- Thread的run()与start()的区别
- 7种有害的IT团队行为,不根除就坏大事了
- linux mint 18安装中文,无法在Linux Mint 18.1“Serena”下安装pyFFTW
- java单人多人聊天_java简单多人聊天
- 常见花材的固定的方法有哪些_什么是zeta电位?常见zeta电位分析方法有哪些?...
- mstsc远程桌面全频或自定义窗口
- windows搭建FTP
- python列表逐个输出_python的列表元素输出
- python画小树_如何用Python画一颗小树?
- 大学英语专业开计算机课程吗,加拿大留学,温莎大学英语计算机专业了解一下!...
- LeetCode455分发饼干
- excel表格内容拆分_3个动图,教你学会如何让excel表格自动拆分,学会它,小白变大神...
- Android 画椭圆
- 海盗分椰子c语言编程,水手分椰子——迭代法、递归解题(示例代码)
- 云付注册推荐人怎么填?云付新手怎么操作
- 大学生创业之火如何再次燎原
热门文章
- android retrofit2.0 rxjava2,Android - 网络请求之 Retrofit2 + RxJava
- java soap 头_如何在Java中添加Soap标头
- 圆点html span,HTML span 标签
- web前端自学入门视频教程分享
- 按钮配置之自定义按钮使用(一)——JEPLUS软件快速开发平台
- Tomcat8.01及nginx-1.8.1安装
- 为什么敏捷开发在亚洲实行不了
- 基于DirectShow的局域网内音视频流的多机共享
- 【VLC-Android】vlc-android简例
- Origin null is not allowed by Access-Control-Allow-Origin 解决方法