一、关于opencv
下面是来源于百度百科的关于Opencv的介绍
OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
简而言之,opencv就是一个图像处理库,大家可以利用这个图像处理库对图像视频做处理,并且opencv内置人脸识别的各种模型,十分简单易用。
二、python导入opencv第三方依赖库
最简单的导入opencv的方式,就是用pip指令安装opencv。
$pip install opencv-python
但是这样环境比较容易出问题,例如我就曾经遇到已经install了但是无法导入包的问题,所以建议大家可以利用pycharm搭建一个虚拟的环境,然后在环境里安装opencv-python的包。
image.png
然后点下角这个+号
image.png
然后就可以自行插入opencv的组件。搜索opencv然后install,就可以成功了。然后我们就可以开始写代码,全部代码如下:
import cv2
import time
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FPS, 30)
while True:
ret,img = cap.read()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x,y,w,h) in faces:
cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
cv2.namedWindow("img", 0)
cv2.imshow('img',img)
if len(faces):
print "找到 {0} 个脸!".format(len(faces))
else:
print "没有人脸!"
time.sleep(3)
if cv2.waitKey(1) &0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
然后我们来解析一下代码:
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FPS, 30)
这是一段初始化摄像头的代码,VideoCapture(摄像头序号)我用的是mac,机子自带的摄像头的序号就是0。
然后设置帧率为30fps。(稍微有点卡)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
这个函数的作用是找到人脸,并将人脸的坐标、矩形大小用vector保存。
for (x,y,w,h) in faces:
cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
cv2.namedWindow("img", 0)
cv2.imshow('img',img)
这段代码的作用,是画矩形用的,当然你把rectangle改成其他图形也是可以的,只不过参数要换一下。然后namewindow是给打开的窗口命名,inshow是通过窗口打开这个图片。
if len(faces):
print "找到 {0} 个脸!".format(len(faces))
else:
print "没有人脸!"
这个意思是如果len(faces)不为空,此时打印出找到人脸的数量,否则就输出没有人脸。
接下来我们来看一下运行效果:
064ae49323cd57cb9a2994332.png
会实时反馈人脸的数量和圈出摄像头里检测到的人脸啦!