Python cv2框示人脸 【基本】

运用模组cv2 Pillow HAAR特徵档
在一张图片上(虚拟网红脸),标记框示人脸,并每人存成一张图档。
https://ithelp.ithome.com.tw/upload/images/20210825/20111373fmyC8iTu76.jpg
直接看代码解说

# 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()

https://ithelp.ithome.com.tw/upload/images/20210825/20111373NXIIIVq0Dg.jpg
资料夹内存档的图片
https://ithelp.ithome.com.tw/upload/images/20210825/20111373j4dsgCjUmw.jpg


<<:  使用批次档 (Batch file) 命令自动更新 TortoiseSVN 目录

>>:  Day56 (React)

[Day 15] 阿嬷都看得懂的开始写第一支 .css 档案罗!

阿嬷都看得懂的开始写第一支 .css 档案罗! 昨天我们介绍了怎麽使用 style 标签,把所有 C...

[Day29] Index Lifecycle Management 简介

当股票系统上线後,就会就它年复一年的走下去,资料量也会随着时间累积,虽然我觉得盘後资讯一天不过二千笔...

【Day 28】练习专案 1/2 - NFC、Barcode、fontFamily、Stack、sliding_up_panel

今日要点 》前言 》介绍 Demo 专案 》程序架构研究 前言 前面精选了很多在 Github 上很...

大共享时代系列_029_共享读书趣

是不是该读点书了呢? 参加读书会的好处? 打造社群学习RSC的价值:Reading(共读)、Shar...

食谱搜寻系统_Node.js测试~~

由於Node.js的下载过程其实非常简单,没有什麽需要特别注意的,所以Icebear直接进入测试环节...