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

前言​

开发纯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语言在图像处理领域的工具箱。

检测算法相关论文 

  • ​​基于基于像素强度比较的目标检测论文​​。
  • ​​使用随机树集成的眼睛瞳孔定位。​​
  • ​​面部特征点的快速定位。
  • Pigo插件官方网站

插件开发使用教程

 使用插件直接到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库将在未来为更多领域带来革命性的变革。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/926642.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

uniapp中父组件数组更新后与页面渲染数组不一致实战记录

简单描述一下业务场景方便理解: 商品设置功能,支持添加多组商品(点击添加按钮进行增加).可以对任意商品进行删除(点击减少按钮对选中的商品设置进行删除). 问题: 正常添加操作后,对已添加的任意商品删除后,控制台打印数组正常.但是与页面显示不一致.已上图为例,选中尾…

【Figma】中文版安装

一、软件安装包下载 打开官网链接https://www.figma.com/downloads/下载相应安装包 或使用我已下载好的链接: FigmaSetup.exe 链接: https://pan.baidu.com/s/113eQ8JRETdeOwUp2B3uieA?pwd4vep 二、安装流程 1.点击安装包 2.选择在浏览器登录 3.输入账号密码&a…

SpringBoot框架在宠物领养系统中的应用

摘 要 如今社会上各行各业,都在用属于自己专用的软件来进行工作,互联网发展到这个时候,人们已经发现离不开了互联网。互联网的发展,离不开一些新的技术,而新技术的产生往往是为了解决现有问题而产生的。针对于宠物领养…

SpringAi整合大模型(进阶版)

进阶版是在基础的对话版之上进行新增功能。 如果还没弄出基础版的,请参考 https://blog.csdn.net/weixin_54925172/article/details/144143523?sharetypeblogdetail&sharerId144143523&sharereferPC&sharesourceweixin_54925172&spm1011.2480.30…

redis快速进门

、数据库类型认识 关系型数据库 关系型数据库是一个结构化的数据库,创建在关系模型(二维表格模型)基础上,一般面向于记录。 SQL 语句(标准数据查询语言)就是一种基于关系型数据库的语言,用于执行…

爬虫笔记24——纷玩岛自动抢票脚本笔记

纷玩岛自动抢票,协议抢票思路实现 一、获取Authorization凭证二、几个关键的参数三、几个关键的接口获取参数v,这个参数其实可以写死,可忽略通过价位获取演出的参数信息获取观演人信息,账号提前录入即可提交订单接口 先看实现图&a…

Netty的心跳机制怎么实现的?

大家好,我是锋哥。今天分享关于【Netty的心跳机制怎么实现的?】面试题。希望对大家有帮助; Netty的心跳机制怎么实现的? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Netty 的心跳机制用于维持客户端和服务器之间的…

RHEL7+Oracle11.2 RAC集群-多路径(multipath+udev)安装步骤

RHEL7Oracle11.2RAC集群-多路径(multipathudev)安装 配置虚拟存储 使用StarWind Management Console软件,配置存储 dggrid1: 1g*3 Dggrid2: 1g*3 Dgsystem: 5g*1 系统表空间,临时表空间,UNDO,参数文件…

Sybase数据恢复—Sybase数据库无法启动,Sybase Central连接报错的处理案例

Sybase数据库数据恢复环境: Sybase数据库版本:SQL Anywhere 8.0。 Sybase数据库故障&分析: Sybase数据库无法启动。 错误提示: 使用Sybase Central连接报错。 数据库数据恢复工程师经过检测,发现Sybase数据库出现…

数学题转excel;数学题库;数学试卷转excel;大风车excel

一、数学试卷转excel 有些需要刷题的朋友,需要将题库数学题转为excel格式,便于管理 前端时间帮一位朋友实现了数学题转excel,包括选择题、填空题、分析题 示例: 二、问题 数学题是最难以处理的试题,理由如下 1、有…

开源项目:纯Python构建的中后台管理系统

来源:Python大数据分析 费弗里 大家好我是费老师,目前市面上有很多开源的「中后台管理系统」解决方案,复杂如「若依」那种前端基于Vue,后端基于Java的框架,虽然其提供了较为完善的一整套前后端分离权限管理系统解决方…

PS的功能学习

背景差色较大,就魔棒 魔棒的连续就是倒水点的跨越问题 魔棒的容差的选择就有点看经验了,看颜色的统一程度选择 Ctrl D 取消当前所有的选区 至于快速选择工具,和对象选择工具也差不多,只不过控制范围变成了一块一块的&#x…

linux一键部署apache脚本

分享一下自己制作的一键部署apache脚本: 脚本已和当前文章绑定,请移步下载(免费!免费!免费!) (单纯的分享!) 步骤: 将文件/内容上传到终端中 …

DataWhale—PumpkinBook(TASK07支持向量机)

课程开源地址及相关视频链接:(当然这里也希望大家支持一下正版西瓜书和南瓜书图书,支持文睿、秦州等等致力于开源生态建设的大佬✿✿ヽ(▽)ノ✿) Datawhale-学用 AI,从此开始 【吃瓜教程】《机器学习公式详解》(南瓜…

排序算法之插入排序篇

插入排序 思路&#xff1a; 就是将没有排序的元素逐步地插入到已经排好序的元素后面&#xff0c;保持元素的有序 视频的实现过程如下&#xff1a; 插入排序全过程 代码实现过程如下&#xff1a; public static void Insertion(int[] arr) { for (int i 1; i < arr.length…

3DMAX星空图像生成器插件使用方法详解

3DMAX星空图像生成器插件&#xff0c;一键生成星空或夜空的二维图像。它可用于创建天空盒子或空间场景&#xff0c;或作为2D艺术的天空背景。 【主要特点】 -单击即可创建星空图像或夜空。 -星数、亮度、大小、形状等参数。 -支持任何图像大小&#xff08;方形&#xff09;。…

Flutter 权限申请

这篇文章是基于permission_handler 10.2.0版本写的 前言 在App开发过程中我们经常要用到各种权限&#xff0c;我是用的是permission_handler包来实现权限控制的。 pub地址&#xff1a;https://pub.dev/packages/permission_handler permission_handler 权限列表 变量 Androi…

前端学习笔记之FileReader

概念 FileReader接口允许网页应用程序异步读取用户计算机上存储的文件&#xff08;或原始数据缓冲区&#xff09;的内容&#xff0c;使用File或Blob对象来制定要读取的文件或数据。 File对象可以通过用户使用<input>元素选择文件后返回的FileList对象获得&#xff0c;或…

通过shell脚本分析部署nginx网络服务

要求 1.接收用户部署的服务名称 2.判断服务是否安装 已安装&#xff1b;自定义网站配置路径为/www&#xff1b;并创建共享目录和网页文件&#xff1b;重启服务 没有安装&#xff1b;安装对应的软件包 3.测试 判断服务是否成功运行&#xff1b; 已运行&#xff0c;访问网站…

Java基础——(三)对象和类

1. 面向对象程序设计概述 1.1 OOP OOP&#xff1a;Object Oriented Programming&#xff0c;面向对象编程&#xff1b;OOD&#xff1a;Object Oriented Design&#xff0c;面向对象设计&#xff1b;OOA&#xff1a;Object Oriented Analyse&#xff0c;面向对象分析。 面向对…