入门实践工程十一:人脸识别门禁系统(基于 face_recognition)~附:安装依赖库及工程源码

发布时间:2026/9/28 2:51:06

入门实践工程十一:人脸识别门禁系统(基于 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()
延伸阅读

更多相关文章

2026/9/26 7:36:39

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

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

2026/9/27 1:39:44

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

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

2026/9/28 2:47:11

番禺区网站建设选哪家好

番禺网站建设避坑:不懂代码也能搞定源码部署与备案 自己不会写代码,却想给公司做个像样的官网?在番禺找网站建设公司时,是不是怕被坑得连底裤都不剩?别慌,今天咱们不聊虚的,直接拆解怎么把“源码下载”和服务器部署这两件头疼事,变成你创业路上的加分…

2026/9/28 2:47:11

CNN并行计算实战:DDP数据并行、调参与排障全指南

简介:CNN并行计算代码(Python版本)压缩包面向深度学习开发者与CNN学习者,重点演示如何利用多GPU与分布式策略加速卷积神经网络训练。项目涵盖数据并行、模型并行、张量并行及Horovod等主流并行方案,并整合TensorFlow、…

2026/9/28 2:42:11

TSC TTP244Pro不走纸?三步强制复位原理与实操指南

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

2026/9/27 0:00:45

东莞市品牌网站建设报价常见报错与解决

东莞品牌网站建设报价单背后:一份保姆级建站教程避坑实录 网站做好了没人访问,这大概是很多老板最头疼的事。花了大几万做的品牌站,上线后流量惨淡,比路边摊还冷清。别急着骂外包公司,很多“东莞品牌网站建设报价”里藏着不少猫腻,比如用模板站冒充定制…

2026/9/27 0:00:45

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/27 0:00:45

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/28 0:02:03

广州外贸网站建设推广:从零搭建全流程拆解与真实报价避坑

广州外贸网站建设推广:从零搭建全流程拆解与真实报价避坑 改个需求建站公司拖一周,后台改个文案还得再交一笔“技术维护费”。这种憋屈事儿,做外贸的朋友太熟悉了。很多老板在找广州外贸网站建设推广服务商时,光盯着首页好不好看,却忽略了从零搭建一个能…

2026/9/28 0:02:04

搞懂百度竞价推广价格,网站性能优化别掉链子

搞懂百度竞价推广价格,网站性能优化别掉链子 网站突然打不开,浏览器弹出红色警告“此网站存在安全风险”,后台一看全是乱码代码和奇怪的跳转链接。这种网站被黑挂马的绝望感,很多刚转行做网站的朋友都经历过,尤其是那些为了省几百块钱服务器费用的新手。…

2026/9/25 20:55:38

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/26 19:58:38

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/28 1:59:25

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑