运用模组cv2 Pillow HAAR特徵档
在一张图片上(虚拟网红脸),标记框示人脸,并每人存成一张图档。
直接看代码解说
# detect face --> tag --> crop --> saveimport cv2 from PIL import Image# 脸部特徵档 安装cv2后,在\Anaconda3\Lib\site-pakages\cv2\data\ 内# 複製存放到现在资料夹内 casc_path = 'haarcascade_frontalface_default.xml'# 辨识器faceCascade = cv2.CascadeClassifier(casc_path)# 读取一张,由GAN产生的'虚拟网红脸' filename = 'fakeFaces.jpg' imagename = cv2.imread(filename)'''侦测人脸 ( 可试试不同设定,会产生什么变化 ) scaleFactor 侦测窗口之大小倍数,minNeighbors 误判参数 minSize 窗口之最小尺寸 本例之图片内,脸部尺寸都大于400,如果maxSize太小,就侦测不出了 或许不设定 maxSize ? ''' minWnd = (30,30)maxWnd =(400,400)sFactor = 1.1faces = faceCascade.detectMultiScale(imagename, scaleFactor=sFactor, minNeighbors=5, minSize=minWnd, maxSize = maxWnd)# 找到几张脸 len(faces)cv2.putText(imagename,f'{len(faces)} faces found', (20,60), cv2.FONT_HERSHEY_SIMPLEX, 1, (0,0,255), 2)#--- 截取每张脸,存档pImage = Image.open(filename)i = 1for (x,y,w,h) in faces: #--- 标记 crop 位置 cv2.rectangle(imagename,(x,y),(x+w, y+h),(0,0,255),2) #--- 每张脸存一张图 fileNa = 'crop%s.jpg' % (i) img1 = pImage.crop((x, y, x+w, y+h)) img2 = img1.resize((300, 300), Image.ANTIALIAS) img2.save(fileNa) #--- 在原图上 标注号码 cv2.putText(imagename,f'No {i}',(x+5,y+h+15),cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255,255,255), 2) i += 1 # 显示成果 cv2.namedWindow("Face detect")cv2.imshow("Face detect", imagename)cv2.waitKey(0) cv2.destroyAllWindows()
资料夹内存档的图片