python中OpenCV的人脸检测功能

人脸检测是OpenCV的一个很不错的功能,它是人脸识别的基础。人脸识别其实就是一个程序能识别给定图像或视频中的人脸。

人脸识别模块特征

1、是用一系列分好类的图像来“训练”程序,并基于这些图像来进行识别。这就是OpenCV 及其人脸识别模块进行人脸识别的过程。

2、每个识别都具有转置信(confidence)评分,因此可在实际应用中通过对其设置阈值来进行筛选。

人脸识别两种方式

1、自己获得图像或从人脸数据库免费获得可用的人脸图像。

2、互联网上有许多人脸数据库:为了对这些样本进行人脸识别,必须要在包含人脸的样本图像上进行人脸识别。这是一 个学习的过程,但并不像自己提供的图像那样令人满意。

importos
importcv2
fromPILimportImage
importnumpyasnp
defgetImageAndLabels(path):
facesSamples=[]
ids=[]
imagePaths=[os.path.join(path,f)forfinos.listdir(path)]
#检测人脸
#加载特征数据
face_detector=cv2.CascadeClassifier(
'D:/Python/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml')
#参数:scaleFactor(比例因子):图片缩放多少,minNeighbors:至少检测多少次,minSizemaxSize:当前检测区域的最小面积
#scaleFactor=1.01,minNeighbors=3,maxSize=(33,33),minSize=(28,28)
#遍历列表中的图片
forimagePathinimagePaths:
#打开当前图片
PIL_img=Image.open(imagePath).convert('L')
#将图片转化为数组
img_numpy=np.array(PIL_img,'uint8')
faces=face_detector.detectMultiScale(img_numpy)
#获取每张图片的id
id=int(os.path.split(imagePath)[1].split('.')[0])
#获取人脸区域
forx,y,w,hinfaces:
#进行切片处理,获取图像数组和id
facesSamples.append(img_numpy[y:y+h,x:x+w])
ids.append(id)
returnfacesSamples,ids
if__name__=='__main__':
#图片路径
path='./data/jm/'
#获取图像数组和id标签数组
faces,ids=getImageAndLabels(path)
#获取循环对象
recognizer=cv2.face.LBPHFaceRecognizer_create()
recognizer.train(faces,np.array(ids))
#保存文件
recognizer.write('trainer/trainer.yml')
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。