opencv人脸检测与人脸识别 -凯发k8官方网
凯发k8官方网
收集整理的这篇文章主要介绍了
opencv人脸检测与人脸识别
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
opencv是开源的计算机视觉库,实现了很多图像处理和计算机视觉方面的通用算法。下面主要opencv中的内置算法来实现人脸检测与人脸识别。
人脸检测
流程
-
通过opencv自带的级联分类器来加载人脸检测的相关文件haarcascade_frontalface_default.xml(windows版路径为opencv目录下的\build\etc\haarcascades\)
-
对图像进行灰度化等预处理
-
通过detectmultiscale函数完成对指定图片中的人脸进行检测(函数返回的为脸位置信息)
-
通过rectangle函数绘制出人脸位置
代码
import cv2 as cv import numpy as npdef face_detect(image):gray = cv.cvtcolor(image, cv.color_bgr2gray)face_detector = cv.cascadeclassifier("haarcascade_frontalface_default.xml")faces = face_detector.detectmultiscale(gray, 1.02, 20)for x, y, w, h in faces:cv.rectangle(image, (x, y), (x w, y h), (0, 0, 255), 2)cv.imshow("face_detect", image)def video_face_detect():capture = cv.videocapture(0)while true:ret, frame = capture.read()frame = cv.flip(frame, 1)face_detect(frame)c = cv.waitkey(10)if c==27: # escbreakif __name__ == '__main__':src = cv.imread("test.jpg")face_detect(src)# video_face_detect()cv.waitkey(10000)cv.destroyallwindows()人脸识别
流程:
训练
-
制作人脸数据集,格式为:每个类别一个文件夹
-
通过opencv中的face人脸模块中的eigenfacerecognizer_create函数来创建一个模型,并依据数据集完成对模型的训练
测试
-
利用人脸检测算法对测试图片中的人脸进行提取
-
通过模型的predict函数完成对提取的人脸进行识别
代码
import cv2 as cv import numpy as np import os import sysdef dataset(path):label = 0imgs, labels = [], []for dirname, dirnames, filenames in os.walk(path):for subdirname in dirnames:subject_path = os.path.join(dirname, subdirname)for filename in os.listdir(subject_path):filepath = os.path.join(subject_path, filename)im = cv.imread(filepath, cv.imread_grayscale)im = cv.resize(im, (200, 200))imgs.append(np.asarray(im, dtype=np.uint8))labels.append(label)label = 1return [imgs, labels]def train(imgs, labels):labels = np.asarray(labels, dtype=np.int32)model = cv.face.eigenfacerecognizer_create()model.train(np.asarray(imgs), np.asarray(labels))return modeldef test(model, testimg_path):names = ['joe', 'jane', 'jack', 'mike']# 每个类别实际对应的名称,按类别文件夹顺序img = cv.imread(testimg_path)#人脸检测face_cascade = cv.cascadeclassifier('haarcascade_frontalface_default.xml')faces = face_cascade.detectmultiscale(img, 1.1, 1)#对图片中每个人脸进行识别for (x, y, w, h) in faces:img = cv.rectangle(img, (x,y), (x w, y h), (255, 0, 0), 2)gray = cv.cvtcolor(img, cv.color_bgr2gray)roi = gray[x:x w, y:y h]roi = cv.resize(roi, (200, 200), interpolation=cv.inter_linear)params = model.predict(roi)print("label: %s, confidence: %.3f" % (params[0], params[1]))cv.puttext(img, names[params[0]], (x, y), cv.font_hershey_simplex, 1, 255, 2)cv.imshow("img", img)cv.waitkey(10000)cv.destroyallwindows()if __name__ == '__main__':data_path = "数据集文件夹根路径"testimg_path = "测试图片路径"imgs, labels = dataset(data_path)model = train(imgs, labels)test(model, testimg_path)总结
opencv中提供的人脸检测与人脸识别相关算法缺乏实用性且人脸识别算法只能对训练集中涉及到的人脸予以识别,所以算法适用场景小。若需更好的人脸识别算法可研究研究facenet框架。
总结
以上是凯发k8官方网为你收集整理的opencv人脸检测与人脸识别的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇:
- 下一篇: