手把手 Golang 实现静态图像与视频流人脸识别

说起人脸识别,大家首先想到的实现方式应该是 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.datdlib_face_recognition_resnet_model_v1.dat,在 go-face-test 目录下下载相应的测试数据。

git clone https://github.com/Kagami/go-face-testdata testdata

最终的项目结构应该如图。

img

代码实现

首先,我们利用代码检查环境是否正常。初始化识别器,释放资源。

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 同级目录下。

img

如你所见,现在什么都没有,只有一张图片,接下来我们要让计算机计算图片中的人脸数量。

package main

import (
	"fmt"
	"log"

	"github.com/Kagami/go-face"
)

const dataDir = "testdata"

// testda
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值