GoFly快速开发框架集成纯Go语言开发人脸检测、瞳孔/眼睛定位与面部特征检测插件-助力你快速开发项目

举报
yd_267367847 发表于 2024/12/02 10:35:02 2024/12/02
【摘要】 开发纯go插件的原因是因为目前 Go 生态系统中几乎所有现有的人脸检测解决方案都是纯粹绑定到一些 C/C++ 库,如​​OpenCV​​或​​​dlib​​​,但通过​​​cgo​​​调用 C 程序会引入巨大的延迟,并在性能方面产生显著的权衡。此外,在许多情况下,在各种平台上安装 OpenCV 是很麻烦的。使用纯Go开发的插件不仅在开发时方便,在项目部署和项目维护也能省很多时间精力。

前言​

开发纯go插件的原因是因为目前 Go 生态系统中几乎所有现有的人脸检测解决方案都是纯粹绑定到一些 C/C++ 库,如 ​​OpenCV​​ 或 ​​​dlib​​​,但通过 ​​​cgo​​​ 调用 C 程序会引入巨大的延迟,并在性能方面产生显著的权衡。此外,在许多情况下,在各种平台上安装 OpenCV 是很麻烦的。使用纯Go开发的插件不仅在开发时方便,在项目部署和项目维护也能省很多时间精力。

本插件为了解决上述挑战而设计开发的。首先,它完全基于纯Go语言实现,这意味着用户无需担心跨平台移植性问题,可以轻松地将项目部署到任何支持Go语言的环境中。其次,本插件内置了多种先进算法,能够在保证高精度的同时达到快速响应的效果,非常适合应用于实时性要求较高的场景中。再者,考虑到易用性,本插件提供了详尽的API文档以及GoFly后台在线体验的示例代码(如下图1和图2),即使是初学者也能快速掌握其使用方法。最后,本插件拥有活跃的社区支持,不断有新功能被加入进来,确保了其长期的生命力和发展潜力。总之,无论你是希望提高工作效率的专业开发者还是对新技术充满好奇的学生,本插件都将是您探索人脸识别世界的理想选择,可以作为学术研究和项目开发使用。


图1-GoFly后台在线体验人脸检测-外国人(黑人和白人)


图2-国人面部检测 

插件主要特性

  • 不需要安装OpenCV或任何第三方模块
  • 处理速度快
  • 无需图像预处理就可以检测
  • 无需计算积分图像,图像金字塔,HOG金字塔或任何其他类似的数据结构
  • 人脸检测基于二进制文件树结构中编码的像素强度比较
  • 快速检测平面内旋转面
  • 甚至可以通过眼镜检测到人脸
  • 瞳孔/眼睛定位
  • 面部标志点检测

插件使用场景预设

  • 识别用户上传的图片是不是头像
  • 根据返回的瞳孔/眼睛定位判断是否睡觉(疲劳驾驶)
  • 根据面部特征点可以判断脸上是否佩戴口罩
  • 综合检测数据可以用于上机考试中考生是否离开摄像头、专注于考试(防止作弊)等动作

其他更多使用场景大家可根据插件返回的数据和返回标记好的图片做相应功能,如:把标记出的人脸截下来做相似性比较、对比识别出的面部特征的人脸进行补光美白的操作。

插件简介

插件基本功能有人脸检测、瞳孔定位及面部标志点识别方面功能。插件居于Pigo封装改造,让gofly框架使用者能快速使用人脸识别等功能。

​Pigo库凭借其纯Go语言编写的优势,不仅解决了现有解决方案中跨平台移植性差的问题,还通过丰富的代码示例降低了学习门槛,使得开发者能够快速上手并集成到自己的项目中。无论是对于专业开发者还是初学者而言,Pigo都展现出了极高的实用价值与广阔的应用前景。随着技术的不断进步与社区的持续贡献,相信Pigo库将在未来为更多领域带来革命性的变革。

插件封装背景

在当今这个数字化时代,人脸识别技术正以前所未有的速度改变着我们的生活。从安全监控到智能解锁,从虚拟现实体验到医疗健康监测,其应用场景广泛且深入。然而,在众多编程语言中,Go语言以其简洁高效的特性受到了越来越多开发者的青睐。但遗憾的是,在Go语言领域内,高质量的人脸识别库却相对稀缺,大多数解决方案都需要依赖于底层的C或C++实现。这不仅增加了跨平台使用的复杂性,也限制了Go语言本身优势的发挥。正是基于这样的背景下,为大家封装这个插件。它完全由Go语言编写而成,无需外部依赖即可实现人脸检测、瞳孔定位及面部特征点识别等功能,极大地丰富了Go语言在图像处理领域的工具箱。

检测算法相关论文 

插件开发使用教程

 使用插件直接到gofly快速开发框架后台:开发者工具->代码仓一键安装接口。

插件结构

插件核心功能在utils\plugin\pigoface包中,为了方便大家熟悉插件功能,我们在后端做了演示demo,演示前后端代码在app\business\pigoface和src\views\pigoface如果不需演示代码在实际使用中可手动删除(删除不影响使用)。

插件目录结构:

├─ pigoface             # 在business模块下的类名
│ ├─ cascade           # 模型数据
│ ├─ core              # 插件功能核心代码
│ ├─ testdata          # 存放测试图片(生成打包可删除)
│ └─ main.go           # 封装对core功能函数调用-业务实践
│ 
└─ pigoface.go          # 插件实例 提供给app下调用

插件调用

在app业务目录中我们直接通过plugin扩展插件对象对用。代码如下:

params := gf.Map{"source": "/utils/plugin/pigoface/testdata/leijun.png", "outImg": true, "markEyes": true, "flploc": true}
data, img, err := plugin.NewPigoface().Main().EntryExe(params)

如果ide不会自己import导入plugin 则手动输入:

import (
    +++
    "gofly/utils/plugin"
)

插件接口参数说明

 下面给出识别使用的参数说明,方便大家在使用时可以快速上手,减少自己摸索时间:  

参数名

名称

类型

默认值

描述

source

检测的图片路径

string



outImg

是否生成图片

bool



destination

生成图片路径

string

resource/uploads/pigoface


cascadeFile

级联二进制文件

string

utils/plugin/pigoface/cascade/facefinder

人脸识别数据模型

minSize

脸的最小尺寸

int

20


maxSize

脸的最大尺寸

int

1000


shiftFactor

按百分比移动检测窗口

float64

0.1


scaleFactor

按百分比缩放检测窗口

float64

1.1


angle

级联旋转角度

float64

0.0

0.0 表示 0 弧度,1.0 表示 2*pi 弧度

iouThreshold

交并比(IoU)阈值

float64

0.2


dbIou

​双重交并比去重

bool

false

两次去重,人多时去重效果更好

isCircle

圆形人脸标记

bool

false

生成的图片用红色框出脸,默认矩形

puploc

瞳孔/眼睛定位

bool

true


puplocCascade

瞳孔/眼睛定位级联文件

string

utils/plugin/pigoface/cascade/puploc

识别眼睛的数据模型

markEyes

标记检测眼睛

bool

false

生成图片把检测到眼睛用黄方块框出

flploc

面部特征点检测

bool

false

开启面部特征点检测

flplocDir

面部特征点级联文件的目录

string

utils/plugin/pigoface/cascade/lps

识别面板特征的数据模型

演示api接口调用示例代码

你开在gofly快速开发框架app下找个地方添加一个测试文件,如创建createcode目录新建pigoface.go,复制下面代码进去即可测试。

package createcode

import (
    "gofly/utils/gf"
    "gofly/utils/plugin"
)

// 人脸检测
type Pigoface struct{}

func init() {
    fpath := Pigoface{}
    gf.Register(&fpath, fpath)
}

// 人脸识别接口测试
func (api *Pigoface) TestFace(c *gf.GinCtx) {
    //参数
    param, _ := gf.RequestParam(c)
    if val, ok := param["source"]; !ok || gf.String(val) == "" {
        gf.Failed().SetMsg("参数source不能为空").Regin(c)
        return
    }
    params := gf.Map{"source": param["source"], "outImg": true, "markEyes": true, "flploc": true}
    data, img, err := plugin.NewPigoface().Main().EntryExe(params)
    if err != nil {
        gf.Failed().SetMsg(err.Error()).Regin(c)
        return
    }
    gf.Success().SetMsg("人脸识别接口测试,导出图片地址:" + img).SetData(data).Regin(c)
}

插件开发资料

插件代码详情:插件代码下及介绍

插件开发文档:人脸检测、瞳孔/眼睛定位与面部标志点检测插件开发文档

总结

通过本插件使用,我们不仅了解了Go语言写的Pigo库在人脸检测、瞳孔定位及面部标志点识别方面的强大功能,还深入探讨了其背后的实现原理与应用场景。Pigo库凭借其纯Go语言编写的优势,不仅解决了现有解决方案中跨平台移植性差的问题,还通过丰富的代码示例降低了学习门槛,使得开发者能够快速上手并集成到自己的项目中。无论是对于专业开发者还是初学者而言,Pigo都展现出了极高的实用价值与广阔的应用前景。随着技术的不断进步与社区的持续贡献,相信Pigo库将在未来为更多领域带来革命性的变革。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。