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.pswp.cn/web/40902.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/40902.shtml
英文地址,請注明出處:http://en.pswp.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上復…

cpp http server/client

httplib 使用httplib庫 basedemo server.cpp #include "httplib.h" #include <iostream> using namespace httplib;int main(void) {Server svr;svr.Get("/hello", [](const Request& req, Response& res) {std::cout << "lo…

實現Java Web應用的高性能負載均衡方案

實現Java Web應用的高性能負載均衡方案 大家好&#xff0c;我是微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01; 在高并發的網絡環境中&#xff0c;負載均衡是確保Web應用程序高性能和可靠性的關鍵策略之一。本文將探討如何…

【力扣 - 每日一題】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…

HashMap的底層實現原理詳解

HashMap是Java中最常用的集合類之一&#xff0c;其基于哈希表的Map接口實現&#xff0c;提供了快速的鍵值對存儲和檢索功能。深入理解HashMap的底層實現原理&#xff0c;對于提升編程技能、應對技術面試以及優化程序性能都具有重要意義。以下從技術難點、面試官關注點、回答吸引…

數據庫作業day3

創建一個student表用于存儲學生信息 CREATE TABLE student( id INT PRIMARY KEY, name VARCHAR(20) NOT NULL, grade FLOAT ); 向student表中添加一條新記錄 記錄中id字段的值為1&#xff0c;name字段的值為"monkey"&#xff0c;grade字段的值為98.5 insert into …

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

VR技術自誕生以來不斷發展&#xff0c;已經廣泛應用于教育、醫療、工程、軍事、航空、航海、影視、娛樂等方面&#xff0c;譬如&#xff0c;大型工程或軍事活動VR預演可以大幅度減少人力物力投入&#xff1b;在航空領域&#xff0c;航天飛行員在訓練艙中面對屏幕進行各種駕駛操…

mysql修改密碼失敗報錯無法登錄解決辦法

mysql: [Warning] Using a password on the command line interface can be insecure. ERROR 1045 (28000): Access denied for user root@localhost (using password: YES) 這個問題是因為在嘗試使用命令行連接MySQL時,使用了明文密碼,這是不安全的。同時,由于某種原因,您…

Kylin中的查詢引擎:大數據查詢加速的引擎解析

Kylin中的查詢引擎&#xff1a;大數據查詢加速的引擎解析 Apache Kylin是一個開源的分布式分析引擎&#xff0c;專為大規模數據集提供快速的SQL查詢和多維分析&#xff08;OLAP&#xff09;能力。在Kylin的架構中&#xff0c;查詢引擎&#xff08;Query Engine&#xff09;扮演…

【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])…

py基礎語法簡述

py基礎&#xff0c;常用sdk 一些要點 python中是沒有常量的關鍵字的&#xff0c;只是我們常常約定使用大寫字符組合的變量名表示常量&#xff0c;也有“不要對其進行賦值”的提醒操作 PI 3.14python3中有六個標準的數據類型&#xff1a; Number(數字)、String(字符串)、Boo…

基于Python爬蟲的城市二手房數據分析可視化

基于Python爬蟲的城市二手房數據分析可視化 一、前言二、數據采集(爬蟲,附完整代碼)三、數據可視化(附完整代碼)3.1 房源面積-總價散點圖3.2 各行政區均價3.3 均價最高的10個小區3.4 均價最高的10個地段3.5 戶型分布3.6 詞云圖四、如何更換城市一、前言 二手房具有價格普…