基于树莓派opencv—Python的人脸面部特征框选(眼睛和微笑)
微整形手术通常用于修复或改善面部特征,如隆鼻、隆下巴或眼部轮廓。 #生活知识# #科技生活# #健康生活技巧# #微整形手术#
广西●河池学院
广西高校重点实验室培训基地
系统控制与信息处理重点实验室
本篇博客来自河池学院: 智控无人机小组
写作时间: 2020年8月16日
一、测试相机
在树莓派上新建一个.py文件,将以下代码放入运行。
import numpy as np import cv2 cap = cv2.VideoCapture(0) cap.set(3,640) # 宽 cap.set(4,480) # 高 while(True): ret, frame = cap.read() frame = cv2.flip(frame, -1) # 相机垂直翻转 gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) cv2.imshow('frame', frame) cv2.imshow('gray', gray) k = cv2.waitKey(30) & 0xff if k == 27: # press 'ESC' to quit break cap.release() cv2.destroyAllWindows()
123456789101112131415161718192021效果为:
如果产生画面翻转的现象将 代码中
frame = cv2.flip(frame, -1)替换为frame = cv2.flip(frame, 1)即可。
二、脸部侦测
检测人脸(或任何物体)的最常见方法是使用“ Haar Cascade分类器 ”使用基于Haar特征的级联分类器的对象检测是Paul Viola和Michael Jones在其论文“使用简单特征的增强级联进行快速对象检测”中于2001年提出的一种有效的对象检测方法。这是一种基于机器学习的方法,其中从许多正负图像中训练级联函数。然后用于检测其他图像中的对象。
如果想要为任何物体训练自己的分类器,就可以使用opencv自己建一个,详细信息在下面网址
https://docs.opencv.org/3.3.0/dc/d88/tutorial_traincascade.html
如果不想创建自己的分类器,OpenCV已经包含许多针对面部,眼睛,微笑等的经过预先训练的分类器。可以从haarcascades目录中招待这些XML文件并调用。
检测人脸:
import numpy as np import cv2 # multiple cascades: https://github.com/Itseez/opencv/tree/master/data/haarcascades faceCascade = cv2.CascadeClassifier('Cascades/haarcascade_frontalface_default.xml') eyeCascade = cv2.CascadeClassifier('Cascades/haarcascade_eye.xml') smileCascade = cv2.CascadeClassifier('Cascades/haarcascade_smile.xml') cap = cv2.VideoCapture(0) cap.set(3,640) # set Width cap.set(4,480) # set Height while True: ret, img = cap.read() img = cv2.flip(img, -1) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) faces = faceCascade.detectMultiScale( gray, scaleFactor=1.3, minNeighbors=5, minSize=(30, 30) ) for (x,y,w,h) in faces: cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2) roi_gray = gray[y:y+h, x:x+w] roi_color = img[y:y+h, x:x+w] eyes = eyeCascade.detectMultiScale( roi_gray, scaleFactor= 1.5, minNeighbors=5, minSize=(5, 5), ) for (ex, ey, ew, eh) in eyes: cv2.rectangle(roi_color, (ex, ey), (ex + ew, ey + eh), (0, 255, 0), 2) smile = smileCascade.detectMultiScale( roi_gray, scaleFactor= 1.5, minNeighbors=15, minSize=(25, 25), ) for (xx, yy, ww, hh) in smile: cv2.rectangle(roi_color, (xx, yy), (xx + ww, yy + hh), (0, 255, 0), 2) cv2.imshow('video', img) k = cv2.waitKey(30) & 0xff if k == 27: # press 'ESC' to quit break cap.release() cv2.destroyAllWindows()
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758注意下面这行代码
faceCascade = cv2.CascadeClassifier('Cascades / haarcascade_frontalface_default.xml') 1
这是加载“分类器”的行,也就是我们调用opencv本身含有的预先训练的分类器。(眼睛和微笑同理)
faces = faceCascade.detectMultiScale( gray, scaleFactor=1.3, minNeighbors=5, minSize=(30, 30) ) 123456
这是分类器函数可以设置比例因子,邻居数和所要检测面部的最小尺寸。
gray:是输入的灰度图像。
scaleFactor:是一个参数,用于指定每个图像比例缩小多少图像。它用于创建比例金字塔。
minNeighbors:是一个参数,用于指定每个候选矩形要保留多少个邻居。数字越大,误报率越低。
minSize:是被视为面的最小矩形大小。
用蓝色矩形在图像中“标记”面部,代码如下(眼睛和微笑同理):
for (x,y,w,h) in faces: cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2) roi_gray = gray[y:y+h, x:x+w] roi_color = img[y:y+h, x:x+w] 1234
如果找到了脸部,则将检测到的脸部的位置返回为矩形,其矩形的左上角(x,y),宽度为“ w”,高度为“ h” ==>(x,y,w, H)。
一旦获得这些位置,就可以为该面部创建一个“ ROI”(绘制的矩形),并使用imshow()函数显示结果。
网址:基于树莓派opencv—Python的人脸面部特征框选(眼睛和微笑) https://www.yuejiaxmz.com/news/view/284250
相关内容
【计算机视觉】基于Python—OpenCV的手势识别详解(一)基于树莓派的智能家居控制系统设计论文参考
开源树莓派+OAK相机,打造家庭自动化系统。
树莓派入门攻略:轻松学会用Python脚本开启智能生活!
树莓派打造智能语音控制系统
Python从0到100(七十三):Python OpenCV
基于opencv,使用python提取视频帧以及提取TVL1光流
树莓派控制语音控制舵机
树莓派选购与使用指南,资深网购达人的经验分享
创意生活 +关注 已有 28 人关注 发表新帖