Skip to content

Instantly share code, notes, and snippets.

@neil-mao
Last active December 16, 2023 13:57
Show Gist options
  • Select an option

  • Save neil-mao/b4d14ce901cd50a355e638dfb7bb3cad to your computer and use it in GitHub Desktop.

Select an option

Save neil-mao/b4d14ce901cd50a355e638dfb7bb3cad to your computer and use it in GitHub Desktop.
ArcFace SDK
package arcsdkv3
import (
"image"
"log"
arcSdk "github.com/windosx/face-engine/v3"
)
type ArcSdkV3 struct {
AppId string
Key string
//
engine *arcSdk.FaceEngine
}
func NewArcSdkV3(appId string, key string) (*ArcSdkV3, error) {
sdk := ArcSdkV3{
AppId: appId,
Key: key,
}
err := sdk.Init()
if err != nil {
return nil, err
}
return &sdk, nil
}
func (sdk *ArcSdkV3) Init() error {
// 激活SDK
if err := arcSdk.Activation(sdk.AppId, sdk.Key); err != nil {
log.Println("Error:init", err)
return err
}
// 初始化引擎
engine, err := arcSdk.NewFaceEngine(arcSdk.DetectModeImage,
arcSdk.OrientPriority0,
12,
50,
arcSdk.EnableFaceDetect|arcSdk.EnableFaceRecognition|arcSdk.EnableFace3DAngle|arcSdk.EnableLiveness|arcSdk.EnableIRLiveness|arcSdk.EnableAge|arcSdk.EnableGender)
if err != nil {
log.Println("Error:init", err)
return err
}
sdk.engine = engine
version := engine.GetVersion()
log.Println("init sdk:", version.Version, version.BuildDate, version.CopyRight)
return nil
}
func (sdk *ArcSdkV3) Close() error {
log.Println("destory sdk")
if sdk.engine != nil {
// 销毁引擎
if err := sdk.engine.Destroy(); err != nil {
log.Println("Error:close", err)
return err
}
}
return nil
}
func (sdk *ArcSdkV3) DectectRGB(rgba *image.NRGBA) (*arcSdk.MultiFaceInfo, error) {
bound := rgba.Bounds()
width := bound.Dx()
height := bound.Dy()
newWidth := width - width%4
// resizeRect := image.Rect(0, 0, resizeWidth, resizeHeight)
// resizeImg := image.NewNRGBA(resizeRect)
// draw.BiLinear.Scale(resizeImg, resizeRect, rgba, bound, draw.Over, nil)
//log.Println("resize .....:", resizeRect.Bounds())
//src = resizeImg
var bgrData []uint8
for x := 0; x < height; x++ {
for y := 0; y < newWidth; y++ {
c := rgba.At(x, y)
r, g, b, _ := c.RGBA()
bgrData = append(bgrData, uint8(b), uint8(g), uint8(r))
}
}
// 检测人脸
info, err := sdk.engine.DetectFaces(newWidth, height, arcSdk.ColorFormatBGR24, bgrData)
if err != nil {
log.Println("Dectect Error:", err)
return nil, err
}
return &info, nil
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment