general

前不久从知乎上爬了一些用户数据,想过滤掉非真实用户头像,于是就想到了opencv

Installation

配置opencv环境是一门玄学,跌跌撞撞遇到很多坑。最后还好找到了一个正确的方法。下面说下mac配置好opencv3的最好方法:

  1. 安装Homebrew,这个不用说,现在基本mac都会装
  2. 用brew安装opencv3:
    1
    2
    brew tap homebrew/science  
    brew install opencv3 --with-contrib
    如果直接brew install opencv的话,安装的是opencv2,在使用findContours函数的时候会报错Assertion failed,所以还是安装opencv3吧,还有国内速度比较慢,翻墙了也慢,所以还是耐心等待下吧。
  3. 源码CUDA安装opencv3:
    这个麻烦一点,不细表,见传送门:http://www.pyimagesearch.com/2015/06/15/install-opencv-3-0-and-python-2-7-on-osx/
  4. 测试是否安装好:
    1
    2
    python -c "import cv2;  print cv2.__version__"
    #显示3.1.0就是装好了,显示其他报错的话,pip安装相关包就可以了

    OpenCV face detection witch python

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    import cv2
    import numpy

    face_cascade = cv2.CascadeClassifier("/usr/local/opt/opencv3/share/OpenCV/haarcascades/haarcascade_frontalface_default.xml")

    image = cv2.imread("zhihu_img/8b3d3864dcfc857e522e1dc00f7e7804.jpg")

    dst = cv2.resize(image, (255, 255), interpolation = cv2.INTER_CUBIC)

    gray = cv2.cvtColor(dst, cv2.COLOR_BGR2GRAY)

    faces = face_cascade.detectMultiScale(gray, 1.2, 5)

    for (x, y, w, h) in faces:
    cv2.rectangle(dst, (x, y), (x+w, y+h), (0, 255, 0), 2)

    cv2.imshow('YCM', dst)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    代码解释:
  5. cv2.CascadeClassifier('xxxxx.xml')haarcascade_frontalface_default.xml 是用于脸部识别的特征文件
  6. cv2.resize(image, (255, 255), interpolation = cv2.INTER_CUBIC)把图片像素限制到255*255
  7. detectMultiScale(image,scaleFactor,minNeighbors,flags,minSize,maxSize) 这个方法最终返回值为识别出的矩阵框[x, y, w, h],(x,y)左上角起始坐标,w宽,h高。scaleFactor:前后两次相继的扫描中,搜索窗口的比例系数.例如1.1指将搜索窗口依次扩大10%。图片小的时候,比例系数尽量小能提高准确率。minNeighbors:构成检测目标的相邻矩形的最小个数。一般使用2or3,为0时返回所有的被检候选矩形框。
  8. cv2.rectangle在图片上画出矩形框

final