运用模组cv2 Pillow HAAR特徵档
在一张图片上(虚拟网红脸),标记框示人脸,并每人存成一张图档。
直接看代码解说
# detect face --> tag --> crop --> save
import 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.1
faces = 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 = 1
for (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()
资料夹内存档的图片
<<: 使用批次档 (Batch file) 命令自动更新 TortoiseSVN 目录
阿嬷都看得懂的开始写第一支 .css 档案罗! 昨天我们介绍了怎麽使用 style 标签,把所有 C...
当股票系统上线後,就会就它年复一年的走下去,资料量也会随着时间累积,虽然我觉得盘後资讯一天不过二千笔...
今日要点 》前言 》介绍 Demo 专案 》程序架构研究 前言 前面精选了很多在 Github 上很...
是不是该读点书了呢? 参加读书会的好处? 打造社群学习RSC的价值:Reading(共读)、Shar...
由於Node.js的下载过程其实非常简单,没有什麽需要特别注意的,所以Icebear直接进入测试环节...