InspireFace-商用级的跨平台开源人脸分析SDK

InspireFace-商用级的跨平台开源人脸分析SDK

InspireFaceSDK是由insightface开发的⼀款⼈脸识别软件开发⼯具包(SDK)。它提供了⼀系列功能,可以满⾜各种应⽤场景下的⼈脸识别需求,包括但不限于闸机、⼈脸⻔禁、⼈脸验证等。

该SDK包含了多种常⽤的⼈脸识别算法,涵盖了⼈脸检测、⼈脸属性分析、⼈脸特征提取和⼈脸⽐对等功能。这些算法经过精⼼设计,具备业界领先的⼈脸识别能⼒和算法精度⽔平。为了满⾜不同的部署需求,InspireFaceSDK提供了四种不同平台的部署选项。

这些选项涵盖了各种推理场景,包括闸机芯⽚、端侧设备(如智能⼿机、平板电脑)、CPU(中央处理器)和服务器(CUDA)、NPU(神经处理单元)等。开发⼈员可以根据实际情况选择适合⾃⼰应⽤的部署⽅案。

在这里插入图片描述

如何获取

  • 你可以直接从insightface.ai进入到仓库中获取到InspireFaceSDK的稳定版本的源代码;
  • 如果你持续关注代码更新动态,你可以从InspireFace的开发仓库进入获取到开发版本的资源;

功能介绍

InspireFaceSDK目前支持以下的功能,并且有更多的功能正在开发中:

IndexFunctionAdaptationNote
1人脸检测支持支持多种尺度图像的输入
2稠密关键点检测支持
3人脸识别支持基于arcface的高精度模型
4人脸跟踪支持拥有多种跟踪模式
5口罩检测支持
6静默人脸活体检测支持MiniVision
7质量分析支持
8头部姿态估计支持
9属性分析支持年龄、种族、性别等等
10表情与动作分析开发中眨眼、摇头、点头
11人脸红外活体检测开发中

平台与架构的支持

我们已经完成了跨各种操作系统和CPU架构的软件适配和测试。这包括对Linux、macOS、iOS和Android等平台的兼容性验证,以及对特定硬件如Rockchip部分设备支持的测试,以确保在不同环境下稳定运行。

No.Operating SystemCPU ArchitectureSpecial Device SupportAdaptedPassed Tests
1LinuxARMv7-已适配通过离线测试
2ARMv8-已适配通过离线测试
3x86/x86_64-已适配通过在线测试
4ARMv7RV1109RV1126已适配通过离线测试
5x86/x86_64CUDA已适配通过离线测试
6macOSIntel x86-已适配通过离线测试
7Apple Silicon-已适配通过离线测试
8iOSARM-已适配通过离线测试
9AndroidARMv7-已适配
10ARMv8-已适配

[编译]准备工作

安装OpenCV

如果您打算在本地或服务器上使用SDK,请确保已经在主机设备上安装了OpenCV,以便在编译过程中成功链接。对于交叉编译目标,如Android或ARM嵌入式板,您可以使用3rdparty/ inspirreface -precompile/ OpenCV /提供的预编译OpenCV库,所以可以跳过此步骤

安装MNN

3rdparty目录已经包含了MNN库,并指定了一个特定的版本作为稳定版本。如果您需要在编译期间启用或禁用其他配置选项,您可以参考MNN提供的CMake选项。如果您需要使用自己的预编译版本,请随意替换它,如果不需要请跳过此步骤

获取工程

您可以拉取稳定版本或开发版的工程代码到本地:

# Pull the stable version
git clone https://github.com/deepinsight/insightface
cd insightface/cpp-package/inspireface/# or, Pull the develop version
git clone https://github.com/HyperInspire/InspireFace

拉取第三方依赖

在编译前必须要拉取第三方依赖库到inspireface的根目录下:

# Must enter this directory
cd InspireFace
# Clone the repository and pull submodules
git clone --recurse-submodules https://github.com/HyperInspire/3rdparty.git

如果你需要更新3rdpart仓库以确保它是最新的,或者如果你在初始拉取时没有使用——recursive 参数,你可以运行git submodule update——init——recursive:

# Must enter this directory
cd InspireFace
# If you're not using recursive pull
git clone https://github.com/HyperInspire/3rdparty.gitcd 3rdparty
git pull
# Update submodules
git submodule update --init --recursive

环境要求

目前InspireFace支持的宿主机设备仅有Linux和MacOS两个系统,请确保您的计算机符合以下配置需求:

  • CMake (version 3.10 or higher)
  • OpenCV (version 4.20 or higher)
    • Use the specific OpenCV-SDK supported by each target platform such as Android, iOS, and Linux.
  • NDK (version 16 or higher, only required for Android)
  • MNN (version 1.4.0 or higher)
  • C++ Compiler
    • Either GCC or Clang can be used (macOS does not require additional installation as Xcode is included)
      • Recommended GCC version is 4.9 or higher
        • Note that in some distributions, GCC (GNU C Compiler) and G++ (GNU C++ Compiler) are installed separately.
        • For instance, on Ubuntu, you need to install both gcc and g++
      • Recommended Clang version is 3.9 or higher
    • arm-linux-gnueabihf (for RV1109/RV1126)
      • Prepare the cross-compilation toolchain in advance, such as gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf
  • CUDA (version 10.1 or higher)
    • GPU-based inference requires installing NVIDIA’s CUDA dependencies on the device.
  • Eigen3
    • If you need to use the tracking-by-detection feature, you must have Eigen3 installed in advance.
  • RKNN
    • Adjust and select versions currently supported for specific requirements.

[编译]开始编译

工程采用CMake作为构建工具,CMake的选项用于控制编译阶段的各种细节。请根据您的实际需求进行选择。您可以查看参数表CMake Option。

Linux/MacOS编译

确保安装了OpenCV,就可以开始编译过程了。如果您使用的是macOS或Linux,您可以使用项目根目录下command 文件夹中提供的shell脚本快速编译:

cd InspireFace/
# Execute the local compilation script
bash command/build.sh

编译之后,您可以在构建目录中找到包含编译结果的本地文件。安装目录结构如下:

inspireface-linux├── include│   ├── herror.h│   └── inspireface.h└── lib└── libInspireFace.so
  • libInspireFace.so:编译的动态链接库.
  • inspireface.h:头文件定义
  • herror.h:引用错误号定义

Note: 更多平台的相关的详细编译过程您可以直接进入源代码仓库中。

[示例]如何使用

C/C++ API

要将InspireFace集成到C/ c++项目中,您只需要链接InspireFace库并包含适当的头文件。下面是一个展示人脸检测的基本例子:

HResult ret;
// The resource file must be loaded before it can be used
ret = HFLaunchInspireFace(packPath);
if (ret != HSUCCEED) {std::cout << "Load Resource error: " << ret << std::endl;return ret;
}// Enable the functions in the pipeline: mask detection, live detection, and face quality detection
HOption option = HF_ENABLE_QUALITY | HF_ENABLE_MASK_DETECT | HF_ENABLE_LIVENESS;
// Non-video or frame sequence mode uses IMAGE-MODE, which is always face detection without tracking
HFDetectMode detMode = HF_DETECT_MODE_IMAGE;
// Maximum number of faces detected
HInt32 maxDetectNum = 5;
// Handle of the current face SDK algorithm context
HFSession session = {0};
ret = HFCreateInspireFaceSessionOptional(option, detMode, maxDetectNum, -1, -1, &session);
if (ret != HSUCCEED) {std::cout << "Create FaceContext error: " << ret << std::endl;return ret;
}// Load a image
cv::Mat image = cv::imread(sourcePath);
if (image.empty()) {std::cout << "The source entered is not a picture or read error." << std::endl;return 1;
}
// Prepare an image parameter structure for configuration
HFImageData imageParam = {0};
imageParam.data = image.data;       // Data buffer
imageParam.width = image.cols;      // Target view width
imageParam.height = image.rows;      // Target view width
imageParam.rotation = HF_CAMERA_ROTATION_0;      // Data source rotate
imageParam.format = HF_STREAM_BGR;      // Data source format// Create an image data stream
HFImageStream imageHandle = {0};
ret = HFCreateImageStream(&imageParam, &imageHandle);
if (ret != HSUCCEED) {std::cout << "Create ImageStream error: " << ret << std::endl;return ret;
}// Execute HF_FaceContextRunFaceTrack captures face information in an image
HFMultipleFaceData multipleFaceData = {0};
ret = HFExecuteFaceTrack(session, imageHandle, &multipleFaceData);
if (ret != HSUCCEED) {std::cout << "Execute HFExecuteFaceTrack error: " << ret << std::endl;return ret;
}
// Print the number of faces detected
auto faceNum = multipleFaceData.detectedNum;
std::cout << "Num of face: " << faceNum << std::endl;ret = HFReleaseImageStream(imageHandle);
if (ret != HSUCCEED) {printf("Release image stream error: %lu\n", ret);
}
// The memory must be freed at the end of the program
ret = HFReleaseInspireFaceSession(session);
if (ret != HSUCCEED) {printf("Release session error: %lu\n", ret);return ret;
}

Note: 更多使用相关的详细方法您可以直接进入源代码仓库中查看。

Python Native API

InspireFace提供了一个Python API,允许更有效地使用InspireFace库。编译完动态链接库后,你需要将其符号链接或复制到根目录下的python/inspireface/modules/core 目录下。然后你可以通过导航到**python/**目录开始测试。你的Python环境需要安装一些依赖项:

import cv2
import inspireface as ifac
from inspireface.param import *# Step 1: Initialize the SDK and load the algorithm resource files.
resource_path = "pack/Pikachu"
ret = ifac.launch(resource_path)
assert ret, "Launch failure. Please ensure the resource path is correct."# Optional features, loaded during session creation based on the modules specified.
opt = HF_ENABLE_NONE
session = ifac.InspireFaceSession(opt, HF_DETECT_MODE_IMAGE)# Load the image using OpenCV.
image = cv2.imread(image_path)
assert image is not None, "Please check that the image path is correct."# Perform face detection on the image.
faces = session.face_detection(image)
print(f"face detection: {len(faces)} found")# Copy the image for drawing the bounding boxes.
draw = image.copy()
for idx, face in enumerate(faces):print(f"{'==' * 20}")print(f"idx: {idx}")# Print Euler angles of the face.print(f"roll: {face.roll}, yaw: {face.yaw}, pitch: {face.pitch}")# Draw bounding box around the detected face.x1, y1, x2, y2 = face.locationcv2.rectangle(draw, (x1, y1), (x2, y2), (0, 0, 255), 2)

Note: 仓库中的会提供更多的其他平台下的使用方法,我们推荐您使用最新的代码进行集成

[快捷]直接下载预编译的库

如果你想快速体验来节约编译的时间你可以跳过编译步骤,直接通过开发仓库的Release页面下载我们提供的最新的发行版SDK,其中涵盖了大部分的平台支持,所有的预编译库均是通过Github Actions进行持续集成发布,已经通过了测试。

模型列表

InspireFace目前提供了多款模型应对不同的使用场景,目前涵盖了移动端、服务端和部分嵌入式设备端,您可以进入到我们的Github页面进行更详细的了解和下载体验:

NameSupported DevicesNote
PikachuCPU适合移动端设备部署
MegatronCPU, GPU适合移动端、服务端和携GPU设备部署
Gundam-RV1109RKNPU支持RK1109/1126设备部署

测试实例

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu22 sshd设置

专栏总目录 一、安装sshd服务 sudo apt updatesudo apt install -y openssh-server 二、配置sshd 使用文本编辑器打开/etc/ssh/sshd_config sudo vi /etc/ssh/sshd_config &#xff08;一&#xff09;配置sshd服务的侦听端口 建议将ssh的侦听端口改为7000以上的端口&#…

【bazel】快速下载教程

bazel下载链接&#xff1a; https://github.com/bazelbuild/bazel/releases?page11 直接在github上下载&#xff0c;会因为网络不稳定&#xff0c;而频繁下载错误 这里提供一个超级快速的方法&#xff01;&#xff01;&#xff01; 用迅雷下载&#xff01; 1.从github上复…

【力扣 - 每日一题】3115. 质数的最大距离(一次遍历、头尾遍历、空间换时间、埃式筛、欧拉筛、打表)Golang实现

原题链接 题目描述 给你一个整数数组 nums。 返回两个&#xff08;不一定不同的&#xff09;质数在 nums 中 下标 的 最大距离。 示例 1&#xff1a; 输入&#xff1a; nums [4,2,9,5,3] 输出&#xff1a; 3 解释&#xff1a; nums[1]、nums[3] 和 nums[4] 是质数。因此答…

算法系列--分治排序|再谈快速排序|快速排序的优化|快速选择算法

前言:本文就前期学习快速排序算法的一些疑惑点进行详细解答,并且给出基础快速排序算法的优化版本 一.再谈快速排序 快速排序算法的核心是分治思想,分治策略分为以下三步: 分解:将原问题分解为若干相似,规模较小的子问题解决:如果子问题规模较小,直接解决;否则递归解决子问题合…

策略模式的应用

前言 系统有一个需求就是采购员审批注册供应商的信息时&#xff0c;会生成一个供应商的账号&#xff0c;此时需要发送供应商的账号信息&#xff08;账号、密码&#xff09;到注册填写的邮箱中&#xff0c;通知供应商账号信息&#xff0c;当时很快就写好了一个工具类&#xff0…

Python 学习中什么是字典,如何操作字典?

什么是字典 字典&#xff08;Dictionary&#xff09;是Python中的一种内置数据结构&#xff0c;用于存储键值对&#xff08;key-value pair&#xff09;。字典的特点是通过键来快速查找值&#xff0c;键必须是唯一的&#xff0c;而值可以是任何数据类型。字典在其他编程语言中…

vue实现搜索文章关键字,滑到指定位置并且高亮

1、输入搜索条件&#xff0c;点击搜索按钮 2、滑到定位到指定的搜索条件。 <template><div><div class"search_form"><el-inputv-model"searchVal"placeholder"请输入关键字查询"clearablesize"small"style&quo…

对于老百姓而言VR到底能做什么?

VR技术自诞生以来不断发展&#xff0c;已经广泛应用于教育、医疗、工程、军事、航空、航海、影视、娱乐等方面&#xff0c;譬如&#xff0c;大型工程或军事活动VR预演可以大幅度减少人力物力投入&#xff1b;在航空领域&#xff0c;航天飞行员在训练舱中面对屏幕进行各种驾驶操…

【Linux进阶】文件系统4——文件系统特性

1.磁盘组成与分区的复习 首先说明一下磁盘的物理组成&#xff0c;整块磁盘的组成主要有&#xff1a; 圆形的碟片&#xff08;主要记录数据的部分&#xff09;&#xff1b;机械手臂&#xff0c;与在机械手臂上的磁头&#xff08;可擦写碟片上的数据);主轴马达&#xff0c;可以…

打开浏览器控制台,点击应用,浏览器崩溃

调试的时候&#xff0c;打开控制台&#xff0c;点击 “应用” 立马浏览器奔溃&#xff0c;但是点击别的没问题 调查发现是因为manifest.json这个文件引起的 manifest.json 最主要的原因是因为没有设置这个sizes字段 Google浏览器更新大概到126之后的版本会有问题&#xff0c;之…

AI多模态教程:Qwen-VL多模态大模型实践指南

一、模型介绍 Qwen-VL&#xff0c;由阿里云研发的大规模视觉语言模型&#xff08;Large Vision Language Model, LVLM&#xff09;&#xff0c;代表了人工智能领域的一个重大突破。该模型具有处理和关联图像、文本、检测框等多种类型数据的能力&#xff0c;其输出形式同样多样…

代码随想录Day69(图论Part05)

并查集 // 1.初始化 int fa[MAXN]; void init(int n) {for (int i1;i<n;i)fa[i]i; }// 2.查询 找到的祖先直接返回&#xff0c;未进行路径压缩 int.find(int i){if(fa[i] i)return i;// 递归出口&#xff0c;当到达了祖先位置&#xff0c;就返回祖先elsereturn find(fa[i])…

基于Python爬虫的城市二手房数据分析可视化

基于Python爬虫的城市二手房数据分析可视化 一、前言二、数据采集(爬虫,附完整代码)三、数据可视化(附完整代码)3.1 房源面积-总价散点图3.2 各行政区均价3.3 均价最高的10个小区3.4 均价最高的10个地段3.5 户型分布3.6 词云图四、如何更换城市一、前言 二手房具有价格普…

CSS position属性之relative和absolute

目录 1 参考文章2 五个属性值3 position:static4 position:relative&#xff08;相对&#xff09;5 position:absolute&#xff08;绝对&#xff09; 1 参考文章 https://blog.csdn.net/lalala_dxf/article/details/123566909 https://blog.csdn.net/WangMinGirl/article/deta…

最灵活且易用的C++开源串口通信调试软件

这款C开源串口调试软件&#xff0c;集成了丰富的功能&#xff0c;为用户提供高效、便捷的串口通信调试体验。以下是其核心功能亮点&#xff1a; 基础功能&#xff1a; 数据交互自如&#xff1a;支持串口数据的轻松读取与发送&#xff0c;让数据交换变得简单直接。 灵活配置参…

基于顺序表的通讯录实现

一、前言 基于已经学过的顺序表&#xff0c;可以实现一个简单的通讯录。 二、通讯录相关头文件 //Contact.h #pragma once#define NAME_MAX 20 #define TEL_MAX 20 #define ADDR_MAX 20 #define GENDER_MAX 20typedef struct PersonInfo {char name[NAME_MAX];char gender[G…

Python的招聘数据分析与可视化管理系统-计算机毕业设计源码55218

摘要 随着互联网的迅速发展&#xff0c;招聘数据在规模和复杂性上呈现爆炸式增长&#xff0c;对数据的深入分析和有效可视化成为招聘决策和招聘管理的重要手段。本论文旨在构建一个基于Python的招聘数据分析与可视化管理系统。 该平台以主流招聘平台为数据源&#xff0c;利用Py…

昇思25天学习打卡营第2天|MindSpore快速入门

打卡 目录 打卡 快速入门案例&#xff1a;minist图像数据识别任务 案例任务说明 流程 1 加载并处理数据集 2 模型网络构建与定义 3 模型约束定义 4 模型训练 5 模型保存 6 模型推理 相关参考文档入门理解 MindSpore数据处理引擎 模型网络参数初始化 模型优化器 …

如何选择TikTok菲律宾直播网络?

为了满足用户对于实时互动的需求&#xff0c;TikTok推出了直播功能&#xff0c;让用户能够与粉丝即时交流。本文将探讨如何选择适合的TikTok菲律宾直播网络&#xff0c;并分析OgLive是否是值得信赖的选择。 TikTok菲律宾直播网络面临的挑战 作为全球领先的短视频平台&#xff…

Python + OpenCV 开启图片、写入储存图片

这篇教学会介绍OpenCV 里imread()、imshow()、waitKey() 方法&#xff0c;透过这些方法&#xff0c;在电脑中使用不同的色彩模式开启图片并显示图片。 imread() 开启图片 使用imread() 方法&#xff0c;可以开启图片&#xff0c;imread() 有两个参数&#xff0c;第一个参数为档…