mac python+opencv实时人脸识别,并实时返回识别到的人脸数

一、关于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

会实时反馈人脸的数量和圈出摄像头里检测到的人脸啦!

你可能感兴趣的:(mac python+opencv实时人脸识别,并实时返回识别到的人脸数)