import cv2 as cv
import os
import numpy as np
import sys
#生成人脸识别数据
#1.图像是灰度格式,后缀名字是。pym
#2.图像形状是正方形
#3.图像大小要一样(如:200X200)
#产生 引起
def generate():
path_face="C:/Users/yao/AppData/Local/Programs/Python/Python37/Lib/site-packages/cv2/data/haarcascade_frontalface_default.xml"
path_eye="C:/Users/yao/AppData/Local/Programs/Python/Python37/Lib/site-packages/cv2/data/haarcascade_eye.xml";
#cascade 倾斜 小瀑布 classifier 分类成分
face_cascade=cv.CascadeClassifier(path_face)
eye_cascade=cv.CascadeClassifier(path_eye)
head_movie="./image/2.mp4"
camera=cv.VideoCapture(head_movie)
count=0
while camera.isOpened():
ret,frame=camera.read()
gray=cv.cvtColor(frame,cv.COLOR_BGR2GRAY)
faces=face_cascade.detectMultiScale(gray,1.3,5)
for(x,y,w,h) in faces:
img=cv.rectangle(frame,(x,y),(x+w,y+h),(255,0,0),2)
f=cv.resize(gray[y:y+h,x:x+w],(200,200))
cv.imwrite('./data/%s.pgm'%str(count),f)
count+=1
cv.imshow('camera',frame)
key = cv.waitKey(delay=1)
if key == ord('q'):
break
camera.release()
cv.destroyAllWindows()
"""
#os.walk() https://www.runoob.com/python3/python3-comment.html
#os.walk() 方法用于通过在目录树中游走输出在目录中的文件名,向上或者向下。
#os.walk() 方法是一个简单易用的文件、目录遍历器,可以帮助我们高效的处理文件、目录方面的事情。
top - - 是你所要遍历的目录的地址, 返回的是一个三元组(root, dirs, files)。
root
所指的是当前正在遍历的这个文件夹的本身的地址
dirs
是一个list ,内容是该文件夹中所有的目录的名字(不包括子目录)
files
同样是list, 内容是该文件夹中所有的文件(不包括子目录)
"""
#准备训练数据
def read_images(path,sz=None):
c=0
x,y=[],[]
for dirname,dirnames,filenames in os.walk(path):
for subdirname in dirnames:
subject_path = os.path.join(dirname,subdirname)
#os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。这个列表以字母顺序。 它不包括 '.' 和'..' 即使它在文件夹中。
for filename in os.listdir(subject_path):
try:
if (filename == '.directory'):
continue
filepath=os.path.join(subject_path,filename)
im=cv.imread(os.path.join(subject_path,filename),cv.IMREAD_GRAYSCALE)
#重新设置大小
if(sz is not None):
im.cv.resize(im,(200,200))
#array和asarray都可将结构数据转换为ndarray类型。但是主要区别就是当数据源是ndarray时,array仍会copy出一个副本,占用新的内存,但asarray不会。
#array 赋值关系 asarray 引用关系
x.append(np.asanyarray(im,dtype=np.uint8))
y.append(c)
except IOError as (errno,strerror):
print('I.O error({0}:{1})'.format(errno,strerror))
except:
print("UnEXPECTED ERROR",sys.exc_info()[0])
raise
c=c+1
return [x,y]
if __name__ =="__main__":
print('----')
#generate()
人脸检测和认识--书OpenCV3计算机视觉
猜你喜欢
转载自blog.csdn.net/u010708028/article/details/100189547
今日推荐
周排行