人脸识别还能这么玩
今天我们来扩展一下,用人脸玩飞机大战。虽然思路跟手势识别类似,但代码量比手势识别版稍多。
使用的人脸算法是毫秒级的,帧率能到 30,用电脑CPU运行也很流畅。
下面我分享下项目实现过程,文末获取项目完整的源代码。
准备飞机大战程序
Github上找到一个Python版本的飞机大战程序,安装Pygame即可运行。
用键盘的A、D、W、S键用来控制飞机的移动方向,分别对应左、右、上、下。
所以,接下来我们要做的是识别人脸,并对人脸姿态进行估计,将估计后的结果映射到左、右、上、下,从而控制飞机的运行。
人脸识别
这里,我们用opencv读取摄像头中的视频流。
将视频流中的每一帧送入mediapipe中的人脸识别模型,进行识别。
图片mediapipe 不止能识别人脸,还能标注出人脸 6 个关键点左眼、右眼、左耳、右耳、鼻子、嘴巴。
核心代码:
with self.mp_face_detection.FaceDetection( model_selection=0, min_detection_confidence=0.9) as face_detection: while cap.isOpened(): success, image = cap.read() image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) results = face_detection.process(image) image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR) if results.detections: for detection in results.detections: # 获取人脸框坐标 face_box = detection.location_data.relative_bounding_box face_w, face_h = int(face_box.width * frame_w), int(face_box.height * frame_h) face_l = int(face_box.xmin * frame_w) + face_w face_t = int(face_box.ymin * frame_h) face_r, face_b = face_l - face_w, face_t + face_h # 显示人脸框 cv2.rectangle(image, (face_l, face_t), (face_r, face_b), (0, 255, 255), 2) self.draw_zh_img(image, self.face_box_name_img, (face_r + face_l) // 2, face_t - 5) pose_direct, pose_key_points = self.pose_estimate(detection) # 显示人脸 6 个关键点 for point_name in FaceKeyPoint: mp_point = self.mp_face_detection.get_key_point(detection, point_name) point_x = int(mp_point.x * frame_w) point_y = int(mp_point.y * frame_h) point_color = (0, 255, 0) if point_name in pose_key_points else (255, 0, 255) cv2.circle(image, (point_x, point_y), 4, point_color, -1) # 显示关键点中文名称 point_name_img = self.face_key_point_name_img[point_name] self.draw_zh_img(image, point_name_img, point_x, point_y-5)
这里有个小知识点需要大家注意下。
代码中用draw_zh_img来显示中文,由于opencv不支持直接显示中文。因此,我用PIL模块中Image方法提前绘制中文图片,并转为opencv格式。
在需要的时候,直接与视频流合并,效率高,不掉帧。
人脸姿态估计
之前手势识别,我们用相邻帧来判断手势的移动。人脸姿态估计只用当前帧就可以,相对容易一些。
我们通过人脸 6 个关键点的坐标距离,就可以判断出人脸的姿态
这里,左耳和鼻子的水平距离很近,因此,我们可以估计脸向左转,从而可以用只飞机向左移动。
同样的,用其他关键点,我们可以估计出人脸向右转、向上(抬头)和向下(低头)
核心代码:
# 左耳与鼻子水平距离,判断面部左转 left_ear_to_nose_dist = left_ear.x - nose_pos.x # 右耳与鼻子水平距离,判断面部右转 nose_to_right_ear_dist = nose_pos.x - right_ear.x # 鼻子与左眼垂直距离,判断面部向上 nose_to_left_eye_dist = nose_pos.y - left_eye.y # 左耳与左眼垂直距离,判断面部向下 left_ear_to_left_eye_dist = left_ear.y - left_eye.y if left_ear_to_nose_dist < 0.07: # print('左转') self.key_board.press_key('A') time.sleep(0.07) self.key_board.release_key('A') return 'A', [FaceKeyPoint.NOSE_TIP, FaceKeyPoint.LEFT_EAR_TRAGION] if nose_to_right_ear_dist < 0.07: # print('右转') self.key_board.press_key('D') time.sleep(0.07) self.key_board.release_key('D') return 'D', [FaceKeyPoint.NOSE_TIP, FaceKeyPoint.RIGHT_EAR_TRAGION]
姿态控制飞机移动
识别出人脸姿态,我们就可以用程序控制键盘,从而控制飞机移动。
这里我用PyKeyboard模块控制键盘按键。
self.key_board = PyKeyboard() # print('左转') self.key_board.press_key('A') time.sleep(0.07) self.key_board.release_key('A')
press_key和release_key函数分别是按键和释放按键。
它们之间,调用了time.sleep(0.07)控制按键的时长,按键时间长,则飞机移动距离就长,反之,按键时间短,则飞机移动距离就短,大家可以根据自己的需求来调节。
以上是人脸识别还能这么玩的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题











将输入法调至英文后按住Shift键和减号键即可。教程适用型号:联想AIO520C系统:Windows10专业版版本:MicrosoftOfficeWord2022解析1首先检查输入法的中英文打字,调整至英文。2然后同时按住键盘上的Shift键和减号键。3检查界面,即可查看已打出的下划线。补充:Word文档如何快捷输入下划线1如果需要在Word中输入下划线,用鼠标选中空格后,选择字体菜单中选择下划线类型即可输入。总结/注意事项一定要先将输入法换至英文再进行操作,否则无法成功输入下划线。

当我们鼠标暂时失去作用的时候,如何用键盘快捷键的方式打开右键菜单呢?有两种方法,一是按Shift+F10快捷键就可以调处右键菜单,二是键盘上windows和ctrl中间带着目录的键也可以,具体的教程下面一起来看看吧。用键盘快捷键打开右键菜单的方式第一种方法1、在电脑桌面中不选择任何文件时,按下键盘上的下图红色圈标注的按键,此按键为快捷打开右键菜单的按键。2、即可将桌面的右键菜单打开,如果需要选择其中的项目,再用鼠标选中即可第二种方法1、其实我们使用“Shift+F10”快捷键就可以调处右键菜单2

计算机的输入设备如键盘和鼠标都需要人类操作,不能独立运行。Windows笔记本电脑上的触摸板和键盘也一样。文本不会自动输入,鼠标也不会自动点击。若发生异常情况,一定存在原因。如果遇到笔记本电脑键盘自动输入问题,请按照指南进行修复。Windows笔记本电脑上的键盘自动打字当您的Windows笔记本电脑上的键盘自动打字时,您可以通过以下方式进行修复。手动检查键盘确保键盘工作正常检查笔记本电脑是否已远程连接检查是否有任何自动打字程序正在运行运行恶意软件扫描调整键盘设置重新安装键盘驱动程序让我们详细了解

本站2月29日消息,迈从今日为K87三模机械键盘推出了“风信子轴”“琉光冰淇淋轴”两款版本,该键盘主打“Gasket结构、80%配列”,相关轴体键盘价格信息如下:“风信子轴”版:首发价299元“琉光冰淇淋轴”版:首发价379元据介绍,系列键盘使用Gasket结构,采用87键80%配列,全键无冲,支持热插拔,号称选用“原厂/MDA双色PBT键帽”,使用1.2mm单键开槽PCB(下灯位),配备RGB灯效,并拥有磁吸收纳铭牌设计。此外,这款键盘配备6000毫安电池,无线延迟3ms,官方未公布键盘尺寸及

未来几个月将推出的Windows11电脑键盘上将新增一个Copilot键。该键可让用户在不升级新PC的情况下,通过按下指定按钮轻松进入副驾驶模式。本指南将详细介绍如何在任何Windows11键盘上设置副驾驶按钮。微软近日宣布,他们在推进人工智能辅助驾驶方面取得了重要进展。Windows11将新增一个专门的Copilot密钥,进一步提升个人电脑用户的体验。这一硬件变化代表了WindowsPC键盘三十年来的首次重大升级。接下来几个月,新的Windows11电脑将会搭载全新的Copilot键设计在键盘

本站8月12日消息,VGN于8月6日推出了联名《艾尔登法环》键鼠系列产品,包含键盘、鼠标和鼠标垫,采用菈妮/褪色者定制主题设计,目前系列产品已上架京东,售价99元起。本站附联名新品信息如下:VGN丨艾尔登法环S99PRO键盘该键盘采用纯铝合金外壳,辅以五层消音结构,使用GASKET板簧结构,拥有单键开槽PCB、原厂高度PBT材质键帽、铝合金个性化背板;支持三模连接和SMARTSPEEDX低延迟技术;接入VHUB,可一站式管理多款设备,首发549元。VGN丨艾尔登法环F1PROMAX无线鼠标该鼠标

苹果手机键盘用户想要设置手写输入法,但是不知道怎么操作,其实是很简单的,用户可以在手机的键盘设置中直接选择手写输入法输入,如果没有也可以手动添加手写输入法。苹果手机键盘怎么设置手写输入法答:在键盘设置中直接启用手写输入法1、苹果用户在使用输入法的时候,默认是会开启手写输入法的。2、用户只需要在打字的时候直接点击左下角长按选择手写输入法就可以了。3、如果用户的手机里面没有手写输入法也可以进行手动的添加。4、用户进入设置找到通用键盘设置在第一个键盘里面添加手写输入的选项就可以了。5、使用手写输入法可

微信键盘怎么设置皮肤?微信键盘是一款非常智能的手机输入法软件,这个软件上面有好多人性化的功能,它可以让用户自己选择输入模式,还可以在这个软件上面以最快的速度找到自己想要的表情然后发出去。这个软件上面还可以让用户自己更换键盘的皮肤,很多用户都还不太清楚要怎么更换皮肤,下面小编整理了皮肤的更换方式供大家参考。微信键盘皮肤的设置方法在手机的微信、短信或其他需要使用键盘的应用中,您可以点击键盘左上角的输入法设置图标,进入设置页面查看各种输入法的功能设置选项。 2、在输入法的设置页面点击“个性皮肤
