GOLANG gocv进行人脸识别之人脸检测

gocv是一个基于OPENCV的golang项目。

gocv首页是:https://gocv.io/

想要用gocv进行人脸检测,首先得安装gocv, 官网内有详细的安装步骤,这里就不重复了。

gocv内的函数与opencv的函数名是一样的,差别在于参数的不一样。因为自己没有学过opencv,对opencv的函数不是很熟悉,所以就依葫芦画瓢,百度出py或者C++的人脸检测的例子照着写。

     要进行人脸检测,首先得有图片, 在这里我们可以选择打开电脑的摄像头来获取图片:

  

webcam, err := gocv.OpenVideoCapture(deviceID)

    if err != nil {

        fmt.Printf("error opening video capture device: %v\n", deviceID)

        return

    }

    defer webcam.Close()

img := gocv.NewMat()

    defer img.Close()

if ok := webcam.Read(&img); !ok {

            fmt.Printf("Device closed: %v\n", deviceID)

            return

        }

        if img.Empty() {

            continue

        }

函数OpenVideoCapture的功能是打开一个摄像头设备, deviceID表示要打开的摄像头设备号,一般为0. 函数NewMat()的功能是创建一个图片变量,就是opencv里的MAT用来存放图片,然后用 webcam.Read(&img)来把摄像头读取到的图片加载进图片变量中。

    如果电脑没有摄像头或者想对图片进行检测,我们可以直接用gocv.IMRead(file, int)函数来打开一张图片,file是图片的位置地址, int为打开图片的方式, -1为全彩,0为灰度等等。

    在对图片进行检测之前我们要先加载检测模型, 

classifier := gocv.NewCascadeClassifier()

    defer classifier.Close()

    if !classifier.Load(xmlFile) {

        fmt.Printf("Error reading cascade file: %v\n", xmlFile)

        return

    }

rects := classifier.DetectMultiScale(img)

函数gocv.NewCascadeClassifier()会返回一个分类器,然后用 classifier.Load(xmlFile)来加载分类文件,其中分来文件haarcascade_frontalface_default.xml可以在opencv的github项目内找到,加载完分类器后就可以使用 classifier.DetectMultiScale(img)函数对图片进行检测,该函数会返回检测到的人脸的两个点对角点的坐标,我们可以利用该坐标对图片进行切割或者画边框之类的操作。

   人脸的剪切。

  当我们拿到人脸的两个对角坐标后,就可以使用img.Region()函数对人脸进行剪切, 该函数会返回坐标内的一张图片,我们剪切出人脸图片后就可以对该图片进一步的处理,以实现人脸识别的功能。

你可能感兴趣的:(gocv)