GoFly快速开发框架集成纯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 库将在未来为更多领域带来革命性的变革。

温馨提示:我们分享的文章是给需要的人,不需要的人请绕过,文明浏览,误恶语伤人!

本作品采用《CC 协议》,转载必须注明作者和本文链接
GoFly 全栈开发社区
未填写
文章
18
粉丝
4
喜欢
11
收藏
12
排名:1267
访问:3382
私信
所有博文
社区赞助商