go调用封装虹软ArcFace人脸识别

WindOSX · · 1458 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

go调用封装虹软ArcFace人脸识别

一、项目简介

由于公司是虹软的重度用户,出于工作需要和个人兴趣,寻思着用golang封装一下C++的SDK,利用golang的跨平台特性达到跨平台的效果(当然前提是SDK支持的平台)

项目已经开源到github(传送门),支持的SDK版本有:v2.x v3.x v4.0.0

二、编译环境与运行环境的准备

1. 安装go版本SDK

推荐使用go module的方式进行安装(需要哪个版本修改版本号即可):

go get -u -d github.com/windosx/face-engine/v4

2. 安装gcc环境

Linux下可以通过对应的包管理器进行安装,Windows下根据32/64位系统进行选择安装MinGW或者MinGW-w64

3. 运行环境

  • Linux:将libarcsoft_face.solibarcsoft_face_engine.so放入/usr/lib64目录下
  • Windows:将libarcsoft_face.dlllibarcsoft_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"
)

// 获取处理好的图片信息
var imageInfo = util.GetResizedImageInfo("./mask.jpg")

func main() {
    // 激活SDK
    if err := 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)
    if err != nil {
        fmt.Printf("%#v\n", err)
        return
    }
    deviceInfo, err := GetActiveDeviceInfo()
    if err != nil {
        fmt.Printf("%#v\n", err)
    }
    fmt.Printf("设备信息:%s\n", deviceInfo)
    // 检测人脸
    info, err := engine.DetectFaces(imageInfo.Width, imageInfo.Height, ColorFormatBGR24, imageInfo.DataUInt8)
    if err != nil {
        fmt.Printf("%#v\n", err)
        return
    }
    // 处理人脸数据
    if err = 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()
    if err != nil {
        fmt.Printf("%#v\n", err)
        return
    }
    fmt.Printf("ageInfo: %v\n", ageInfo)
    // 获取口罩信息
    maskInfo, err := engine.GetMask()
    if err != nil {
        fmt.Printf("%#v\n", err)
        return
    }
    fmt.Printf("口罩信息:%#v\n", maskInfo)
    // 获取额头点位
    landMark, err := engine.GetFaceLandMarkInfo()
    if err != nil {
        fmt.Printf("%#v\n", err)
        return
    }
    fmt.Printf("额头点位:%#v\n", landMark)
    // 销毁引擎
    if err = engine.Destroy(); err != nil {
        fmt.Printf("%#v\n", err)
        return
    }
}

五、注意事项

  1. 通过FaceFeatureExtractFaceFeatureExtractEx方法提取到人脸特征信息,使用完毕后应调用其Release()方法释放内存,避免导致内存溢出,这是由于cgo的一些局限性导致的。

六、更多示例代码

(如果您想分享自己的示例,欢迎PR)

七、开源说明

本项目使用MIT协议,如果对您有帮助,请点亮star支持一下 :)


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:WindOSX

查看原文:go调用封装虹软ArcFace人脸识别

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1458 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传