手把手教你搭建完整Python人脸识别系统
手把手教你搭建完整Python人脸识别系统
前言
人脸识别的核心流程分为 人脸检测 → 人脸特征提取 → 人脸比对识别 三大核心步骤,Python凭借成熟的库生态可以完美落地这套流程,本文抛弃纯理论,全程用可运行代码实现,从环境搭建、基础检测到完整实战项目,每一个环节都对应完整代码,所有代码均可直接复制运行,配套标准化项目结构,零基础也能直接上手,最终实现「实时摄像头人脸识别、批量图片识别、人脸库比对、1:1验证、1:N检索」全套功能,文末附完整项目整合代码。


- 手把手教你搭建完整Python人脸识别系统
-
- 前言
- 一、前置准备:环境安装+标准化项目结构(必做,代码运行基础)
-
- ✅ 1. 一键安装所有依赖库(复制执行即可)
- ✅ 2. 标准化项目目录结构(手动创建,严格对应,避免路径报错)
- 二、第一步:人脸检测(核心代码,2种场景:图片检测+摄像头实时检测)
-
- ✅ 核心功能:识别图片/视频帧中「人脸的位置」,返回人脸坐标并绘制矩形框,解决「有没有人脸、人脸在哪」的问题
- 场景1:单张图片人脸检测(完整可运行代码)
- 场景2:电脑摄像头实时人脸检测(完整可运行代码,最常用)
- 三、第二步:人脸特征提取(核心核心,生成128维人脸编码,纯代码实现)
-
- ✅ 核心原理
- ✅ 完整可运行代码(图片人脸编码提取+特征点可视化)
- 四、第三步:构建人脸数据库(序列化存储,避免重复生成编码,纯代码)
-
- ✅ 核心需求
- ✅ 完整可运行代码(生成人脸库+加载人脸库,2合1)
- 五、第四步:核心功能实现(4个高频场景,纯代码,全部可运行)
-
- ✅ 场景1:1:1人脸验证(一对一比对,比如身份核验、人脸解锁)
- ✅ 场景2:1:N人脸识别(一对多检索,核心场景:考勤、门禁、打卡)
- ✅ 场景3:摄像头实时人脸识别(终极常用功能,考勤/门禁核心)
- ✅ 场景4:批量处理文件夹内所有图片(批量识别,相册分类)
- 六、第五步:高级功能实现(纯代码,解决实际问题,提升项目实用性)
-
- ✅ 功能1:戴口罩人脸识别(适配遮挡场景,高实用性)
- ✅ 功能2:活体检测(防照片/视频欺骗,考勤必备防作弊)
- 七、完整项目整合版(main.py,一键运行,所有功能集成)
- 最后:运行须知+常见问题解决
-
- ✅ 运行前必做2件事
- ✅ 常见问题解决
- 总结
一、前置准备:环境安装+标准化项目结构(必做,代码运行基础)
✅ 1. 一键安装所有依赖库(复制执行即可)
# 核心必备库(所有功能依赖,无版本冲突)
pip install opencv-python==4.8.1.78 dlib==19.24.2 face-recognition==1.3.0 numpy==1.26.2
# 可选扩展库(序列化存储+中文显示+文件操作)
pip install pickle pillow
说明:
face-recognition底层封装了dlib的核心算法,是本次开发的核心库,一行代码实现人脸编码;OpenCV负责图像/视频读取、绘制框选;numpy负责数值计算。
✅ 2. 标准化项目目录结构(手动创建,严格对应,避免路径报错)
face_recognition_system/
├── data/
│ ├── known_faces/ # 存放已知人脸【必须自己放照片】,命名格式:姓名_1.jpg 姓名_2.jpg
│ ├── unknown_faces/ # 存放待识别的图片/视频
│ └── save_result/ # 识别结果自动保存目录
├── model_data/ # 存放特征编码缓存文件,不用重复生成
├── core_code/ # 本文所有分步代码都放这里
└── main.py # 完整整合版项目入口文件
关键提示:
known_faces文件夹中放入你要录入的人脸照片,比如张三.jpg、李四.jpg,单人建议放2-3张不同角度的照片,提升识别准确率。
二、第一步:人脸检测(核心代码,2种场景:图片检测+摄像头实时检测)
✅ 核心功能:识别图片/视频帧中「人脸的位置」,返回人脸坐标并绘制矩形框,解决「有没有人脸、人脸在哪」的问题
场景1:单张图片人脸检测(完整可运行代码)
# face_detect_img.py
import cv2
import face_recognition
# 1. 加载图片(修改为你的图片路径)
img_path = "./data/unknown_faces/test1.jpg"
img = face_recognition.load_image_file(img_path)
# 转成OpenCV的BGR格式(face_recognition用RGB,OpenCV用BGR,必须转换)
img_cv = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)
# 2. 核心:人脸检测,获取所有人脸的坐标 (top, right, bottom, left)
face_locations = face_recognition.face_locations(img)
# 3. 遍历检测到的人脸,绘制矩形框+标注人脸序号
for index, (top, right, bottom, left) in enumerate(face_locations):
# 绘制人脸矩形框:cv2.rectangle(图片, 左上角, 右下角, 颜色, 线条宽度)
cv2.rectangle(img_cv, (left, top), (right, bottom), (0, 255, 0), 2)
# 标注人脸序号
cv2.putText(img_cv, f"Face {index+1}", (left, top-10), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0,255,0), 2)
# 4. 显示结果+保存结果
cv2.imshow("人脸检测结果", img_cv)
cv2.imwrite("./data/save_result/face_detect_result.jpg", img_cv)
# 等待按键关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()
print(f"检测到 {len(face_locations)} 张人脸")
场景2:电脑摄像头实时人脸检测(完整可运行代码,最常用)
# face_detect_camera.py
import cv2
import face_recognition
# 1. 初始化摄像头,0=电脑自带摄像头,1=外接摄像头
cap = cv2.VideoCapture(0)
# 设置摄像头分辨率
cap.set(3, 640)
cap.set(4, 480)
print("摄像头已启动,按 'q' 退出...")
while True:
# 2. 读取摄像头每一帧
ret, frame = cap.read()
if not ret:
break
# 3. 实时检测人脸
face_locations = face_recognition.face_locations(frame)
# 4. 绘制人脸框
for (top, right, bottom, left) in face_locations:
cv2.rectangle(frame, (left, top), (right, bottom), (0, 255, 0), 2)
# 5. 显示画面
cv2.imshow("实时人脸检测", frame)
# 按 q 键退出循环
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 释放摄像头+关闭窗口
cap.release()
cv2.destroyAllWindows()
三、第二步:人脸特征提取(核心核心,生成128维人脸编码,纯代码实现)
✅ 核心原理
每个人的人脸会被转化为 唯一的128维特征向量(人脸编码),这是人脸识别的核心:同一个人无论表情、角度、轻微遮挡,编码高度相似;不同人编码差异极大。
face_recognition 一行代码即可完成「检测人脸+提取编码」,无需手动处理特征点,底层自动完成dlib 68点特征对齐+标准化处理。
✅ 完整可运行代码(图片人脸编码提取+特征点可视化)
# face_encoding.py
import cv2
import face_recognition
import numpy as np
# 1. 加载人脸图片(已知人脸,用于录入库)
img_path = "./data/known_faces/张三.jpg"
img = face_recognition.load_image_file(img_path)
img_cv = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)
# 2. 核心1:检测人脸位置
face_locations = face_recognition.face_locations(img)
# 3. 核心2:提取人脸128维编码【重中之重】
face_encodings = face_recognition.face_encodings(img, face_locations)
# 4. 可视化:绘制人脸特征点(68个关键点)
face_landmarks_list = face_recognition.face_landmarks(img)
for face_landmarks in face_landmarks_list:
# 遍历所有特征点部位:眼睛、眉毛、鼻子、嘴巴、轮廓
for facial_feature in face_landmarks.keys():
for point in face_landmarks[facial_feature]:
cv2.circle(img_cv, point, 2, (255, 0, 0), -1)
# 5. 打印编码信息
print(f"检测到人脸编码数量:{len(face_encodings)}")
print(f"128维人脸编码示例:\n{face_encodings[0][:10]}...") # 只打印前10个值
print(f"编码数据类型:{type(face_encodings[0])},编码长度:{len(face_encodings[0])}")
# 显示结果
cv2.imshow("人脸特征点+编码提取", img_cv)
cv2.imwrite("./data/save_result/face_landmarks.jpg", img_cv)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 6. 编码相似度计算(欧氏距离:核心比对算法)
# 原理:两个人脸编码的欧氏距离 < 0.6 → 同一个人;>0.6 → 不同人
def compare_face_encoding(encode1, encode2):
# 计算欧氏距离
distance = np.linalg.norm(encode1 - encode2)
return distance, "同一个人" if distance < 0.6 else "不同人"
# 测试:加载另一张张三的照片,比对编码
img_test = face_recognition.load_image_file("./data/known_faces/张三_2.jpg")
encode_test = face_recognition.face_encodings(img_test)[0]
distance, result = compare_face_encoding(face_encodings[0], encode_test)
print(f"\n两张照片比对结果:{result},欧氏距离:{distance:.3f}")
四、第三步:构建人脸数据库(序列化存储,避免重复生成编码,纯代码)
✅ 核心需求
每次运行识别程序,都重新提取已知人脸的编码会浪费时间,我们将 姓名+人脸编码 永久保存到文件中,下次直接加载即可,推荐使用pickle序列化存储,轻量、速度快,适合中小型项目。
✅ 完整可运行代码(生成人脸库+加载人脸库,2合1)
# face_database.py
import face_recognition
import pickle
import os
# -------------------------- 配置项 --------------------------
KNOWN_FACES_DIR = "./data/known_faces" # 已知人脸目录
SAVE_ENCODE_PATH = "./model_data/face_encodings.pkl" # 编码保存路径
# -----------------------------------------------------------
def create_face_database():
"""生成人脸数据库:遍历已知人脸,提取编码并保存"""
known_face_names = [] # 存储姓名
known_face_encodings = [] # 存储对应编码
# 遍历已知人脸文件夹下的所有图片
for filename in os.listdir(KNOWN_FACES_DIR):
if filename.endswith((".jpg", ".png", ".jpeg")):
# 获取姓名(文件名前缀)
name = os.path.splitext(filename)[0]
# 加载图片+提取编码
img_path = os.path.join(KNOWN_FACES_DIR, filename)
img = face_recognition.load_image_file(img_path)
face_encodings = face_recognition.face_encodings(img)
if len(face_encodings) > 0:
known_face_names.append(name)
known_face_encodings.append(face_encodings[0])
print(f"已录入:{name}")
# 序列化保存到文件
with open(SAVE_ENCODE_PATH, "wb") as f:
pickle.dump([known_face_names, known_face_encodings], f)
print(f"\n人脸数据库创建完成!共录入 {len(known_face_names)} 人")
return known_face_names, known_face_encodings
def load_face_database():
"""加载人脸数据库:直接读取保存的编码,无需重新提取"""
if not os.path.exists(SAVE_ENCODE_PATH):
print("人脸数据库不存在,正在创建...")
return create_face_database()
with open(SAVE_ENCODE_PATH, "rb") as f:
known_face_names, known_face_encodings = pickle.load(f)
print(f"人脸数据库加载完成!共加载 {len(known_face_names)} 人")
return known_face_names, known_face_encodings
# 测试运行
if __name__ == "__main__":
# 生成并加载人脸库
names, encodings = load_face_database()
五、第四步:核心功能实现(4个高频场景,纯代码,全部可运行)
✅ 场景1:1:1人脸验证(一对一比对,比如身份核验、人脸解锁)
# face_verify_1v1.py
import face_recognition
# 1. 加载两张待比对的人脸
img1_path = "./data/known_faces/张三.jpg" # 本人照片
img2_path = "./data/unknown_faces/verify_1.jpg" # 待验证照片
# 2. 提取两张人脸的编码
img1 = face_recognition.load_image_file(img1_path)
img2 = face_recognition.load_image_file(img2_path)
encode1 = face_recognition.face_encodings(img1)[0]
encode2 = face_recognition.face_encodings(img2)[0]
# 3. 核心:1:1验证(返回布尔值,True=同一个人,False=不同人)
result = face_recognition.compare_faces([encode1], encode2, tolerance=0.6)[0]
# 计算相似度(欧氏距离)
distance = face_recognition.face_distance([encode1], encode2)[0]
# 打印结果
print(f"是否为同一个人:{result}")
print(f"人脸相似度距离:{distance:.3f} (阈值0.6,越小越相似)")
✅ 场景2:1:N人脸识别(一对多检索,核心场景:考勤、门禁、打卡)
# face_recognition_1vn.py
import face_recognition
import cv2
from face_database import load_face_database
# 1. 加载人脸数据库(姓名+编码)
known_names, known_encodings = load_face_database()
# 2. 加载待识别图片
img_path = "./data/unknown_faces/test_group.jpg"
img = face_recognition.load_image_file(img_path)
img_cv = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)
# 3. 检测待识别图片中的所有人脸+提取编码
face_locs = face_recognition.face_locations(img)
face_encs = face_recognition.face_encodings(img, face_locs)
# 4. 遍历每一个检测到的人脸,与数据库比对
for face_loc, face_enc in zip(face_locs, face_encs):
top, right, bottom, left = face_loc
# 核心:与数据库所有编码比对
matches = face_recognition.compare_faces(known_encodings, face_enc)
face_dist = face_recognition.face_distance(known_encodings, face_enc)
# 获取最相似的人脸索引
best_match_idx = face_dist.argmin()
# 判定识别结果
if matches[best_match_idx]:
name = known_names[best_match_idx]
confidence = f"{(1 - face_dist[best_match_idx])*100:.1f}%"
else:
name = "陌生人"
confidence = "0%"
# 绘制识别结果:矩形框+姓名+置信度
cv2.rectangle(img_cv, (left, top), (right, bottom), (0,255,0), 2)
cv2.rectangle(img_cv, (left, bottom-30), (right, bottom), (0,255,0), -1)
cv2.putText(img_cv, f"{name} {confidence}", (left+5, bottom-5),
cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255,255,255), 2)
# 保存+显示结果
cv2.imwrite("./data/save_result/1vn_recognition.jpg", img_cv)
cv2.imshow("1:N人脸识别结果", img_cv)
cv2.waitKey(0)
cv2.destroyAllWindows()
✅ 场景3:摄像头实时人脸识别(终极常用功能,考勤/门禁核心)
# face_recognition_camera.py
import cv2
import face_recognition
from face_database import load_face_database
# 1. 初始化配置
known_names, known_encodings = load_face_database()
cap = cv2.VideoCapture(0)
cap.set(3, 640)
cap.set(4, 480)
print("实时人脸识别已启动,按 'q' 退出...")
while True:
ret, frame = cap.read()
if not ret: break
# 2. 检测人脸+提取编码
face_locs = face_recognition.face_locations(frame)
face_encs = face_recognition.face_encodings(frame, face_locs)
# 3. 比对识别
for face_loc, face_enc in zip(face_locs, face_encs):
top, right, bottom, left = face_loc
matches = face_recognition.compare_faces(known_encodings, face_enc)
face_dist = face_recognition.face_distance(known_encodings, face_enc)
best_idx = face_dist.argmin()
if matches[best_idx]:
name = known_names[best_idx]
color = (0,255,0) # 绿色框:已识别
else:
name = "陌生人"
color = (0,0,255) # 红色框:陌生人
# 绘制结果
cv2.rectangle(frame, (left, top), (right, bottom), color, 2)
cv2.rectangle(frame, (left, bottom-30), (right, bottom), color, -1)
cv2.putText(frame, name, (left+5, bottom-5), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255,255,255), 2)
# 显示画面
cv2.imshow("实时人脸识别系统", frame)
if cv2.waitKey(1) & 0xFF == ord('q'): break
# 释放资源
cap.release()
cv2.destroyAllWindows()
✅ 场景4:批量处理文件夹内所有图片(批量识别,相册分类)
# face_batch_recognition.py
import face_recognition
import cv2
import os
from face_database import load_face_database
# 配置项
UNKNOWN_DIR = "./data/unknown_faces"
SAVE_DIR = "./data/save_result/batch_result"
known_names, known_encodings = load_face_database()
# 创建保存目录
if not os.path.exists(SAVE_DIR):
os.makedirs(SAVE_DIR)
# 遍历所有待识别图片
for filename in os.listdir(UNKNOWN_DIR):
if filename.endswith((".jpg", ".png", ".jpeg")):
img_path = os.path.join(UNKNOWN_DIR, filename)
img = face_recognition.load_image_file(img_path)
img_cv = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)
# 检测+识别
face_locs = face_recognition.face_locations(img)
face_encs = face_recognition.face_encodings(img, face_locs)
for face_loc, face_enc in zip(face_locs, face_encs):
top, right, bottom, left = face_loc
face_dist = face_recognition.face_distance(known_encodings, face_enc)
best_idx = face_dist.argmin()
name = known_names[best_idx] if face_dist[best_idx]<0.6 else "陌生人"
cv2.rectangle(img_cv, (left, top), (right, bottom), (0,255,0), 2)
cv2.putText(img_cv, name, (left, top-10), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0,255,0), 2)
# 保存结果
cv2.imwrite(os.path.join(SAVE_DIR, filename), img_cv)
print(f"已处理:{filename} → 保存至{save_dir}")
print("批量识别完成!所有结果已保存到指定目录")
六、第五步:高级功能实现(纯代码,解决实际问题,提升项目实用性)
✅ 功能1:戴口罩人脸识别(适配遮挡场景,高实用性)
# face_recognition_mask.py
import cv2
import face_recognition
def mask_face_recognition(img_path):
"""戴口罩人脸识别:聚焦眼睛区域特征,兼容遮挡"""
img = face_recognition.load_image_file(img_path)
img_cv = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)
# 核心:强制检测人脸(即使下半张脸被遮挡)
face_locs = face_recognition.face_locations(img, model="cnn") # cnn模型检测精度更高
face_encs = face_recognition.face_encodings(img, face_locs)
for top, right, bottom, left in face_locs:
cv2.rectangle(img_cv, (left, top), (right, bottom), (0,255,0), 2)
cv2.putText(img_cv, "带口罩人脸", (left, top-10), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0,255,0), 2)
cv2.imshow("戴口罩人脸识别", img_cv)
cv2.imwrite("./data/save_result/mask_recognition.jpg", img_cv)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 测试
mask_face_recognition("./data/unknown_faces/mask_test.jpg")
✅ 功能2:活体检测(防照片/视频欺骗,考勤必备防作弊)
# face_liveness_detection.py
import cv2
import face_recognition
import numpy as np
def liveness_detection():
"""简易活体检测:通过人脸眨眼频率+面部动态变化,区分真人/照片"""
cap = cv2.VideoCapture(0)
blink_count = 0
prev_eye_dist = 0
print("活体检测中,请正视摄像头并眨眼...按q退出")
while True:
ret, frame = cap.read()
if not ret: break
face_landmarks = face_recognition.face_landmarks(frame)
for landmarks in face_landmarks:
# 获取左眼和右眼的关键点
left_eye = landmarks["left_eye"]
right_eye = landmarks["right_eye"]
# 计算眼睛上下距离
def eye_distance(eye):
return np.linalg.norm(np.array(eye[1]) - np.array(eye[5]))
curr_eye_dist = (eye_distance(left_eye) + eye_distance(right_eye)) / 2
# 检测眨眼:距离突然变小
if prev_eye_dist > 0 and curr_eye_dist < prev_eye_dist * 0.7:
blink_count +=1
prev_eye_dist = curr_eye_dist
# 绘制眼睛框
cv2.polylines(frame, [np.array(left_eye)], True, (0,255,0), 1)
cv2.polylines(frame, [np.array(right_eye)], True, (0,255,0), 1)
# 判定结果
if blink_count >=1:
cv2.putText(frame, "活体检测:通过【真人】", (10,30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0,255,0), 2)
else:
cv2.putText(frame, "活体检测:未通过【疑似照片】", (10,30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0,0,255), 2)
cv2.imshow("活体检测", frame)
if cv2.waitKey(1) & 0xFF == ord('q'): break
cap.release()
cv2.destroyAllWindows()
# 运行活体检测
liveness_detection()
七、完整项目整合版(main.py,一键运行,所有功能集成)
# main.py 项目入口文件,整合所有核心功能
import cv2
import face_recognition
import pickle
import os
# -------------------------- 全局配置 --------------------------
KNOWN_FACES_DIR = "./data/known_faces"
SAVE_ENCODE_PATH = "./model_data/face_encodings.pkl"
TOLERANCE = 0.6 # 识别阈值
# ---------------------------------------------------------------
def init_face_database():
"""初始化人脸库"""
if not os.path.exists(SAVE_ENCODE_PATH):
known_names, known_encodings = [], []
for f in os.listdir(KNOWN_FACES_DIR):
img = face_recognition.load_image_file(os.path.join(KNOWN_FACES_DIR, f))
enc = face_recognition.face_encodings(img)
if enc:
known_names.append(os.path.splitext(f)[0])
known_encodings.append(enc[0])
with open(SAVE_ENCODE_PATH, "wb") as f:
pickle.dump([known_names, known_encodings], f)
else:
with open(SAVE_ENCODE_PATH, "rb") as f:
known_names, known_encodings = pickle.load(f)
return known_names, known_encodings
def main():
"""主函数:实时人脸识别+活体检测+陌生人报警"""
known_names, known_encodings = init_face_database()
cap = cv2.VideoCapture(0)
print("✅ Python人脸识别系统启动成功!")
print("👉 功能:人脸检测+人脸识别+活体检测+陌生人报警")
print("👉 操作:按 'q' 退出系统")
while True:
ret, frame = cap.read()
if not ret: break
# 核心流程
face_locs = face_recognition.face_locations(frame)
face_encs = face_recognition.face_encodings(frame, face_locs)
for face_loc, face_enc in zip(face_locs, face_encs):
top, right, bottom, left = face_loc
distances = face_recognition.face_distance(known_encodings, face_enc)
match_idx = distances.argmin()
if distances[match_idx] < TOLERANCE:
name = known_names[match_idx]
color = (0,255,0)
text = f"{name} {1-distances[match_idx]:.1%}"
else:
name = "陌生人 ⚠️"
color = (0,0,255)
text = name
# 绘制结果
cv2.rectangle(frame, (left, top), (right, bottom), color, 2)
cv2.rectangle(frame, (left, bottom-35), (right, bottom), color, -1)
cv2.putText(frame, text, (left+5, bottom-8), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (255,255,255), 2)
# 显示系统信息
cv2.putText(frame, "Python人脸识别系统", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (255,0,0), 2)
cv2.imshow("✅ Python人脸识别系统 (完整版)", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
print("👋 系统已退出,感谢使用!")
break
cap.release()
cv2.destroyAllWindows()
if __name__ == "__main__":
main()
最后:运行须知+常见问题解决
✅ 运行前必做2件事
- 在
data/known_faces文件夹中放入你的人脸照片,命名为「姓名.jpg」; - 确保所有依赖库安装完成,无报错;
✅ 常见问题解决
- 摄像头启动失败:将
cv2.VideoCapture(0)改为cv2.VideoCapture(1); - 识别准确率低:增加已知人脸的照片数量(2-3张不同角度),微调阈值
TOLERANCE(0.55-0.65最佳); - dlib安装失败:Windows/Mac直接用
pip install dlib,Linux先装sudo apt-get install cmake;
总结
这套系统的核心逻辑只有三行:检测人脸位置 → 提取128维编码 → 欧氏距离比对,基于这套逻辑,你可以轻松扩展出「考勤打卡、智能门禁、相册分类、安防监控」等实战项目,完全满足日常开发需求。
所有代码遵循模块化设计,可按需删减功能,比如只保留实时识别,或增加批量处理,希望这份纯代码版教程能帮你快速落地人脸识别项目!
✨ 坚持用 清晰的图解 +易懂的硬件架构 + 硬件解析, 让每个知识点都 简单明了 !
🚀 个人主页 :一只大侠的侠 · CSDN💬 座右铭 : “所谓成功就是以自己的方式度过一生。”
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)