当前位置: 首页 > news >正文

纯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 createcodeimport ("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库将在未来为更多领域带来革命性的变革。

相关文章:

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

前言​ 开发纯go插件的原因是因为目前 Go 生态系统中几乎所有现有的人脸检测解决方案都是纯粹绑定到一些 C/C 库,如 ​​OpenCV​​ 或 ​​​dlib​​​,但通过 ​​​cgo​​​ 调用 C 程序会引入巨大的延迟,并在性能方面产生显著的权衡。…...

postman使用正则表达式提取数据实战篇!

之前篇章中postman多接口关联使用的是通过JSON提取器的方式进行提取。 除了JSON提取器提取数据外还可通过另一种方式——正则表达式来提取数据。 1、使用正则表达式提取器实现接口关联,match匹配 正则匹配表达式将需要提取的字段key:value都放入表达式中&#xff…...

ipmitool使用详解(三)-解决各种dell、hp服务器无法ipmitool连接问题

报错 [root@localhost ~]# ipmitool -H 10.1.2.41 -I lan -U admin -P "password123" lan print 1 Get Session Challenge command failed Error: Unable to establish LAN session Error: Unable to establish IPMI v1.5 / RMCP session [root@localhost ~]# ipmit…...

AWS EC2设置用户名密码登录

使用AWS EC2 设置用户名密码登录 步骤 1: 访问控制台 登录到AWS管理控制台。导航至 EC2 Dashboard。在左侧导航栏中选择 Instances。选择需要配置的实例。使用 EC2 Instance Connect 访问实例控制台。 步骤 2: 切换到 root 用户 打开终端或命令行工具,通过SSH连…...

BurpSuite安装教程(详细!!附带下载链接)

声明 学习内容来自 B 站UP主泷羽sec,如涉及侵权马上删除文章。 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负。 ✍🏻作者简介:致…...

MIPS寄存器文件设计实验

今天写MIPS寄存器文件设计实验,同时复习一下MIPS这块地方 实验要求: 一、寄存器的作用 想象一下,你正在厨房准备做一顿大餐。你需要用到各种食材和工具,比如刀、锅、砧板,还有食材本身,比如肉、菜、调料等…...

uniapp使用扩展组件uni-data-select出现的问题汇总

前言 不知道大家有没有学习过我的这门课程那,《uniCloud云开发Vue3版本官方推荐用法》,这么课程已经得到了官方推荐,想要快速上手unicloud的小伙伴们,可以学习一下这么课程哦,不要忘了给一键三连呀。 在录制这门课程…...

反向代理模块开发

1 概念 1.1 反向代理概念 反向代理是指以代理服务器来接收客户端的请求,然后将请求转发给内部网络上的服务器,将从服务器上得到的结果返回给客户端,此时代理服务器对外表现为一个反向代理服务器。 对于客户端来说,反向代理就相当于…...

海康面阵、线阵、读码器及3D相机接线说明

为帮助用户快速了解和配置海康系列设备的接线方式,本文将针对海康面阵相机、线阵相机、读码器和3D相机的主要接口及接线方法进行全面整理和说明。 一、海康面阵相机接线说明 海康面阵相机使用6-pin P7接口,其功能设计包括电源输入、光耦隔离信号输入输出…...

AI与ArcGIS Pro的地理空间分析和可视化

AI思维已经成为一种必备的能力,ArcGIS Pro3的卓越性能与ChatGPT的智能交互相结合,将会为您打造了一个全新的工作流程! 那么如何将火热的ChatGPT与ArcGIS Pro3相结合,使我们无需自己进行复杂的编程,通过强大的ChatGPT辅助我们完成地…...

详解HTML5语言

文章目录 前言任务一 认识HTML5任务描述:知识一 HTML5基础知识 任务二 HTML 5语义元素任务描述:知识一 HTML5新增结构元素知识二 HTML5文本语义元素 总结 前言 HTML5是一个新的网络标准,现在仍处于发展阶段。目标是取代现有的HTML 4.01和XHT…...

docker compose一键启动ES集群和kibana

集群启用了XPACK后,只有第一次可以启动成功。要是宕机了。就启动不了了。(除非删除data目录所有数据)生产环境 启用了后 建议配置 自定义证书。 services:es01:image: "docker.elastic.co/elasticsearch/elasticsearch:7.17.25"co…...

遗传算法与深度学习实战(25)——使用Keras构建卷积神经网络

遗传算法与深度学习实战(25)——使用Keras构建卷积神经网络 0. 前言1. 卷积神经网络基本概念1.1 卷积1.2 步幅1.3 填充1.4 激活函数1.5 池化 2. 使用 Keras 构建卷积神经网络3. CNN 层的问题4. 模型泛化小结系列链接 0. 前言 卷积神经网络 (Convolution…...

pytest+allure生成报告显示loading和404

pytestallure执行测试脚本后,通常会在电脑的磁盘上建立一个临时文件夹,里面存放allure测试报告,但是这个测试报告index.html文件单独去打开,却显示loading和404, 这个时候就要用一些办法来解决这个报告显示的问题了。 用命令产生…...

为何划分 Vue 项目结构组件?划分结构和组件解决了什么问题?为什么要这么做?

在一个大型 Vue 项目中,合理的目录结构和组件划分至关重要。良好的结构可以提高开发效率,减少维护成本,并使得团队合作更加顺畅。下面我将详细讲解如何在 Vue 项目中进行目录结构和组件划分,并结合实际项目代码示例进行说明。 1. 为什么要划分结构和组件? 1.1 提高可维护…...

springboot中使用mongodb完成评论功能

pom文件中引入 <!-- mongodb --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> yml中配置连接 data:mongodb:uri: mongodb://admin:1234561…...

Dubbo的RPC泛化调用

目录 一、RPC泛化调用的应用场景 二、Dubbo RPC泛化调用的实现原理 三、Dubbo RPC泛化调用的实现步骤 四、示例代码 五、泛化调用怎么发现提供该接口的服务及服务的IP和端口&#xff1f; Dubbo的RPC泛化调用是一种在调用方没有服务方提供的API的情况下&#xff0c;对服务方…...

【k8s深入理解之 Scheme】全面理解 Scheme 的注册机制、内外部版本、自动转换函数、默认填充函数、Options等机制

参考 【k8s基础篇】k8s scheme3 之序列化_基于schema进行序列化-CSDN博客【k8s基础篇】k8s scheme4 之资源数据结构与资源注册_kubernetes 的scheam-CSDN博客常见问题答疑 【k8s深入理解之 Scheme 补充-1】理解 Scheme 中资源的注册以及 GVK 和 go 结构体的映射-CSDN博客【k8s深…...

接口性能优化宝典:解决性能瓶颈的策略与实践

目录 一、直面索引 &#xff08;一&#xff09;索引优化的常见场景 &#xff08;二&#xff09;如何检查索引的使用情况 &#xff08;三&#xff09;如何避免索引失效 &#xff08;四&#xff09;强制选择索引 二、提升 SQL 执行效率 &#xff08;一&#xff09;避免不必…...

雨晨 Windows Server 2025 数据中心 极简 26311.5000

文件: 雨晨 Windows Server 2025 数据中心 极简 26311.5000 install.esd 大小: 1740910278 字节 修改时间: 2024年11月29日, 星期五, 19:00:20 MD5: 5B946B9DED569E04917E804B25A0F736 SHA1: E78BB430B3E0397F6ACFEB821CF85EA7CFB5A00F CRC32: B3F76BD7 常规制作旨在测试YCDIS…...

关于IDE的相关知识之三【插件安装、配置及推荐的意义】

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///C爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于ide插件安装、配置及推荐意义的相关内容…...

JSP+Servlet实现列表分页功能

分享一种最简单的JSPServlet实现分页的方式&#xff01; 旧&#xff1a;无分页功能的查询列表功能&#xff0c;仅供参考&#xff01; Servlet try {Connection conn null;PreparedStatement ps null;ResultSet rs null;List<Dept> arrayList null;conn DBUtil.get…...

操作系统存储器相关习题

1 为什么要配置层次式存储器? 设置多个存储器可以使存储器两端的硬件能并行工作&#xff1b; 采用多级存储系统特别是Cache技术&#xff0c;是减轻存储器带宽对系统性能影响的最佳结构方案&#xff1b; 在微处理机内部设置各种缓冲存储器&#xff0c;减轻对存储器存取的压力。…...

QUICK 调试camera-xml解析

本文主要介绍如何在QUICK QCS6490使能相机模组。QCS6490的相机基于CameraX的框架&#xff0c;只需通过配置XML文件&#xff0c;设置相机模组的相关参数&#xff0c;就可以点亮相机。本文主要介绍Camera Sensor Module XML和Camera Sensor XML配置的解析&#xff0c;这中间需要c…...

【linux】shell脚本编写基础

shell 脚本关键字&#xff1a; 1、变量定义:前后不能空格 输入&#xff1a; zhao"Joe" echo ${zhao} echo "I am ${zhao}" 输出&#xff1a; yuxin I am Joe2、echo 输出 输入&#xff1a; echo "123" 输出&#xff1a; 1233、readonly 定义变…...

STM32 外设简介

STM32 外设简介 STM32 是由意法半导体 (STMicroelectronics) 开发的一系列基于 ARM Cortex 内核的微控制器&#xff0c;广泛应用于嵌入式系统中。STM32 系列的一个重要特点是其丰富而强大的外设模块&#xff0c;支持多种接口和功能&#xff0c;能满足工业控制、物联网、消费电…...

Django-Vue3-Admin - 现代化的前后端分离权限管理系统

项目介绍 Django-Vue3-Admin是一个基于RBAC&#xff08;Role-Based Access Control&#xff09;模型的综合性基础开发平台&#xff0c;专注于权限控制&#xff0c;支持列级别的细粒度权限管理。该项目采用前后端分离架构&#xff0c;技术栈包括: 后端: Django Django REST …...

Cesium K-means自动聚合点的原理

Cesium K-means自动聚合点的原理 Cesium 是一个开源的 JavaScript 库&#xff0c;用于在 Web 环境中创建 3D 地球和地图应用。它能够处理地理空间数据&#xff0c;并允许开发者对大规模的地理数据进行可视化展示。在一些应用中&#xff0c;尤其是当处理大量地理坐标点时&#…...

Vue 项目中如何解决组件之间的循环依赖

前言 在大型 Vue 项目中&#xff0c;组件之间的关系可能会变得非常复杂&#xff0c;甚至会出现循环依赖的问题。循环依赖是指两个或多个模块互相依赖&#xff0c;形成一个闭环。这类问题会导致项目无法正常编译或运行&#xff0c;甚至可能引发意想不到的错误。本文将通过通俗易…...

交通流量预测:基于交通流量数据建立模型

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…...

制作一个网站的步骤/做广告推广哪个平台好

旅游2.0? qunar忽然成为了旅游电子商务的新庞儿,上线不到2个月&#xff0c;qunar.com在GOOGLE的PR值已经到了5&#xff0c;Alexa排名从全球的网站排名从60多万直线上升到1万多&#xff0c;在国内的网站排名第448名&#xff0c;在包括携程和艺龙在内的旅游在线网站排名第7,以至…...

重庆网站设计平台/痘痘怎么去除有效果

知识点: Canvas():创建一个空的画布&#xff0c;可以使用setBitmap()方法来设置具体的画布 Canvas(Bitmap bitmap):以bitmap对象创建一个画布&#xff0c;则将内容都绘制在Bitmap上&#xff0c;因此bitmap不能为Null Canvas(GL gl):在绘制3D效果时使用&#xff0c;与OpenGL相关…...

炫彩发光字制作免费网站/推广普通话宣传语

# 测试3 location / {root /usr/local/openresty/nginx/html/test3;index index.html index.htm;try_files $uri $uri/ /index.html; #解决页面刷新404问题 }...

宗亲网站建设建议/东莞网络公司电话

转自:http://www.maomao365.com/?p5586 摘要:下文主要讲述sql server表设计及脚本编写中&#xff0c;相关规范 ———————————数据表字段类型选择:字符类型根据长度选择合适的varchar nvarchar类型涉及金额的建议选择 money类型带小数位的建议使用 numeric decimal类型…...

网站建设与网站主机的选择/拼多多seo是什么意思

要想在CentOS中自动加载内核模块&#xff0c;需要在/etc/sysconfig/modules/目录中增加一个脚本&#xff0c;在此脚本中加载所需的模块。 下面是我所用的一个名为8021q.modules的脚本&#xff0c;用来在我的CentOS 5.3中自动加载802.1Q模块&#xff1a; #! /bin/sh/sbin/modinf…...

罗湖专业做网站公司/企业专业搜索引擎优化

转载一篇写的不错的用python flask实现Restapi 服务器的文章&#xff0c;照着一步步做下来也没什么问题 http://www.cnblogs.com/vovlie/p/4178077.html 更详细的使用和介绍在原文&#xff0c;有时间再来慢慢研究吧https://blog.miguelgrinberg.com/post/the-flask-mega-tutori…...