由于公司是虹软的重度用户,出于工作需要和个人兴趣,寻思着用golang封装一下C++的SDK,利用golang的跨平台特性达到跨平台的效果(当然前提是SDK支持的平台)
推荐使用go module的方式进行安装(需要哪个版本修改版本号即可):
go get -u -d github.com/windosx/face-engine/v4Linux下可以通过对应的包管理器进行安装,Windows下根据32/64位系统进行选择安装MinGW或者MinGW-w64
- Linux:将
libarcsoft_face.so、libarcsoft_face_engine.so放入/usr/lib64目录下 - Windows:将
libarcsoft_face.dll、libarcsoft_face_engine.dll放入MinGW安装目录下的lib目录中,同时需要将这两个文件放入%WINDIR%或者%WINDIR/System32%目录下
├─examples
│ └─example1.go
├─include
│ ├─amcomdef.h
│ └─arcsoft_face_sdk.h
│ └─asvloffscreen.h
│ └─merror.h
├─util
│ └─image_util.go
├─go.mod
├─engine.go
├─mask.jpg
├─test.jpg
examples目录中是示例代码
include是SDK的头文件
util下的image_util.go是使用golang原生API处理图片的工具
engine.go是封装的SDK
两张JPEG格式的图片是给示例代码用的package main
import (
"fmt"
. "github.com/windosx/face-engine/v4""github.com/windosx/face-engine/v4/util"
)
// 获取处理好的图片信息varimageInfo=util.GetResizedImageInfo("./mask.jpg")
funcmain() {
// 激活SDKiferr:=OnlineActivation("YourAppID", "YourSDKKey", "YourActiveCode"); err!=nil {
fmt.Printf("%#v\n", err)
return
}
// 初始化引擎engine, err:=NewFaceEngine(DetectModeImage,
OrientPriority0,
10, // 4.0最大支持10个人脸EnableFaceDetect|EnableFaceRecognition|EnableFace3DAngle|EnableLiveness|EnableIRLiveness|EnableAge|EnableGender|EnableMaskDetect|EnableFaceLandMark)
iferr!=nil {
fmt.Printf("%#v\n", err)
return
}
deviceInfo, err:=GetActiveDeviceInfo()
iferr!=nil {
fmt.Printf("%#v\n", err)
}
fmt.Printf("设备信息:%s\n", deviceInfo)
// 检测人脸info, err:=engine.DetectFaces(imageInfo.Width, imageInfo.Height, ColorFormatBGR24, imageInfo.DataUInt8)
iferr!=nil {
fmt.Printf("%#v\n", err)
return
}
// 处理人脸数据iferr=engine.Process(imageInfo.Width, imageInfo.Height, ColorFormatBGR24, imageInfo.DataUInt8, info, EnableAge|EnableGender|EnableFace3DAngle|EnableLiveness|EnableMaskDetect|EnableFaceLandMark); err!=nil {
fmt.Printf("%#v\n", err)
return
}
// 获取年龄ageInfo, err:=engine.GetAge()
iferr!=nil {
fmt.Printf("%#v\n", err)
return
}
fmt.Printf("ageInfo: %v\n", ageInfo)
// 获取口罩信息maskInfo, err:=engine.GetMask()
iferr!=nil {
fmt.Printf("%#v\n", err)
return
}
fmt.Printf("口罩信息:%#v\n", maskInfo)
// 获取额头点位landMark, err:=engine.GetFaceLandMarkInfo()
iferr!=nil {
fmt.Printf("%#v\n", err)
return
}
fmt.Printf("额头点位:%#v\n", landMark)
// 销毁引擎iferr=engine.Destroy(); err!=nil {
fmt.Printf("%#v\n", err)
return
}
}- 通过
FaceFeatureExtract或FaceFeatureExtractEx方法提取到人脸特征信息,使用完毕后应调用其Release()方法释放内存,避免导致内存溢出,这是由于cgo的一些局限性导致的。
(如果您想分享自己的示例,欢迎PR)
本项目使用MIT协议,如果对您有帮助,请点亮star支持一下 :)