入门实践工程十一:人脸识别门禁系统(基于 face_recognition)~附:安装依赖库及工程源码
别再死磕枯燥理论了AI 时代拿实战作品说话才是硬道理原创不易哈希望可以帮到还有些许学习劲儿的同学们【进阶版还在创作中耗费精力中……】跳转到专栏目录你学习更有方向和思路……入门实践工程十一人脸识别门禁系统基于 face_recognition~附:安装依赖库及工程源码简介基于face_recognition库先对录入人员照片做特征编码入库再用摄像头或图片识别已知人员并标记姓名实现简易门禁/考勤 Demo支持多人脸同时识别理解「人脸检测→特征编码→余弦相似度匹配」链路。工程详细介绍核心思想人脸识别 检测 特征编码 比对。先用预训练模型把人脸映射为 128 维嵌入同一人相近、不同人远离再把待识别人脸嵌入与入库嵌入做距离比对最近且过阈即判定身份是「度量学习」的典型应用。实现方法数据 / 输入人员库照片known_faces/文件名即人名 待识别图片或摄像头。模型face_recognition基于 dlib 的 ResNet 人脸嵌入模型。流程register 模式把人员照编码入库识别时对图片做人脸检测 编码 → compare_faces 逐个比对待选嵌入tolerance0.6→ 匹配则标名、未知标红摄像头模式逐帧实时框选–demo 下载示例数据自动跑通。输出每张人脸身份 绿/红框标注图。目录结构11_face_recognition/ ├── main.py # 录入 / 图片识别 / 摄像头识别主程序 ├── requirements.txt ├── known_faces/ # 人员库文件名即人员名如 张三.jpg └── output/ └── recognized.jpg # 标注结果图正确安装face_recognition依赖dlibWindows 上安装较麻烦# 需先安装 CMake 和 Visual Studio Build ToolsC 桌面开发组件pipinstallcmake pipinstalldlib pipinstallface_recognition opencv-python若 dlib 编译失败可改用 condaconda install -c conda-forge dlib face_recognition运行方式# 一键 Demo下载示例人物(Obama/Biden)合照自动跑通python main.py--demo# 录入人员python main.py--register张三 path/to/zhangsan.jpg# 识别图片中的人脸python main.py--imagetest.jpg# 摄像头实时识别按 q 退出python main.py--camera预期结果控制台逐张打印识别出的人员名未知则标「未知人员」生成output/recognized.jpg绿框(已知)/红框(未知) 姓名标注扩展方向换用 InsightFace / ArcFace 提升精度与速度增加活体检测眨眼/转头检测防照片攻击接入数据库做考勤打卡记录 Web 后台工程源码main.py 入门实践工程十一人脸识别门禁系统基于 face_recognition 流程对录入人员照片做特征编码入库 - 摄像头/图片中实时识别已知人员 - 标记姓名。 支持多人脸同时识别实现简易门禁/考勤 Demo。 命令 python main.py --register 张三 person1.jpg # 录入人员名字 照片 python main.py --image test.jpg # 识别图片中的人脸 python main.py --camera # 摄像头实时识别按 q 退出 python main.py --demo # 下载示例人物合照自动跑通 人员库保存在 known_faces/ 目录每张图文件名即人员名。 importargparseimportosimportsys BASE_DIRos.path.dirname(os.path.abspath(__file__))KNOWN_DIRos.path.join(BASE_DIR,known_faces)OUT_DIRos.path.join(BASE_DIR,output)defregister(name:str,image_path:str):importshutil os.makedirs(KNOWN_DIR,exist_okTrue)ifnotos.path.exists(image_path):print(f[错误] 图片不存在:{image_path})sys.exit(1)extos.path.splitext(image_path)[1]or.jpgdstos.path.join(KNOWN_DIR,f{name}{ext})shutil.copy(image_path,dst)# 验证能检测到人脸importface_recognition imgface_recognition.load_image_file(dst)encsface_recognition.face_encodings(img)ifnotencs:print(f[警告] 未在图片中检测到人脸请更换清晰正面照:{dst})returnprint(f已录入人员 [{name}] -{dst}检测到{len(encs)}张人脸采用第 1 张)defload_known_encodings():importface_recognitionifnotos.path.isdir(KNOWN_DIR)ornotos.listdir(KNOWN_DIR):print([提示] 人员库为空。请先录入人员)print( python main.py --register 张三 photo.jpg)print( 或运行 python main.py --demo 下载示例数据)return[],[]names,encodings[],[]forfnameinos.listdir(KNOWN_DIR):fpathos.path.join(KNOWN_DIR,fname)nameos.path.splitext(fname)[0]imgface_recognition.load_image_file(fpath)encsface_recognition.face_encodings(img)ifencs:names.append(name)encodings.append(encs[0])print(f已加载{len(names)}位人员:{, .join(names)})returnnames,encodingsdefrecognize_image(image_path:str,names,encodings):importcv2importface_recognition imageface_recognition.load_image_file(image_path)locsface_recognition.face_locations(image)encsface_recognition.face_encodings(image,locs)print(f\n检测到{len(locs)}张人脸)results[]fori,encinenumerate(encs):matchesface_recognition.compare_faces(encodings,enc,tolerance0.6)name未知人员ifTrueinmatches:namenames[matches.index(True)]results.append(name)print(f 人脸{i1}:{name})# 标注并保存image_bgrcv2.cvtColor(image,cv2.COLOR_RGB2BGR)for(top,right,bottom,left),nameinzip(locs,results):color(0,255,0)ifname!未知人员else(0,0,255)cv2.rectangle(image_bgr,(left,top),(right,bottom),color,2)cv2.rectangle(image_bgr,(left,bottom-25),(right,bottom),color,cv2.FILLED)cv2.putText(image_bgr,name,(left4,bottom-6),cv2.FONT_HERSHEY_SIMPLEX,0.7,(255,255,255),1)os.makedirs(OUT_DIR,exist_okTrue)out_pathos.path.join(OUT_DIR,recognized.jpg)cv2.imwrite(out_path,image_bgr)print(f\n标注结果已保存到:{out_path})defrecognize_camera(names,encodings):importcv2importface_recognition capcv2.VideoCapture(0)print(摄像头已开启按 q 退出 ...)whileTrue:ret,framecap.read()ifnotret:breaksmallcv2.resize(frame,(0,0),fx0.5,fy0.5)rgbsmall[:,:,::-1]locsface_recognition.face_locations(rgb)encsface_recognition.face_encodings(rgb,locs)for(top,right,bottom,left),encinzip(locs,encs):matchesface_recognition.compare_faces(encodings,enc,tolerance0.6)namenames[matches.index(True)]ifTrueinmatcheselse未知top,right,bottom,lefttop*2,right*2,bottom*2,left*2color(0,255,0)ifname!未知else(0,0,255)cv2.rectangle(frame,(left,top),(right,bottom),color,2)cv2.putText(frame,name,(left,top-8),cv2.FONT_HERSHEY_SIMPLEX,0.7,color,2)cv2.imshow(Face Recognition (press q),frame)ifcv2.waitKey(1)0xFFord(q):breakcap.release()cv2.destroyAllWindows()defdownload_demo():下载示例人物照 合照自动录入并识别。importurllib.requestimportshutil basehttps://raw.githubusercontent.com/ageitgey/face_recognition/master/examples/samples{obama.jpg:obama,biden.jpg:biden}test_filetwo_people.jpgprint(下载示例人物照片到人员库 ...)os.makedirs(KNOWN_DIR,exist_okTrue)forfname,nameinsamples.items():dstos.path.join(KNOWN_DIR,f{name}.jpg)ifnotos.path.exists(dst):try:urllib.request.urlretrieve(basefname,dst)print(f 下载{fname}-{dst})exceptExceptionase:print(f[错误] 下载失败{fname}:{e})print(请手动将清晰正面照放入 known_faces/ 目录文件名即人员名)sys.exit(1)test_pathos.path.join(BASE_DIR,test_file)ifnotos.path.exists(test_path):try:urllib.request.urlretrieve(basetest_file,test_path)print(f 下载{test_file}-{test_path})exceptExceptionase:print(f[错误] 下载测试图失败:{e})print(请用 --image 指定本地测试图片)sys.exit(1)names,encodingsload_known_encodings()recognize_image(test_path,names,encodings)defmain():parserargparse.ArgumentParser()parser.add_argument(--register,nargs2,metavar(NAME,IMAGE),help录入人员名字 照片路径)parser.add_argument(--image,typestr,help识别指定图片中的人脸)parser.add_argument(--camera,actionstore_true,help摄像头实时识别)parser.add_argument(--demo,actionstore_true,help下载示例数据并自动跑通)argsparser.parse_args()ifargs.register:register(args.register[0],args.register[1])returnifargs.demo:download_demo()returnnames,encodingsload_known_encodings()ifnotnames:sys.exit(0)ifargs.image:recognize_image(args.image,names,encodings)elifargs.camera:recognize_camera(names,encodings)else:print(请指定操作--register / --image / --camera / --demo 之一-h 查看帮助)if__name____main__:main()

相关新闻

政府网站也会“帮黑客传毒”?揭秘隐藏在权威域名背后的网络陷阱

政府网站也会“帮黑客传毒”?揭秘隐藏在权威域名背后的网络陷阱

最新内容请微.信搜索公.众.号阅读在日常上网时,大部分人都有一个固有的安全观念:只要网址以 “.gov”(政府机构)或 “.jus”(司法机构)结尾,或者收到的邮件来自官方政务邮箱,那就是绝…

2026/10/20 11:36:50 阅读更多 →
Excel数据合并实战:解决多表列名、顺序、数量不一致难题

Excel数据合并实战:解决多表列名、顺序、数量不一致难题

1. 项目概述:当混乱的Excel数据遇上“列不一致”的难题 如果你也经常需要处理来自不同部门、不同系统导出的Excel表格,并且每次打开都发现表头对不上、列顺序混乱、甚至有些列有有些列没有,那你一定懂这种头疼。这不仅仅是简单的复制粘贴能解…

2026/10/20 15:46:51 阅读更多 →
美国拟立法监管大模型:当AI“失控”时要给它拔电源?

美国拟立法监管大模型:当AI“失控”时要给它拔电源?

最新内容请微.信搜索公.众.号阅读 你有没有想过,如果有一天人工智能(AI)突然出现严重故障或自主“暴走”,甚至尝试拒绝人类的关机命令,人类该怎么办? 这不是科幻电影里的《终结者》剧情,而是正…

2026/10/20 4:09:14 阅读更多 →

最新新闻

H3-Base快速出片指南:三大优化路线实测与选型建议

H3-Base快速出片指南:三大优化路线实测与选型建议

H3-Base开源那几天,技术群里最热闹的话题反而不是模型结构有多惊艳,而是怎么让它快速出片。我说的出片不是生成图片和视频,而是指在工程上尽快把模型跑起来、跑得快、跑得省,最终拿到能交付的结果——比如长文本摘要、结构化信息抽…

2026/10/20 21:35:13 阅读更多 →
文化遗产数字化平台建设:从三维重建到数据管理全流程实践

文化遗产数字化平台建设:从三维重建到数据管理全流程实践

从搞文化遗产数字化开始,身边的同行问得最多的问题不是“用什么设备扫描”,而是“数据拿到手之后怎么办”。很多人以为把文物扫描成三维模型就算完成数字化了,实际上那只开了个头。单个模型文件、散落的高清照片、勘察记录、修复档案&#xf…

2026/10/20 21:35:13 阅读更多 →
OpenCV ROI完全指南:从基础概念到实战避坑

OpenCV ROI完全指南:从基础概念到实战避坑

先从一个特别常见的场景说起:你在做人脸识别项目,摄像头拍到一帧1080p画面,画面里除了人脸还有桌子、窗户、路人。你要是把人脸检测算法跑在全图上,速度慢不说,误检率也压不住。这时候你需要的不是“整张图一起处理”&…

2026/10/20 21:35:13 阅读更多 →
Vina Moxii 实战:清单化产物分发与跨平台同步安装指南

Vina Moxii 实战:清单化产物分发与跨平台同步安装指南

1. 项目全貌与选型思考第一次看到 "Vina Moxii: A Developers Deep-Dive Review and Installation Guide - Download" 这个标题时,我第一反应是:这多半又是一个被 README 包装得花里胡哨、实际上手处处是坑的开发者工具包。这类项目我见太多了…

2026/10/20 21:35:13 阅读更多 →
盲图像质量评估:用高斯混合分布实现无参考打分

盲图像质量评估:用高斯混合分布实现无参考打分

1. 这个标题到底在解决什么“看不见”的问题?“Blind Image Quality Assessment by Gaussian Mixture Distribution”——光看这个标题,很多人第一反应是:又一个堆砌术语的论文名。但如果你真在图像处理、内容审核或AI生成内容(AI…

2026/10/20 21:35:13 阅读更多 →
Canvas截取视频首帧作为封面:前端零成本方案与实战避坑

Canvas截取视频首帧作为封面:前端零成本方案与实战避坑

1. 为什么视频封面首帧截取是个高频刚需做过内容平台或者带视频功能的项目的人都知道&#xff0c;视频列表页如果直接放一个<video>标签去加载&#xff0c;页面性能会崩得很难看。几十个视频同时开始加载元数据和首帧&#xff0c;带宽和内存直接爆炸&#xff0c;尤其在移…

2026/10/20 21:34:09 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →