上班摸鱼,闲来无事学了下python,发现python丰富的外部库资源十分适合AI领域的研究学习。
了解到yolo模型在目标检测的广泛应用。于是乎,CV工程师面向ChatGPT编程,几十行代码便能做一个简易的人脸识别小程序。废话不多说,开搞!
前期准备:
安装python和opencv库(按照后的版本信息如下)
使用vscode软件配置好python编程环境
下载YOLOv8模型 yolov8n-face-lindevs.pt
直接ChatGPT生成代码,当然相机获取视频等操作也要慢慢调整。最终如图
#numpy库处理多维数组合矩阵
import numpy as np
import cv2
#YOLOv8
from ultralytics import YOLO
#加载预训练的YOLOv8模型
model = YOLO('yolov8n-face-lindevs.pt')
#初始化相机
cam = cv2.VideoCapture(0)
#检查相机是否打开
if not cam.isOpened():
print("Error opening camera")
exit()
#初始化视频写入对象
cc = cv2.VideoWriter_fourcc(*'XVID')
file = cv2.VideoWriter('output.avi', cc, 15.0, (640, 480))
while True:
#捕获帧
ret, frame = cam.read()
if not ret:
print("Error reading frame")
break
#使用YOLOv8进行人脸检测
results = model(frame)
#迭代检测到的面部
for result in results:
#获取检测框坐标和置信度
boxes = result.boxes.xyxy.cpu().numpy()
confidences = result.boxes.conf.cpu().numpy()
for box,conf in zip(boxes,confidences):
x1,y1,x2,y2 = map(int,box[:4])
label = f'face {conf:.2f}'
#在帧上绘制矩形框
frame = cv2.rectangle(frame,(x1,y1),(x2,y2),(255,0,0),2)
#添加标签
frame = cv2.putText(frame, label, (x1, y1-10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 0, 0), 2)
#显示帧
cv2.imshow('frame', frame)
#写入视频文件
file.write(frame)
#按 'q' 键退出
if cv2.waitKey(1) == ord('q'):
break
#释放相机和文件
cam.release()
file.release()
#关闭所有 OpenCV 窗口
cv2.destroyAllWindows()
在vscode下检验运行无误后,安装Pyinstaller工具打包程序,嫌麻烦可以忽略这步,因为打包时间比较久,而且会出现一些问题,但也都好解决。安装好后如下
最重要的地方在于.spec文件中路径的正确填写
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
a = Analysis(
['face-yolo.py'],
pathex=['D:\\yuan\\face\\dist'],
binaries=[],
datas=[
('D:\\yuan\\face\\yolov8n-face-lindevs.pt', '.'), # 替换为你的模型文件路径
('C:\\Users\\yuan\\AppData\\Local\\Programs\\Python\\Python310\\Lib\\site-packages\\ultralytics\\cfg\\default.yaml', 'ultralytics\\cfg'), # 添加默认配置文件
],
hiddenimports=['ultralytics'],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False,
optimize=0,
)
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
exe = EXE(
pyz,
a.scripts,
[],
exclude_binaries=True,
name='face_yolo',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
console=True, # 设置为 True 以显示控制台输出
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
)
coll = COLLECT(
exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
upx_exclude=[],
name='face_yolo',
)
如下几个文件要在同一位置
运行效果如下(马赛克是后期加的),可以实时检测人体脸部,带有信誉度显示
后续还加装linux板子,程序移植到板子上,再设计个界面,实现人脸考勤或者改进为人体姿态识别,还有很多功能添加。纯属娱乐学习,有兴趣的伙伴可以深入研究。