4.4 人脸识别:
==========
4.4.1 英文版的人脸识别4-face_recognition.py代码:
#face_recognition 人脸检测并识别,显示人名import cv2recognizer = cv2.face.LBPHFaceRecognizer_create()recognizer.read('/home/xgj/Desktop/face-de/face_trainer/trainer.yml')cascadePath = "/home/xgj/Desktop/face-de/haarcascade_frontalface_default.xml"faceCascade = cv2.CascadeClassifier(cascadePath)font = cv2.FONT_HERSHEY_SIMPLEX#这里为0或者1都没有关系idnum = 1names = ['Allen', 'Bob']#names中存储人的名字,若该人id为0则他的名字在第一位,id位1则排在第二位,以此类推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 = faceCascade.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 < 100:idnum = names[idnum]confidence = "{0}%".format(round(100 - confidence))else:idnum = "unknown"confidence = "{0}%".format(round(100 - confidence))cv2.putText(img, str(idnum), (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(10)if k == 27:breakcam.release()cv2.destroyAllWindows()4.4.2 PIL法显示中文的人脸识别5-face_recognition_zh_PIL.py代码:自己添加的
#face_recognition 人脸检测,PIL法显示中文人名import cv2#---增加的PIL法显示中文---import numpyfrom PIL import Image, ImageDraw, ImageFont#定义一个函数def cv2ImgAddText(img, text, left, top, textColor=(0, 255, 0), textSize=20):if (isinstance(img, numpy.ndarray)):# 判断是否OpenCV图片类型img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))# 创建一个可以在给定图像上绘图的对象draw = ImageDraw.Draw(img)# 字体的格式,自己下载华文仿宋字体,放在根目录下fontStyle = ImageFont.truetype("hwfs.ttf", textSize, encoding="utf-8")# 绘制文本draw.text((left, top), text, textColor, font=fontStyle)# 转换回OpenCV格式return cv2.cvtColor(numpy.asarray(img), cv2.COLOR_RGB2BGR)recognizer = cv2.face.LBPHFaceRecognizer_create()recognizer.read('/home/xgj/Desktop/face-de/face_trainer/trainer.yml')cascadePath = "/home/xgj/Desktop/face-de/haarcascade_frontalface_default.xml"faceCascade = cv2.CascadeClassifier(cascadePath)font = cv2.FONT_HERSHEY_SIMPLEX#这里为0或者1都没有关系idnum = 0names = ['机器人', 'Bob']#names中存储人的名字,若该人id为0则他的名字在第一位,id位1则排在第二位,以此类推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 = faceCascade.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 < 100:idnum = names[idnum]confidence = "{0}%".format(round(100 - confidence))else:idnum = "unknown"confidence = "{0}%".format(round(100 - confidence))#cv2.putText(img, str(idnum), (x+5, y-5), font, 1, (0, 0, 255), 1)#不能显示中文#注意下面格式,位置去掉元组格式,并int化img = cv2ImgAddText(img, str(idnum), int(x+5), int(y-5),(0, 0, 255),20)#显示为中文PIL法cv2.putText(img, str(confidence), (x+5, y+h-5), font, 1, (0, 0, 0), 1)cv2.imshow('camera', img)k = cv2.waitKey(10)if k == 27:breakcam.release()cv2.destroyAllWindows()效果图

文章插图
===以上代码亲测可用===
喜欢的人,请点赞、关注、评论、转发和收藏 。
谢谢原博主 。
【Opencv+python3.8+人脸识别+PIL法中文显示】
推荐阅读
- AI人工智能:JAVA教你拍照识别文字 并语音播报
- 语音识别概论
- 一个超好用的开源OCR
- 标贝科技入选“2020人工智能语义识别创新排行”
- NVIDIA GPU助力博特智能加速内容识别,打造智能内容审核
- 老年人脸红是什么原因
- 老年人脸肿嘴歪胸口发闷
- 驾照|女子考科一5次全是男人脸 网友:这情况换我心态早崩了
- 华为|3D人脸识别+可视猫眼!华为智能门锁今天正式预售
- 黄金桂茶叶怎么识别,乌龙茶黄金桂品鉴先容
