OpenCV是现在最流行的计算机视觉库,而咱们今天就是要学习如何安装使用OpenCV,以及如何去访问咱们的摄像头。而后咱们一块儿来看看写一我的脸检测程序是如何地简单,简单到只须要几行代码。html
在开始以前,我假设你已经对Python有必定的了解。固然,若是你以为你还未入流,这里有推荐一些学习Python的电子书,你能够先学习下Python,如此可让你更好地理解接下来的步骤。另外,这里还推荐一本电子书来学习OpenCV。python
好,不浪费时间,开始吧。ide
To setup opencv in python environment you will need these things ready ( match the versions to follow along with this tutorial),
首先咱们须要先准备好这些环境(版本记得配好):函数
首先,对于下载Python,咱们能够先到官网上下对应的版本,若是是Windows就多是msi格式的版本,若是是Mac就多是pkg格式的安装包,若是是Linux则多是源码包。学习
安装和Python后打开命令行就可使用pip命令进行Python包的安装了,如:测试
因为OpenCV使用Numpy库,所以先经过命令pip install numpy
安装Numpy库。安装完后,尝试导入,没有报错则ok:this
而后进入OpenCV官网下对应的版本并安装,尝试导入:spa
万事俱备,只欠东风。咱们来写代码检测人脸吧,来一发OpenCV的Hello world。命令行
在这里咱们准备使用pre-trained的XML文件,这些XML文件都较难训练,可是咱们不须要担忧,所以OpenCV已经为咱们提供了不少人脸检测相关的pre-trained分类器。3d
想要使用这写分类器,咱们须要将分类器的XML文件haarcascade_frontalface_default.xml
从opencv文件夹/sources/data/haarcascades/
下复制到咱们的项目目录下,就是咱们将要写程序的目录下。若是没有opencv文件夹/sources/data/haarcascades/
这个目录,能够尝试找一下opencv文件夹/share/OpenCV/haarcascades/
。只要找到以下文件便可:
而后若是咱们要加载这个分类器的话,如此就好:
detector = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
而后接下来咱们先来测试一下摄像头吧,
cap = cv2.VideoCapture(0) ret, img = cap.read() cv2.imshow('windowname', img) cv2.waitKey(0) # 释放摄像头资源 cap.release()
以上的代码是调用你电脑的0号摄像头,并展现出来。固然,若是你有多个摄像头,那么你也能够试试别的id,修改VideoCapture函数的参数便可。
其中cap.read()就是从摄像头获取到图像,这个函数返回了两个变量,第一个为布尔值表示成功与否,以及第二个是图像。
而后程序经过imshow()展现图片,其第一个传入的参数为窗口的名称,而第二个就是要展现的图片,以上代码传入的就是咱们的自拍。
而waitKey是用来停在图片的展现界面,让你看清楚,参数能够是十、100、1000等,单位是毫秒,这里填0就是一直停着。注意了,若是停留的时间不够久,就可能看不见imshow的照片了。
运行了这段代码,你将会看到摄像头所拍摄的画面,通常来讲就是你本身了。
接下来咱们将图片先转换为灰度图片,
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
而后就开始了人脸检测之旅:
faces = detector.detectMultiScale(gray, 1.3, 5)
以上的这句代码会等到一串list,list中的每一个都有x, y, height, width四个变量。其中list表示检测到的人脸,即list的size就是人脸的个数,而每一个人脸在图片中的位置是(x, y, height, width)。
为了能让咱们更直观地看出来检测结果,咱们将这些人脸框出来:
for (x, y, w, h) in faces: cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
如今咱们已经经过摄像头检测到人脸了,可是咱们真正须要的是否是一张静态的图片,咱们须要的是一个能检测的实时动态视频流。所以咱们加一个循环,而后不断的检测,最终在显示在新窗口中。
detector = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') cap = cv2.VideoCapture(0) while True: ret, img = cap.read() gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) faces = detector.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.imshow('frame', img) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows()
须要注意的是,结尾用了waitKey和ord实现了按q退出的功能,就是每一毫秒都在检测键盘有没有按下了q,要是按下了就退出循环了。接下来就释放资源。
在本文中,咱们学习了如何使用Python中的OpenCV,即经过代码写了一我的脸检测的程序。咱们温习或学习了这些知识点:
P.S. 大家发现了XML那里有一个叫猫脸识别的文件吗!!!
先这样吧