代码拉取完成,页面将自动刷新
同步操作将从 大奥特曼打小怪兽/opencv 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
# -*- coding: utf-8 -*-
"""
Created on Thu Aug 16 19:41:19 2018
@author: lenovo
"""
'''
调用opencv库实现人脸识别
'''
import numpy as np
import cv2
import os
import shutil
#读取pgm图像,并显示
def ShowPgm(filepath):
cv2.namedWindow('pgm')
img = cv2.imread(filepath)
cv2.imshow('pgm',img)
print(img.shape)
cv2.waitKey(0)
cv2.destroyAllWindows()
#1、生成自己人脸识别数据
def generator(data):
'''
生成的图片满足以下条件
1、图像是灰度格式,后缀为.pgm
2、图像大小要一样
params:
data:指定生成的人脸数据的保存路径
'''
'''
打开摄像头,读取帧,检测帧中的人脸,并剪切,缩放
'''
name = input('my name:')
#如果路径存在则删除
path = os.path.join(data,name)
if os.path.isdir(path):
#os.remove(path) #删除文件
#os.removedirs(path) #删除空文件夹
shutil.rmtree(path) #递归删除文件夹
#创建文件夹
os.mkdir(path)
#创建一个级联分类器 加载一个 .xml 分类器文件. 它既可以是Haar特征也可以是LBP特征的分类器.
face_cascade = cv2.CascadeClassifier('./haarcascades/haarcascade_frontalface_default.xml')
#打开摄像头
camera = cv2.VideoCapture(0)
cv2.namedWindow('Dynamic')
#计数
count = 1
while(True):
#读取一帧图像
ret,frame = camera.read()
#判断图片读取成功?
if ret:
gray_img = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
#人脸检测
faces = face_cascade.detectMultiScale(gray_img,1.3,5)
for (x,y,w,h) in faces:
#在原图像上绘制矩形
cv2.rectangle(frame,(x,y),(x+w,y+h),(255,0,0),2)
#调整图像大小 和ORL人脸库图像一样大小
f = cv2.resize(frame[y:y+h,x:x+w],(92,112))
#保存人脸
cv2.imwrite('%s/%s.pgm'%(path,str(count)),f)
count += 1
cv2.imshow('Dynamic',frame)
#如果按下q键则退出
if cv2.waitKey(100) & 0xff == ord('q') :
break
camera.release()
cv2.destroyAllWindows()
#2、读取ORL人脸数据库 准备训练数据
def LoadImages(data):
'''
加载数据集
params:
data:训练集数据所在的目录,要求数据尺寸大小一样
ret:
images:[m,height,width] m为样本数,height为高,width为宽
names:名字的集合
labels:标签
'''
images = []
labels = []
names = []
label = 0
#过滤所有的文件夹
for subDirname in os.listdir(data):
subjectPath = os.path.join(data,subDirname)
if os.path.isdir(subjectPath):
#每一个文件夹下存放着一个人的照片
names.append(subDirname)
for fileName in os.listdir(subjectPath):
imgPath = os.path.join(subjectPath,fileName)
img = cv2.imread(imgPath,cv2.IMREAD_GRAYSCALE)
images.append(img)
labels.append(label)
label += 1
images = np.asarray(images)
labels = np.asarray(labels)
return images,labels,names
def FaceRec(data):
#加载训练数据
X,y,names=LoadImages('./face')
model = cv2.face.EigenFaceRecognizer_create()
model.train(X,y)
#创建一个级联分类器 加载一个 .xml 分类器文件. 它既可以是Haar特征也可以是LBP特征的分类器.
face_cascade = cv2.CascadeClassifier('./haarcascades/haarcascade_frontalface_default.xml')
#打开摄像头
camera = cv2.VideoCapture(0)
cv2.namedWindow('Dynamic')
while(True):
#读取一帧图像
ret,frame = camera.read()
#判断图片读取成功?
if ret:
gray_img = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
#人脸检测
faces = face_cascade.detectMultiScale(gray_img,1.3,5)
for (x,y,w,h) in faces:
#在原图像上绘制矩形
frame = cv2.rectangle(frame,(x,y),(x+w,y+h),(255,0,0),2)
roi_gray = gray_img[y:y+h,x:x+w]
try:
#宽92 高112
roi_gray = cv2.resize(roi_gray,(92,112),interpolation=cv2.INTER_LINEAR)
params = model.predict(roi_gray)
print('Label:%s,confidence:%.2f'%(params[0],params[1]))
cv2.putText(frame,names[params[0]],(x,y-20),cv2.FONT_HERSHEY_SIMPLEX,1,255,2)
except:
continue
cv2.imshow('Dynamic',frame)
#如果按下q键则退出
if cv2.waitKey(100) & 0xff == ord('q') :
break
camera.release()
cv2.destroyAllWindows()
if __name__=='__main__':
#ShowPgm('./face/s1/1.pgm')
data = './face'
#生成自己的人脸数据
#generator(data)
FaceRec(data)
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。