说起人脸识别,大家首先想到的实现方式应该是 Python 去做相关的处理,因为相关的机器学习框架,库都已经封装得比较好了。但是我们今天讨论的实现方式换成 Golang,利用 Golang 去做静态图像和视频流人脸识别的相应处理。
静态图像人脸识别
首先我们来进行静态的人脸识别,Golang 这边相较于 Python 社区来说相对少一些,不过依然有一些优秀的库可以供我们使用。今天我们用到的就是 go-face 这个库。该库利用 dlib 去实现人脸识别,一个很受欢迎的机器学习工具集,它可以说是人脸识别中使用最多的软件包之一。在产学界有广泛应用,涵盖了机器人学,嵌入式设备,移动设备等等。在它官网的文档中提到在 Wild 基准测试中识别标记面部的准确度达到惊人的 99.4%,这也说明为什么它能得到广泛的应用。
在我们开始码代码之前,首先需要安装 dlib。Windows 平台相对麻烦一些,具体在官网有安装方案,这里我介绍两个平台。
Ubuntu 18.10+, Debian sid
最新版本的 Ubuntu 和 Debian 都提供合适的 dlib 包,所以只需要运行。
# Ubuntu
sudo apt-get install libdlib-dev libblas-dev liblapack-dev libjpeg-turbo8-dev
# Debian
sudo apt-get install libdlib-dev libblas-dev liblapack-dev libjpeg62-turbo-dev
macOS
确保安装了 Homebrew。
brew install dlib
创建项目及准备工作
在 GOPATH 的 src 目录下,创建项目文件,命令如下。
sudo makedir go-face-test
# 创建 main.go
sudo touch main.go
然后进入该目录下,生成 mod 文件。
sudo go mod init
调用该命令后,在 go-face-test 目录下应该已经生成了 go.mod 文件。
该库需要三个模型 shape_predictor_5_face_landmarks.dat, mmod_human_face_detector.dat 和 dlib_face_recognition_resnet_model_v1.dat,在 go-face-test 目录下下载相应的测试数据。
git clone https://github.com/Kagami/go-face-testdata testdata
最终的项目结构应该如图。

代码实现
首先,我们利用代码检查环境是否正常。初始化识别器,释放资源。
package main
import (
"fmt"
"github.com/Kagami/go-face"
)
const dataDir = "testdata"
// testdata 目录下两个对应的文件夹目录
const (
modelDir = dataDir + "/models"
imagesDir = dataDir + "/images"
)
func main() {
fmt.Println("Face Recognition...")
// 初始化识别器
rec, err := face.NewRecognizer(modelDir)
if err != nil {
fmt.Println("Cannot INItialize recognizer")
}
defer rec.Close()
fmt.Println("Recognizer Initialized")
}
编译然后运行代码。
sudo go run main.go
应该得到下面输出。
Face Recognition...
Recognizer Initialized
到这一步,我们已经成功的设置好了需要的一切。
检测图片中人脸数量
首先准备一张林俊杰的照片,放到任意目录下,为了演示方便,我放在了 main.go 同级目录下。

如你所见,现在什么都没有,只有一张图片,接下来我们要让计算机计算图片中的人脸数量。
package main
import (
"fmt"
"log"
"github.com/Kagami/go-face"
)
const dataDir = "testdata"
// testda

最低0.47元/天 解锁文章
765





