pigo

GitHub
4.7k 324 简单 1 次阅读 2天前MIT图像开发框架
AI 解读 由 AI 自动生成,仅供参考

pigo 是一款纯 Go 语言编写的高性能人脸检测库,不仅能精准定位人脸,还能识别瞳孔、眼睛位置及面部关键特征点。它的核心优势在于完全摆脱了对 OpenCV、dlib 等重型 C/C++ 第三方库的依赖,从而避免了传统方案中因跨语言调用(cgo)带来的显著延迟和复杂的安装配置难题。

对于希望在 Go 生态中集成视觉功能的开发者而言,pigo 提供了极佳的解决方案。它无需预处理图像或构建复杂的积分图与金字塔结构,直接基于“像素强度比较”算法实现快速检测,甚至能高效处理带眼镜的人脸以及平面旋转角度较大的人脸。此外,pigo 还支持 WebAssembly,使得在浏览器端运行人脸检测成为可能。

无论是需要构建实时视频分析应用的后端工程师,还是追求轻量级部署方案的嵌入式开发者,pigo 都能以简洁的 API 和卓越的处理速度满足需求。如果你正在寻找一个无需额外环境依赖、开箱即用且运行飞快的人脸识别组件,pigo 值得尝试。

使用场景

某初创团队正在开发一款基于 Go 语言的后端服务,需要在用户上传头像时自动检测人脸位置并裁剪出标准证件照,同时要求服务能轻松部署在轻量级容器中。

没有 pigo 时

  • 部署极其繁琐:传统方案依赖 OpenCV 或 dlib 的 C/C++ 绑定,必须在 Docker 镜像中安装庞大的系统库和编译器环境,导致镜像体积超过 500MB。
  • 性能损耗严重:通过 cgo 调用外部 C 库引入了显著的延迟,高并发下人脸检测成为接口响应的瓶颈,平均耗时增加 200ms 以上。
  • 跨平台兼容性差:在不同 Linux 发行版或 ARM 架构服务器上编译时,常因缺少特定动态链接库而报错,运维排查成本高。
  • 功能扩展受限:若需进一步定位瞳孔或面部关键点以判断用户是否佩戴眼镜,往往需要引入更多重型第三方依赖。

使用 pigo 后

  • 零依赖轻量化部署:pigo 是纯 Go 实现,无需安装任何外部模块,最终生成的 Docker 镜像仅几十 MB,启动秒级完成。
  • 原生高性能处理:去除了 cgo 调用开销,利用像素强度比较算法实现高速检测,单核即可轻松应对数百张图片的并发请求。
  • 开箱即用的跨平台能力:直接编译为静态二进制文件,在任何支持 Go 的操作系统或架构上均可无缝运行,彻底消除环境差异问题。
  • 内置高级特征定位:原生支持瞳孔定位和面部关键点检测,无需额外集成其他库即可实现“检测 + 分析”的一站式处理流程。

pigo 让 Go 开发者在不牺牲性能的前提下,拥有了独立、轻量且功能完整的人脸分析能力,极大简化了视觉服务的架构复杂度。

运行环境要求

操作系统
  • Linux
  • macOS
  • Windows
GPU

不需要 GPU,纯 CPU 运行

内存

未说明

依赖
notes该工具是纯 Go 语言编写的人脸检测库,无需安装 OpenCV 或其他第三方 C/C++ 库即可运行核心功能。若需运行实时摄像头演示,因 Go 生态缺乏跨平台摄像头库,需通过 cgo 调用 Python 脚本作为共享对象。支持 WebAssembly (WASM),运行 WASM 演示需 Go 1.13 及以上版本。
python仅在运行实时桌面演示(调用摄像头)时需要安装 Python,具体版本未说明;核心库无需 Python
Go (建议 1.13+ 以支持 WASM)
pigo hero image

快速开始

pigo-logo

CI Go Report Card go.dev reference license release pigo

Pigo 是一个纯 Go 语言实现的人脸检测、瞳孔/眼睛定位以及面部关键点检测库,其核心基于 基于像素强度比较的目标检测 论文。

矩形人脸标记 圆形人脸标记
rectangle circle

动机

开发 Pigo 的原因在于,目前 Go 生态中几乎所有的人脸检测解决方案都只是对一些 C/C++ 库(如 OpenCVdlib)的绑定。然而,通过 cgo 调用 C 程序会引入巨大的延迟,并在性能上做出显著的权衡。此外,在许多平台上安装 OpenCV 也颇为繁琐。

Pigo 库无需安装任何额外的模块或第三方应用程序,不过如果你希望在实时桌面应用中运行该库,则可能需要安装 Python 和 OpenCV。更多详情请参阅此 子主题

核心特性

  • 不需安装 OpenCV 或任何第三方模块
  • 处理速度快
  • 检测前无需进行图像预处理
  • 无需计算积分图像、图像金字塔、HOG 金字塔或其他类似的数据结构
  • 人脸检测基于二进制文件树结构中编码的像素强度比较
  • 快速检测平面内旋转的人脸
  • 即使佩戴眼镜也能检测到人脸
  • 瞳孔/眼睛定位
  • 面部关键点检测
  • WebAssembly 支持 🎉

待办事项

  • 对象检测与描述

该库还可以检测平面内旋转的人脸。 因此,命令行工具中新增了一个 -angle 参数。以下命令将生成如下结果(有关所有支持的选项,请参阅下表):

$ pigo -in input.jpg -out output.jpg -cf cascade/facefinder -angle=0.8 -iou=0.01
输入文件 输出文件
input output

注意:对于平面内旋转的人脸,角度值应根据提供的图像进行调整。

瞳孔/眼睛定位

v1.2.0 起,Pigo 提供了瞳孔/眼睛定位功能。其实现基于 使用随机森林集成进行瞳孔定位

可在此示例中查看实时演示:https://github.com/esimov/pigo/tree/master/examples/puploc

puploc

面部关键点检测

v1.3.0 标志着该库发展的一个新里程碑,Pigo 现已能够检测面部关键点。其实现基于 快速定位面部关键点

可在此示例中查看实时演示:https://github.com/esimov/pigo/tree/master/examples/facial_landmark

flp_example

安装

安装 Go,设置好 GOPATH,并确保 $GOPATH/bin 已添加到你的 PATH 中。

$ go install github.com/esimov/pigo/cmd/pigo@latest

二进制发布

如果你没有安装 Go 或不想安装,也可以从 releases 文件夹获取二进制文件。

该库同样可以通过 snapcraft 运行。

snapcraft pigo

API

以下是使用人脸检测 API 的最小示例。

首先,你需要加载并解析二进制分类器,然后将图像转换为灰度模式, 最后运行级联函数,该函数会返回一个包含行、列、尺度和检测分数的切片。

cascadeFile, err := ioutil.ReadFile("/path/to/cascade/file")
if err != nil {
	log.Fatalf("读取级联文件时出错:%v", err)
}

src, err := pigo.GetImage("/path/to/image")
if err != nil {
	log.Fatalf("无法打开图像文件:%v", err)
}

pixels := pigo.RgbToGrayscale(src)
cols, rows := src.Bounds().Max.X, src.Bounds().Max.Y

cParams := pigo.CascadeParams{
	MinSize:     20,
	MaxSize:     1000,
	ShiftFactor: 0.1,
	ScaleFactor: 1.1,

	ImageParams: pigo.ImageParams{
		Pixels: pixels,
		Rows:   rows,
		Cols:   cols,
		Dim:    cols,
	},
}

pigo := pigo.NewPigo()
// 解包二进制文件。这将返回级联树的数量、树的深度、阈值以及来自树叶节点的预测。
classifier, err := pigo.Unpack(cascadeFile)
if err != nil {
	log.Fatalf("读取级联文件时出错:%s", err)
}

angle := 0.0 // 级联旋转角度。0.0 表示 0 弧度,1.0 表示 2π 弧度

// 在获得的叶节点上运行分类器,并返回检测结果。
// 结果包含四元组,分别表示行、列、尺度和检测分数。
dets := classifier.RunCascade(cParams, angle)

// 计算两个聚类之间的交并比 (IoU)。
dets = classifier.ClusterDetections(dets, 0.2)

关于导入的说明:为了解码生成的图像,你必须导入 image/jpegimage/png(取决于提供的图像类型),如下面的示例所示,否则你会收到 "Image: Unknown format" 错误。

import (
    _ "image/jpeg"
    pigo "github.com/esimov/pigo/core"
)

使用方法

该库附带了一个命令行工具。

$ pigo -in input.jpg -out out.jpg -cf cascade/facefinder

支持的标志:

$ pigo --help

┌─┐┬┌─┐┌─┐
├─┘││ ┬│ │
┴  ┴└─┘└─┘

Go(Golang)人脸检测库。
    版本:1.4.2

  -angle float
    	0.0 表示 0 弧度,1.0 表示 2π 弧度
  -cf string
    	级联二进制文件
  -flpc string
    	面部特征点级联目录
  -in string
    	源图像(默认为“-”)
  -iou float
    	交并比 (IoU) 阈值(默认为 0.2)
  -json string
    	将检测点输出到 JSON 文件
  -mark
    	标记检测到的眼睛(默认为真)
  -marker string
    	检测标记:矩形|圆形|椭圆(默认为“矩形”)
  -max int
    	人脸的最大尺寸(默认为 1000)
  -min int
    	人脸的最小尺寸(默认为 20)
  -out string
    	目标图像(默认为“-”)
  -plc string
    	瞳孔/眼睛定位级联文件
  -scale float
    	按百分比缩放检测窗口(默认为 1.1)
  -shift float
    	按百分比移动检测窗口(默认为 0.1)

重要提示:如果你还想运行瞳孔/眼睛定位功能,则需要使用 plc 标志,并提供指向瞳孔定位级联文件的有效路径。面部特征点检测也是如此,只不过这次 flpc 标志接受的参数是一个目录,该目录指向位于 cascades/lps 下的面部特征点级联文件。

CLI 命令示例

你还可以使用 stdinstdout 管道命令:

$ cat input/source.jpg | pigo > -in - -out - >out.jpg -cf=/path/to/cascade

inout 的默认值为 -,因此你也可以这样使用:

$ cat input/source.jpg | pigo >out.jpg -cf=/path/to/cascade
$ pigo -out out.jpg < input/source.jpg -cf=/path/to/cascade

-out 标志的值设置为空字符串会跳过图像生成部分。结合 -json 标志,可以将检测结果编码到指定的 JSON 文件中。你还可以使用管道 - 值结合 -json 标志,将检测坐标输出到标准输出 (stdout)。

实时人脸检测(作为共享对象运行)

如果你想测试该库的实时人脸检测能力,examples 文件夹中包含几个用 Python 编写的演示程序。

但你可能会问,为什么是 Python? 因为 Go 生态系统(目前)仍然缺少一个跨平台且与系统无关的库来访问网络摄像头。

在 Python 程序中,我们访问网络摄像头,并通过 cgo 将像素数据以字节数组的形式作为 共享对象 传输到 Go 程序中,在那里进行核心的人脸检测。然而,正如你所想象的那样,这种操作并不经济高效,导致帧率低于该库所能达到的水平。

WASM(WebAssembly)支持 🎉

重要提示:要运行 WebAssembly 演示,至少需要 Go 1.13!

从版本 v1.4.0 开始,该库已移植到 WASM。这证明了该库的实时人脸检测能力,能够持续产生 ~60 FPS

WASM 演示

要运行 wasm 演示,请选择 wasm 文件夹并输入 make

更多详情请查看子页面描述:https://github.com/esimov/pigo/tree/master/wasm。

有关使用 Pigo 库的更多精彩 WASM 演示,请参阅此仓库:https://github.com/esimov/pigo-wasm-demos

基准测试结果

以下是使用相同条件运行 Pigo 与 GoCV 时得到的基准测试结果。

    BenchmarkGoCV-4   	       3	 414122553 ns/op	     704 B/op	       1 allocs/op
    BenchmarkPIGO-4   	      10	 173664832 ns/op	       0 B/op	       0 allocs/op
    PASS
    ok  	github.com/esimov/gocv-test	4.530s

用于上述测试的代码可在以下链接找到:https://github.com/esimov/pigo-gocv-benchmark

作者

许可证

版权所有 © 2019 Endre Simo

本软件根据 MIT 许可证分发。完整的许可证文本请参见 LICENSE 文件。

版本历史

v1.4.62022/10/04
v1.4.52021/11/01
v1.4.42021/06/16
v1.4.32020/11/09
v1.4.22020/05/09
v1.4.12020/04/27
v1.4.02019/11/15
v1.3.02019/10/15
v1.2.12019/09/19
v1.2.02019/08/09
v1.1.02019/01/07
v1.0.32018/08/22
v1.0.22018/08/17
v1.0.12018/08/22

常见问题

相似工具推荐

openclaw

OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你

349.3k|★★★☆☆|1周前
Agent开发框架图像

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|1周前
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

154.3k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

108.3k|★★☆☆☆|4天前
开发框架图像Agent

gemini-cli

gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。

100.8k|★★☆☆☆|4天前
插件Agent图像

markitdown

MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器

93.4k|★★☆☆☆|1周前
插件开发框架