当前位置: 首页 > article >正文

保姆级教程:用Python的face_recognition库,5分钟搞定人脸检测+特征点标记

零基础玩转Python人脸识别5分钟实现智能美颜与表情分析记得第一次接触人脸识别技术时我盯着手机相册里自动分类的人物相册发了半天呆——这玩意儿到底是怎么认出我换了发型还长了胡子的作为Python初学者你可能觉得这种黑科技离自己很远但其实用face_recognition这个神器库5行代码就能让电脑学会看脸。今天我们就来场人脸识别极速入门不仅教你画框标点还会解锁几个让朋友惊呼这也行的趣味玩法。1. 环境配置避开99%新手会踩的坑在开始写代码前我们需要先搭建好工作环境。很多教程会直接让你pip install但根据我的教学经验有三大隐形杀手会导致安装失败Python版本陷阱face_recognition对3.6-3.9版本支持最稳定用3.10可能会遇到dlib编译错误操作系统差异Windows用户建议先安装CMakeMac用户需要Xcode命令行工具镜像源选择国内用户推荐使用清华源加速安装# 适用于Windows/Mac的万能安装命令 python -m pip install cmake python -m pip install face_recognition pillow opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple验证安装是否成功可以跑个简单测试import face_recognition print(face_recognition.__version__) # 应该输出类似1.3.0的版本号注意如果遇到dlib相关错误可以先尝试pip install dlib19.22.0指定版本2. 人脸检测实战从静态图片到动态捕捉2.1 基础版给照片画美颜框我们先实现最基础的人脸框标记功能。准备一张包含人脸的jpg图片比如自拍保存为test.jpg。from PIL import Image, ImageDraw import face_recognition def mark_faces(image_path): image face_recognition.load_image_file(image_path) face_locations face_recognition.face_locations(image) pil_image Image.fromarray(image) draw ImageDraw.Draw(pil_image) for top, right, bottom, left in face_locations: # 画半透明粉色矩形框类似美颜相机效果 draw.rectangle(((left, top), (right, bottom)), outline(255, 105, 180, 128), width5, fill(255, 182, 193, 32)) pil_image.show() return pil_image marked_image mark_faces(test.jpg)这段代码会用粉色半透明矩形标出人脸区域自动显示处理后的图片返回Pillow图像对象方便后续处理2.2 进阶版实时摄像头人脸追踪想让你的笔记本摄像头变成智能监控只需增加OpenCV支持import cv2 import numpy as np video_capture cv2.VideoCapture(0) while True: ret, frame video_capture.read() rgb_frame frame[:, :, ::-1] # BGR转RGB face_locations face_recognition.face_locations(rgb_frame) for top, right, bottom, left in face_locations: cv2.rectangle(frame, (left, top), (right, bottom), (0, 255, 0), 2) cv2.imshow(Video, frame) if cv2.waitKey(1) 0xFF ord(q): break video_capture.release() cv2.destroyAllWindows()3. 面部特征点解锁表情识别黑科技face_recognition最强大的功能之一是68点面部特征识别。这些关键点可以玩出很多花样特征点范围对应面部区域应用场景0-16下巴轮廓脸型分析17-21右眉毛情绪识别22-26左眉毛疲劳检测27-35鼻梁整形模拟36-41右眼眨眼计数42-47左眼视线追踪48-67嘴唇唇语识别def analyze_expression(image_path): image face_recognition.load_image_file(image_path) landmarks face_recognition.face_landmarks(image) if not landmarks: print(未检测到人脸) return for landmark in landmarks: # 计算嘴巴张开程度 mouth_top landmark[top_lip][0] mouth_bottom landmark[bottom_lip][0] mouth_open mouth_bottom[1] - mouth_top[1] # 计算眉毛上扬程度 left_eyebrow landmark[left_eyebrow] right_eyebrow landmark[right_eyebrow] eyebrow_raise (left_eyebrow[0][1] right_eyebrow[0][1]) / 2 print(f嘴巴张开度: {mouth_open:.2f} 像素) print(f眉毛上扬度: {eyebrow_raise:.2f} 像素) if mouth_open 15: print(检测到惊讶表情) elif eyebrow_raise 100: print(检测到皱眉表情) analyze_expression(selfie.jpg)4. 创意应用让人脸识别好玩起来4.1 自动添加虚拟眼镜利用特征点可以轻松实现AR效果def add_glasses(image_path, glasses_pathglasses.png): image Image.open(image_path) landmarks face_recognition.face_landmarks(np.array(image)) if not landmarks: return image glasses Image.open(glasses_path).convert(RGBA) for landmark in landmarks: # 计算眼镜位置和大小 left_eye landmark[left_eye] right_eye landmark[right_eye] eye_width right_eye[3][0] - left_eye[0][0] glasses glasses.resize((int(eye_width * 2.5), int(eye_width * 1.2))) # 放置在眼睛上方 pos_x left_eye[0][0] - eye_width//4 pos_y min(left_eye[0][1], right_eye[0][1]) - eye_width//3 image.paste(glasses, (pos_x, pos_y), glasses) return image4.2 人脸相似度PK想看看自己像哪个明星试试这个def compare_celebrities(your_image, celeb_images): your_face face_recognition.load_image_file(your_image) your_encoding face_recognition.face_encodings(your_face)[0] results [] for name, path in celeb_images.items(): celeb_face face_recognition.load_image_file(path) celeb_encoding face_recognition.face_encodings(celeb_face)[0] distance face_recognition.face_distance([your_encoding], celeb_encoding)[0] similarity (1 - distance) * 100 results.append((name, similarity)) return sorted(results, keylambda x: x[1], reverseTrue) # 示例用法 celeb_db { 刘德华: liudehua.jpg, 周杰伦: jay.jpg, 吴彦祖: daniel.jpg } print(compare_celebrities(my_photo.jpg, celeb_db)) # 输出类似[(周杰伦, 78.32), (刘德华, 65.41), (吴彦祖, 59.87)]5. 性能优化与常见问题当处理大量图片时这几个技巧能显著提升速度GPU加速安装dlib时启用CUDA支持批量处理使用batch_face_locations方法分辨率调整先缩小图片检测再在原图定位# 高性能处理示例 def fast_detection(image_paths): images [face_recognition.load_image_file(path) for path in image_paths] # 缩放到1/4大小检测 small_images [cv2.resize(img, (0,0), fx0.25, fy0.25) for img in images] # 批量检测 batch_locations face_recognition.batch_face_locations(small_images, number_of_times_to_upsample0) results [] for i, locations in enumerate(batch_locations): # 转换回原图坐标 orig_locations [(top*4, right*4, bottom*4, left*4) for (top, right, bottom, left) in locations] results.append((image_paths[i], orig_locations)) return results遇到问题先检查这几点图片是否包含正脸侧脸识别率较低光照是否充足暗光环境效果差人脸大小是否合适建议占图片1/4以上最后分享一个实用技巧用face_recognition.api直接调用底层功能可以绕过一些限制比如face_recognition.api.face_landmarks(face_image, modellarge)能获取更精细的68点特征。

相关文章:

保姆级教程:用Python的face_recognition库,5分钟搞定人脸检测+特征点标记

零基础玩转Python人脸识别:5分钟实现智能美颜与表情分析 记得第一次接触人脸识别技术时,我盯着手机相册里自动分类的人物相册发了半天呆——这玩意儿到底是怎么认出我换了发型还长了胡子的?作为Python初学者,你可能觉得这种"…...

开关电源救星:用TVS二极管搞定MOS管击穿问题(以24V推挽电路为例)

开关电源救星:用TVS二极管搞定MOS管击穿问题(以24V推挽电路为例) 在中小功率开关电源设计中,MOS管击穿是工程师最头疼的故障之一。我曾在一个24V推挽式电源项目中,连续烧毁了5个MOS管,直到用示波器捕捉到那…...

效率提升秘籍:用快马一键生成iic总线调试与设备扫描工具代码

最近在调试一个嵌入式项目时,遇到了I2C设备通信不稳定的问题。作为一个经常和STM32打交道的开发者,我深知手动调试I2C总线的痛苦——需要逐个地址测试,还要处理各种异常情况。于是我开始寻找更高效的解决方案,最终在InsCode(快马)…...

Arcgis实战:坐标系与投影的精准转换技巧

1. 坐标系与投影的基础概念 第一次用ArcGIS做项目时,我犯了个低级错误——把地理坐标系的经纬度数据直接当成了平面距离计算。结果客户问我"这条道路有多长"时,我报出的0.0023这个数字让他一脸茫然。这就是没搞懂坐标系和投影区别的典型教训。…...

从DRC到PAE:VLSI天线效应全解析(含最新工艺避坑指南)

从DRC到PAE:VLSI天线效应全解析(含最新工艺避坑指南) 在28nm以下先进工艺节点中,工程师们常会遇到一个看似简单却暗藏杀机的问题——某条金属线在DRC检查时完全合规,但流片后却出现大规模栅氧击穿。这种被称为"工…...

终极指南:如何用GPT-SoVITS实现高质量少样本语音克隆

终极指南:如何用GPT-SoVITS实现高质量少样本语音克隆 【免费下载链接】GPT-SoVITS 1 min voice data can also be used to train a good TTS model! (few shot voice cloning) 项目地址: https://gitcode.com/GitHub_Trending/gp/GPT-SoVITS GPT-SoVITS是一个…...

HOJ部署进阶:绕过宝塔,用Nginx反向代理直接配置Docker服务的域名与HTTPS

HOJ部署进阶:Nginx反向代理直连Docker服务的全手动配置指南 当你在服务器上运行HOJ在线判题系统时,是否厌倦了依赖宝塔面板这类图形化工具?本文将带你深入探索完全通过命令行配置Nginx反向代理和HTTPS的全过程,实现从域名解析到安…...

告别JSON臃肿!在STM32上用nanopb实现高效数据通信(附完整工程)

告别JSON臃肿!在STM32上用nanopb实现高效数据通信(附完整工程) 在嵌入式开发领域,数据通信的效率往往决定着整个系统的性能上限。当你的STM32F103只有20KB RAM可用时,JSON这种看似方便的文本协议突然变成了奢侈的选择…...

【Hot 100 刷题计划】 LeetCode 42. 接雨水 | C++ 动态规划与双指针题解

LeetCode 42. 接雨水 | C 动态规划与双指针双解法题解 📌 题目描述 题目级别:困难 (Hard) 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height [0,1,…...

实战演练:基于快马生成利用claude code重构低质python代码的完整案例

今天想和大家分享一个实战案例:如何用Claude Code重构低质Python代码。这个项目完全在InsCode(快马)平台上完成,从生成到测试一气呵成,特别适合想学习代码重构技巧的开发者。 项目背景 最近接手了一个遗留项目,里面有个处理用户数…...

告别‘传数据’:用Transformer和CNN实战语义通信,6G时代如何让AI‘听懂’你的意图?

Transformer与CNN融合实战:6G时代语义通信系统的工程实现 在6G标准化进程中,语义通信正从理论概念快速向产业实践转化。与传统的比特级传输不同,语义通信通过提取和传递信息的核心含义而非原始数据,实现了在相同带宽下传输更多有效…...

【Hot 100 刷题计划】 LeetCode 55. 跳跃游戏 | C++ 贪心算法题解

LeetCode 55. 跳跃游戏 | C 贪心算法最优解题解 📌 题目描述 题目级别:中等 给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标,如…...

猫抓浏览器资源嗅探扩展:专业配置与高效下载指南

猫抓浏览器资源嗅探扩展:专业配置与高效下载指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 猫抓(cat-catch&#xff0…...

RetroArch终极指南:如何为你的游戏手柄打造完美按键映射

RetroArch终极指南:如何为你的游戏手柄打造完美按键映射 【免费下载链接】RetroArch Cross-platform, sophisticated frontend for the libretro API. Licensed GPLv3. 项目地址: https://gitcode.com/GitHub_Trending/re/RetroArch 想要在RetroArch中享受流…...

QGIS属性表双向操作指南:导出Excel做分析,再导回地图做可视化(避坑数据丢失)

QGIS属性表双向操作指南:导出Excel做分析,再导回地图做可视化(避坑数据丢失) 在空间数据分析领域,QGIS作为开源GIS软件的标杆,其属性表与Excel的双向交互能力常被低估。许多用户习惯将空间数据的属性导出至…...

二进制逆向新选择:Binary Ninja核心功能与实战指南

二进制逆向新选择:Binary Ninja核心功能与实战指南 【免费下载链接】deprecated-binaryninja-python Deprecated Binary Ninja prototype written in Python 项目地址: https://gitcode.com/gh_mirrors/de/deprecated-binaryninja-python 一、定位解析&#…...

雷达信号处理中的‘模糊函数’到底是什么?用Python仿真LFM信号的距离多普勒耦合现象

雷达信号处理中的‘模糊函数’到底是什么?用Python仿真LFM信号的距离多普勒耦合现象 雷达信号处理中,匹配滤波器的性能直接影响目标检测的精度。当目标存在径向运动时,回波信号会产生多普勒频移,导致匹配滤波器出现失配。描述这种…...

汽车电子开发必看:OBD接口中的CAN总线实战指南(附STM32代码)

汽车电子开发实战:OBD接口CAN总线通信与STM32应用解析 1. 汽车电子开发者的CAN总线技术入门 在汽车电子开发领域,CAN总线技术已经成为现代车辆通信系统的核心支柱。这种可靠的串行通信协议最初由博世公司在1980年代开发,专门用于解决汽车内部…...

地瓜派RDK X5部署YOLOv11n避坑指南:手把手教你解决Softmax算子导致的性能暴跌问题

地瓜派RDK X5部署YOLOv11n性能优化实战:从7FPS到47FPS的完整解决方案 当我在RDK X5开发板上首次部署YOLOv11n模型时,7FPS的推理速度让我陷入了深深的困惑。同样的硬件平台,YOLOv5s能跑180FPS,而参数更少的YOLOv11n却只有个位数的帧…...

Sony-PMCA-RE:索尼相机自定义功能解锁与固件安全操作指南

Sony-PMCA-RE:索尼相机自定义功能解锁与固件安全操作指南 【免费下载链接】Sony-PMCA-RE Reverse Engineering Sony Digital Cameras 项目地址: https://gitcode.com/gh_mirrors/so/Sony-PMCA-RE 索尼相机逆向工具Sony-PMCA-RE是一款强大的开源工具&#xff…...

从Linux驱动到HDF框架:手把手教你将CH9344 USB串口驱动适配OpenHarmony 4.0

从Linux到OpenHarmony:CH9344 USB串口驱动HDF适配全解析 当传统Linux驱动遇上新兴的OpenHarmony HDF框架,技术迁移的挑战与机遇并存。本文将深入探讨如何将成熟的CH9344 USB转串口驱动无缝迁移至OpenHarmony 4.0平台,为开发者提供一套可复用的…...

RetDec反编译工具全攻略:从入门到精通的逆向工程实践指南

RetDec反编译工具全攻略:从入门到精通的逆向工程实践指南 【免费下载链接】retdec RetDec is a retargetable machine-code decompiler based on LLVM. 项目地址: https://gitcode.com/gh_mirrors/re/retdec 一、认知层:解密RetDec的核心价值与技…...

如何轻松备份你的QQ空间回忆?GetQzonehistory三步搞定完整导出

如何轻松备份你的QQ空间回忆?GetQzonehistory三步搞定完整导出 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾担心那些记录青春时光的QQ空间说说会随着时间消失&am…...

Mac风扇控制开源工具:解决散热难题的完整方案——如何让你的Intel Mac运行更凉爽

Mac风扇控制开源工具:解决散热难题的完整方案——如何让你的Intel Mac运行更凉爽 【免费下载链接】smcFanControl Control the fans of every Intel Mac to make it run cooler 项目地址: https://gitcode.com/gh_mirrors/smc/smcFanControl 问题诊断&#x…...

3步解决Realtek 8922AE WiFi 7网卡驱动固件不匹配实战指南

3步解决Realtek 8922AE WiFi 7网卡驱动固件不匹配实战指南 【免费下载链接】rtw89 Driver for Realtek 8852AE, an 802.11ax device 项目地址: https://gitcode.com/gh_mirrors/rt/rtw89 文章目录 【问题定位】WiFi 7网卡驱动加载失败的核心原因【环境诊断】三层级驱动问…...

让 AI Agent “睡觉”整理记忆(非常详细),OpenClaw Auto-Dream 实战从入门到精通,收藏这一篇就够了!

你有没有遇到过这样的情况:辛辛苦苦教会了 AI Agent 你的工作习惯和项目背景,关掉窗口、重启会话后,它又变回了一张白纸?这是当前所有基于 LLM(大语言模型)的 Agent 面临的核心痛点——“聊完就忘”。2026 …...

乙巳马年春联生成终端操作界面美化:Web前端开发技巧分享

乙巳马年春联生成终端操作界面美化:Web前端开发技巧分享 每次看到那些功能强大但界面简陋的工具,我总在想,如果能给它换上一身漂亮的“衣服”,用起来该多舒服。最近,我就把一个简单的春联生成API调用页面,…...

如何高效管理ExHentai漫画收藏:终极标签化管理解决方案

如何高效管理ExHentai漫画收藏:终极标签化管理解决方案 【免费下载链接】exhentai-manga-manager ExHentai本地漫画标签管理阅读应用, ExHentai local manga tag-manager and reader 项目地址: https://gitcode.com/gh_mirrors/ex/exhentai-manga-manager 你…...

Mermaid终极指南:用代码绘制专业图表的完整教程

Mermaid终极指南:用代码绘制专业图表的完整教程 【免费下载链接】mermaid Generation of diagrams like flowcharts or sequence diagrams from text in a similar manner as markdown 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid 你是否曾经…...

告别终端断开烦恼:nohup命令的完整使用指南(含日志管理技巧)

告别终端断开烦恼:nohup命令的完整使用指南(含日志管理技巧) 你是否遇到过这样的场景:在服务器上启动一个耗时任务,突然网络波动导致SSH连接断开,所有进度前功尽弃?作为开发者,这种经…...