人脸识别实时应用:使用 Mindspore 加载并循环使用不同 ckpt 模型
使用 Mindspore 加载并循环使用不同 ckpt 模型进行人脸识别
本代码展示如何使用 Mindspore 框架加载 ckpt 文件并构建人脸识别模型,并将其应用于实时视频流中,实现对不同 ckpt 模型的循环使用。
import os
import cv2
import numpy as np
import mindspore
from mindspore import Tensor, load_checkpoint, load_param_into_net
from mindspore.dataset.vision import py_transforms
from mindspore.dataset.transforms.py_transforms import Compose
from PIL import Image
from main import ResNet, BasicBlock
# 加载标签
with open('label.txt') as f:
labels = f.readlines()
labels = [l.strip() for l in labels]
# 加载人脸检测器
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
# 打开摄像头
cap = cv2.VideoCapture(0)
# 加载模型的函数
def load_model(ckpt_file):
network = ResNet(BasicBlock, [2, 2, 2, 2], num_classes=100)
params = load_checkpoint(os.path.join(ckpt_dir, ckpt_file))
load_param_into_net(network, params)
return network
# 遍历ckpt文件夹中的所有ckpt文件
ckpt_dir = 'D:/pythonProject7/ckpt/'
ckpt_files = os.listdir(ckpt_dir)
ckpt_files = [f for f in ckpt_files if f.endswith('.ckpt')]
ckpt_files.sort(key=lambda x: os.path.getmtime(os.path.join(ckpt_dir, x)))
for ckpt_file in ckpt_files:
# 加载模型
network = load_model(ckpt_file)
while True:
# 读取视频帧
ret, frame = cap.read()
# 转换为灰度图像
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 检测人脸
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x, y, w, h) in faces:
# 提取人脸图像
face = gray[y:y + h, x:x + w]
face = cv2.resize(face, (224, 224)).astype(np.float32)
face = cv2.cvtColor(face, cv2.COLOR_GRAY2RGB)
# 转换为Tensor类型,并进行归一化
transform = Compose([
py_transforms.ToTensor(),
py_transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])
face = transform(face)
# 转换为Tensor类型,并增加一个维度
face = Tensor(face)
#face = mindspore.ops.ExpandDims()(face, 0)
# 预测人脸所属的类别
output = network(face)
prediction = np.argmax(output.asnumpy())
# 在图像上标注人脸和类别
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 0, 255), 2)
cv2.putText(frame, labels[prediction], (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 0, 255), 2)
# 显示图像
cv2.imshow('frame', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 释放摄像头并关闭窗口
cap.release()
cv2.destroyAllWindows()
代码解析
- 加载模型:
load_model函数用于加载指定 ckpt 文件,并构建一个完整的模型。load_checkpoint函数读取 ckpt 文件,并将参数加载到网络中。
- 遍历 ckpt 文件夹:
- 循环遍历 ckpt 文件夹中的所有 ckpt 文件。
- 使用
os.path.getmtime函数获取文件最后修改时间,并进行排序,确保加载模型的顺序。
- 人脸识别流程:
- 使用 OpenCV 读取视频帧,并将其转换为灰度图像。
- 使用
face_cascade检测人脸,并提取人脸图像。 - 将人脸图像进行预处理,包括尺寸缩放、数据类型转换和归一化。
- 使用加载的模型进行人脸识别,并获取预测结果。
- 在视频帧上绘制识别框和类别标签。
- 循环使用模型:
- 在每次循环中,加载一个不同的 ckpt 模型,并进行人脸识别。
- 可以通过更改 ckpt 文件夹路径和模型结构等参数来实现不同模型的加载。
如何正确使用 ckpt 文件夹中的文件成为 model 内容:
在代码中,通过 load_model 函数加载 ckpt 文件夹中的 ckpt 文件,并将参数加载到网络中,从而得到一个完整的模型。在每一次遍历 ckpt 文件夹并加载模型后,可以使用该模型进行人脸识别。需要注意的是,在使用完模型后,需要释放摄像头并关闭窗口。
总结:
本代码展示了如何使用 Mindspore 框架加载 ckpt 文件并构建人脸识别模型,并将其应用于实时视频流中,实现对不同 ckpt 模型的循环使用。通过简单的代码修改,可以方便地应用于其他场景,例如不同模型的对比测试或模型更新等。
原文地址: https://www.cveoy.top/t/topic/jqmw 著作权归作者所有。请勿转载和采集!