zl程序教程

您现在的位置是:首页 >  后端

当前栏目

python中使用OpenCV进行人脸检测的例子

PythonOpencv人脸 使用 进行 检测 例子
2023-06-13 09:15:25 时间

OpenCV的人脸检测功能在一般场合还是不错的。而ubuntu正好提供了python-opencv这个包,用它可以方便地实现人脸检测的代码。

写代码之前应该先安装python-opencv:

复制代码代码如下:


$sudoapt-getinstallpython-opencv

具体原理就不多说了,可以参考一下这篇文章。直接上源码。

复制代码代码如下:


#!/usr/bin/python
#-*-coding:UTF-8-*-

#face_detect.py

#FaceDetectionusingOpenCV.Basedonsamplecodefrom:
#http://python.pastebin.com/m76db1d6b

#Usage:pythonface_detect.py<image_file>

importsys,os
fromopencv.cvimport*
fromopencv.highguiimport*
fromPILimportImage,ImageDraw
frommathimportsqrt

defdetectObjects(image):
   """Convertsanimagetograyscaleandprintsthelocationsofanyfacesfound"""
   grayscale=cvCreateImage(cvSize(image.width,image.height),8,1)
   cvCvtColor(image,grayscale,CV_BGR2GRAY)

   storage=cvCreateMemStorage(0)
   cvClearMemStorage(storage)
   cvEqualizeHist(grayscale,grayscale)

   cascade=cvLoadHaarClassifierCascade(
       "/usr/share/opencv/haarcascades/haarcascade_frontalface_default.xml",
       cvSize(1,1))
   faces=cvHaarDetectObjects(grayscale,cascade,storage,1.1,2,
       CV_HAAR_DO_CANNY_PRUNING,cvSize(20,20))

   result=[]
   forfinfaces:
       result.append((f.x,f.y,f.x+f.width,f.y+f.height))

   returnresult

defgrayscale(r,g,b):
   returnint(r*.3+g*.59+b*.11)

defprocess(infile,outfile):

   image=cvLoadImage(infile);
   ifimage:
       faces=detectObjects(image)

   im=Image.open(infile)

   iffaces:
       draw=ImageDraw.Draw(im)
       forfinfaces:
           draw.rectangle(f,outline=(255,0,255))

       im.save(outfile,"JPEG",quality=100)
   else:
       print"Error:cannotdetectfaceson%s"%infile

if__name__=="__main__":
   process("input.jpg","output.jpg")