cv2中recognizer. predict 的用法
时间: 2023-05-20 16:03:47 浏览: 921
recognizer.predict() 是 OpenCV 中人脸识别模块中的一个函数,用于对输入的人脸图像进行识别。它的输入参数是一个人脸图像,输出是一个元组,包含了预测结果和置信度。具体用法可以参考 OpenCV 官方文档。
相关问题
idnum,confidence = recognizer.predict(gray[y:y+h,x:x+w]) #计算出一个检验结果 if confidence < 100: idum = names[idnum] confidence = "{0}%",format(round(100-confidence)) else: idum = "unknown" confidence = "{0}%",format(round(100-confidence)) #输出检验结果以及用户名 cv2.putText(img,str(idum),(x+5,y-5),font,1,(0,0,255),1) cv2.putText(img,str(confidence),(x+5,y+h-5),font,1,(0,0,0),1)
这段代码实现了人脸识别的功能。首先在检测到人脸的矩形区域内,使用`recognizer.predict()`方法计算出一个检验结果,返回预测的标签和置信度。如果置信度小于100,表示预测结果可信,根据预测的标签idnum查找对应的用户名names[idnum],并将置信度confidence进行格式化,最后将用户名和置信度分别使用`cv2.putText()`方法输出在图像上。如果置信度大于等于100,则认为预测结果不可信,将用户名设为"unknown"。
-----检测、校验并输出结果----- from imp import reload import cv2 # 准备好识别方法 recognizer = cv2.face.LBPHFaceRecognizer_create() # 使用之前训练好的模型 recognizer.read('trainner/trainner.yml') # 再次调用人脸分类器 cascade_path = "C:\Anacon3\envs\myenv\Lib\site-packages\cv2\data/haarcascade_frontalface_default.xml" face_cascade = cv2.CascadeClassifier(cascade_path) # 加载一个字体,用于识别后,在图片上标注出对象的名字 font = cv2.FONT_HERSHEY_SIMPLEX idnum = 0 # 设置好与ID号码对应的用户名,如下,如0对应的就是初始 names = ['zuo xin', 'un', 'user1', 'user2', 'user3'] # 调用摄像头 cam = cv2.VideoCapture(0) minW = 0.1 * cam.get(3) minH = 0.1 * cam.get(4) while True: ret, img = cam.read() gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 识别人脸 faces = face_cascade.detectMultiScale( gray, scaleFactor=1.2, minNeighbors=5, minSize=(int(minW), int(minH)) ) # 进行校验 for (x, y, w, h) in faces: cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2) idnum, confidence = recognizer.predict(gray[y:y + h, x:x + w]) # 计算出一个检验结果 if confidence < 55: idum = names[idnum] confidence = "{0}%", format(round(100 - confidence)) else : confidence = "{0}%", format(round(100 - confidence)) idum = "unknown" # 输出检验结果以及用户名/ cv2.putText(img, str(idum), (x + 5, y - 5), font, 1, (0, 0, 255), 1) cv2.putText(img, str(confidence), (x + 5, y + h - 5), font, 1, (0, 0, 0), 1) # 展示结果 cv2.imshow('camera', img) k = cv2.waitKey(20) if k == cv2.waitKey(20): print('人脸检测成功,门禁已经开锁,请人员进入') # 释放资源 cam.release() cv2.destroyAllWindows()修改为可以识别中文字符串
可以尝试使用Python的unicode编码,将中文字符转换为unicode编码,然后再进行输出。修改后的代码如下:
```python
# -*- coding: utf-8 -*-
# 检测、校验并输出结果
from imp import reload
import cv2
# 准备好识别方法
recognizer = cv2.face.LBPHFaceRecognizer_create()
# 使用之前训练好的模型
recognizer.read('trainner/trainner.yml')
# 再次调用人脸分类器
cascade_path = "C:\Anacon3\envs\myenv\Lib\site-packages\cv2\data/haarcascade_frontalface_default.xml"
face_cascade = cv2.CascadeClassifier(cascade_path)
# 加载一个字体,用于识别后,在图片上标注出对象的名字
font = cv2.FONT_HERSHEY_SIMPLEX
# 设置好与ID号码对应的用户名,如下,如0对应的就是初始
names = [u'左欣', u'未知', u'用户1', u'用户2', u'用户3']
# 调用摄像头
cam = cv2.VideoCapture(0)
minW = 0.1 * cam.get(3)
minH = 0.1 * cam.get(4)
while True:
ret, img = cam.read()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 识别人脸
faces = face_cascade.detectMultiScale(
gray,
scaleFactor=1.2,
minNeighbors=5,
minSize=(int(minW), int(minH))
)
# 进行校验
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
idnum, confidence = recognizer.predict(gray[y:y + h, x:x + w])
# 计算出一个检验结果
if confidence < 55:
idum = names[idnum]
confidence = "{0}%".format(round(100 - confidence))
else:
confidence = "{0}%".format(round(100 - confidence))
idum = u'未知'
# 输出检验结果以及用户名
cv2.putText(img, idum, (x + 5, y - 5), font, 1, (0, 0, 255), 1)
cv2.putText(img, confidence, (x + 5, y + h - 5), font, 1, (0, 0, 0), 1)
# 展示结果
cv2.imshow('camera', img)
k = cv2.waitKey(20)
if k == cv2.waitKey(20):
print(u'人脸检测成功,门禁已经开锁,请人员进入')
# 释放资源
cam.release()
cv2.destroyAllWindows()
```
使用 `u'字符串'` 可以创建一个unicode字符串,同时修改了代码中的部分注释中的英文字符为中文字符。
阅读全文