# InspireFace
[](https://github.com/HyperInspire/InspireFace/releases/latest)
[](https://pypi.org/project/inspireface/)
[](https://github.com/HyperInspire/InspireFace/actions/workflows/release-sdks.yaml)
[](https://github.com/HyperInspire/InspireFace/actions/workflows/test_ubuntu_x86_Pikachu.yaml)
InspireFace is a cross-platform face recognition SDK developed in C/C++, supporting multiple operating systems and various backend types for inference, such as CPU, GPU, and NPU.
If you require further information on tracking development branches, CI/CD processes, or downloading pre-compiled libraries, please visit our [development repository](https://github.com/HyperInspire/InspireFace).
Please contact [contact@insightface.ai](mailto:contact@insightface.ai?subject=InspireFace) for commercial support, including obtaining and integrating higher accuracy models, as well as custom development.
<img src="images/banner.jpg" alt="banner" style="zoom:80%;" />
## Change Logs
**`2025-01-08`** Support inference on Rockchip devices **RK3566/RK3568** NPU.
**`2024-12-25`** Add support for optional **RKRGA** image acceleration processing on Rockchip devices.
**`2024-12-22`** Started adapting for multiple Rockchip devices with NPU support, beginning with **RV1103/RV1106** support.
**`2024-12-10`** Added support for quick installation via Python package manager.
**`2024-11-19`** Project has been made lighter by removing mandatory dependency on OpenCV.
**`2024-10-09`** Added system resource monitoring and session statistics.
**`2024-09-30`** Fixed some bugs in the feature hub.
**`2024-08-18`** Updating [Benchmark](doc/Benchmark-Remark(Updating).md): Using CoreML with Apple's Neural Engine (ANE) on the iPhone 13, the combined processes of **Face Detection** + **Alignment** + **Feature Extraction** take less than **2ms**.
**`2024-07-17`** Add global resource statistics monitoring to prevent memory leaks.
**`2024-07-07`** Add some face action detection to the face interaction module.
**`2024-07-05`** Fixed some bugs in the python ctypes interface.
**`2024-07-03`** Add the blink detection algorithm of face interaction module.
**`2024-07-02`** Fixed several bugs in the face detector with multi-level input.
**`2024-06-27`** Verified iOS usability and fixed some bugs.
**`2024-06-18`** Added face detection feature with tracking-by-detection mode.
**`2024-06-01`** Adapted for accelerated inference on CUDA-enabled devices.
## Quick Start
For Python users on Linux and MacOS, InspireFace can be quickly installed via pip:
```bash
pip install inspireface
```
_⚠️Windows support is **not available yet**, but will be coming soon!_
After installation, you can use inspireface like this:
```Python
import cv2
import inspireface as isf
# Create a session with optional features
opt = isf.HF_ENABLE_NONE
session = isf.InspireFaceSession(opt, isf.HF_DETECT_MODE_ALWAYS_DETECT)
# Load the image using OpenCV.
image = cv2.imread(image_path)
# Perform face detection on the image.
faces = session.face_detection(image)
for face in faces:
x1, y1, x2, y2 = face.location
rect = ((x1, y1), (x2, y2), face.roll)
# Calculate center, size, and angle
center = ((x1 + x2) / 2, (y1 + y2) / 2)
size = (x2 - x1, y2 - y1)
angle = face.roll
# Apply rotation to the bounding box corners
rect = ((center[0], center[1]), (size[0], size[1]), angle)
box = cv2.boxPoints(rect)
box = box.astype(int)
# Draw the rotated bounding box
cv2.drawContours(image, [box], 0, (100, 180, 29), 2)
cv2.imshow("face detection", image)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
More examples can be found in the [python/](python/) directory.
## Preparation
### Clone 3rdparty
Clone the `3rdparty` repository from the remote repository into the root directory of the project. Note that this repository contains some submodules. When cloning, you should use the `--recurse-submodules` parameter, or after entering the directory, use `git submodule update --init --recursive` to fetch and synchronize the latest submodules:
```Bash
# Must enter this directory
cd InspireFace
# Clone the repository and pull submodules
git clone --recurse-submodules https://github.com/tunmx/inspireface-3rdparty.git 3rdparty
```
If you need to update the `3rdparty` repository to ensure it is current, or if you didn't use the `--recursive` parameter during the initial pull, you can run `git submodule update --init --recursive`:
```bash
# Must enter this directory
cd InspireFace
# If you're not using recursive pull
git clone https://github.com/tunmx/inspireface-3rdparty.git 3rdparty
cd 3rdparty
git pull
# Update submodules
git submodule update --init --recursive
```
### Downloading Model Package Files
You can download the model package files containing models and configurations needed for compilation from [Release Page](https://github.com/HyperInspire/InspireFace/releases/tag/v1.x) and extract them to any location.
You can use the **command/download_models_general.sh** command to download resource files, which will be downloaded to the **test_res/pack** directory. This way, when running the Test program, it can access and read the resource files from this path by default.
```bash
# Download lightweight resource files for mobile device
bash command/download_models_general.sh Pikachu
# Download resource files for mobile device or PC/server
bash command/download_models_general.sh Megatron
# Download resource files for RV1109
bash command/download_models_general.sh Gundam_RV1109
# Download resource files for RV1106
bash command/download_models_general.sh Gundam_RV1106
# Download resource files for RK356X
bash command/download_models_general.sh Gundam_RV356X
# Download all model files
bash command/download_models_general.sh
```
### Installing OpenCV(Optional)
For **InspireFace v1.1.8** and above, **OpenCV is optional and not required by default**. If you need OpenCV support, you can enable it using the cmake option ` INSPIRECV_BACKEND_OPENCV`.
### Installing MNN
The '**3rdparty**' directory already includes the MNN library and specifies a particular version as the stable version. If you need to enable or disable additional configuration options during compilation, you can refer to the CMake Options provided by MNN. If you need to use your own precompiled version, feel free to replace it.
### Requirements
- CMake (version 3.10 or higher)
- OpenCV (version 3.5 or higher) [**Optional**: If the version **>= 1.1.8**, opencv is not used by default]
- 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) [**Optional**]
- 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) [**Optional**]
- 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) [**Optional**]
- GPU-based inference requires installing NVIDIA's CUDA dependencies on the device.
- Eigen3
- RKNN [**Optional**]
- Adjust and select versions currently supported for specific requirements.
## Compilation
CMake option are used to control the various details of the compilation phase. Please select according to your actual requirements. [CMake Option](doc/CMake-Option.md).
### Local Compilation
Make sure OpenCV is installed, you can begin the compilation process. If you are using macOS or Linux, you can quickly compile using the shell scripts provided in the `command` folder at the project root:
```bash
cd InspireFace/
# Execute the local compilation script
bash command/build.sh
```
After compilation, you can find the local file in the build directory, which contains the compilation results. The install directory structure is as follows:
```bash
inspireface-linux
├── include
│ ├── herror.h
│ └── inspireface.h
└── lib
└── libInspireFace.so
```
- **libInspireFace.so**:Compiled dynamic linking library.
- **inspireface.h**:Header file definition.
- **herror.h**:Reference error number definition.
### Cross Compilation
Cross compilation requires you to prepare the target platform's cross-compilation toolchain on the host machine in advance. Here, compiling for Rockchip's embedded devices RV1106 is used as an example:
```bash
# Set the path for the cross-compilation toolchain
export ARM_CROSS_COMPILE_TOOLCHAIN=YOUR_DIR/arm-rockchip830-linux-uclibcgnueabihf
# Execute the cross-compilation script for RV1106
bash command/build_cross_rv1106_armhf_uclibc.sh
```
After the compilation is complete, you can find the compiled results in the `build/inspireface-linux-armv7-rv1106-armhf-uclibc` directory.
### iOS Compilation
To compile for iOS, ensure you are using a Mac device. The script will automatically download third-party dependencies into the `.macos_cache` directory.
```
bash command/build_ios.sh
```
After the compilation is complete, `inspireface.framework` will be placed in the `build/inspireface-ios` directory.
### Android Compilation
You can compile for Android using the following command, but first you need to set your Android NDK path:
```
export ANDROID_NDK=YOUR_ANDROID_NDK_PATH
bash command/build_android.sh
```
After the compilation is complete, arm64-v8a and armeabi-v7a libraries will be placed in the `build/inspireface-android` directory.
### Supported Platforms and Architectures
We have completed the adaptation and testing of the software across various operating systems and CPU architectures. This includes compatibility verification for platforms such as Linux, macOS, iOS, and Android, as well as testing for specific hardware support to ensure stable operation in diverse environments.
| **No.** | **Platform** | **CPU Architecture** | **Special Device Support** | **Adapted** | **Passed Tests** |
| ------- | -------------------- | --------------------- | -------------------------- | ----------- | ---------------- |
| 1 | **Linux-CPU** | ARMv7 | - | [](https://github.com/HyperInspire/InspireFace/actions/workflows/release-sdks.yaml) |  |
| 2 | | ARMv8 | - | [](https://github.com/HyperInspire/InspireFace/actions/workflows/release-sdks.yaml) |  |
| 3 | | x86/x86_64 | - | [](https://github.com/HyperInspire/InspireFace/actions/workflows/release-sdks.yaml) | [](https://github.com/HyperInspire/InspireFace/actions/workflows/test_ubuntu_x86_Pikachu.yaml) |
| 4 | **Linux-Rockchip** | ARMv7 | RV1109/RV1126 | [](https://github.com/HyperInspire/InspireFace/actions/workflows/release-sdks.yaml) |  |
| 5 | | ARMv7 | RV1103/RV1106 | [](https://github.com/HyperInspire/InspireFace/actions/workflows/release-sdks.yaml) ||
| 6 | | ARMv8 | RK3566/RK3568 | [](https://github.com/HyperInspire/InspireFace/actions/workflows/release-sdks.yaml) |  |
| 7 | | ARMv8 | RK3588 |  | |
| 8 | **Linux-CUDA(MNN)** | x86/x86_64 | NVIDIA-GPU |  |  |
| 9 | **MacOS** | Intel | CPU/Metal/**ANE** | [](https://github.com/HyperInspire/InspireFace/actions/workflows/release-sdks.yaml) |  |
| 10 | | Apple Silicon | - | [](https://github.com/HyperInspire/InspireFace/actions/workflows/release-sdks.yaml) |  |
| 11 | **iOS** | ARM | CPU/Metal/**ANE** | [](https://github.com/HyperInspire/InspireFace/actions/workflows/release-sdks.yaml) |  |
| 12 | **Android** | ARMv7 | - | [](https://github.com/HyperInspire/InspireFace/actions/workflows/release-sdks.yaml) |  |
| 13 | | ARMv8 | - | [](https://github.com/HyperInspire/InspireFace/actions/workflows/release-sdks.yaml) |  |
| 14 | **Android-Rockchip** | ARMv8 | RK3566/RK3568 |  | |
| 15 | | ARMv8 | RK3588 |  | |
| 16 | **HarmonyOS** | ARMv8 | - |  | |
| 17 | **Jetson series** | ARMv8 | - | | |
- Complete compilation scripts and successful compilation.
- Pass unit tests on physical devices.
- Meet all performance benchmarks in tests.
### Multi-platform compilation using Docker
We offer a method for rapid multi-platform compilation using Docker, provided that Docker is installed beforehand, and the appropriate commands are executed:
```Bash
# Build x86 Ubuntu18.04
docker-compose up build-ubuntu18
# Build armv7 cross-compile
docker-compose up build-cross-armv7-armhf
# Build armv7 with support RV1109RV1126 device NPU cross-complie
docker-compose up build-cross-rv1109rv1126-armhf
# Build armv7 with support RV1106 device NPU cross-complie
docker-compose up build-cross-rv1106-armhf-uclibc
# Build armv8 with support RK356x device NPU cross-complie
docker-compose up build-cross-rk356x-aarch64
# Build Android with support arm64-v8a and armeabi-v7a
docker-compose up build-cross-android
# Build all
docker-compose up
```
## Example
### C/C++ Sample
To integrate InspireFace into a C/C++ project, you simply need to link the InspireFace library and include the appropriate header files. Below is a basic example demonstrating face detection:
```c
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_ALWAYS_DETECT;
// Maximum number of faces detected
HInt32 maxDetectNum = 20;
// Face detection image input level
HInt32 detectPixelLevel = 160;
// Handle of the current face SDK algorithm context
HFSession session = {0};
ret = HFCreateInspireFaceSessionOptional(option, detMode, maxDetectNum, detectPixelLevel, -1, &session);
if (ret != HSUCCEED) {
std::cout << "Create FaceContext error: " << ret << std::endl;
return ret;
}
HFSessionSetTrackPreviewSize(session, detectPixelLevel);
HFSessionSetFilterMinimumFacePixelSize(session, 4);
// Load a image
HFImageBitmap image;
ret = HFCreateImageBitmapFromFilePath(sourcePath, 3, &image);
if (ret != HSUCCEED) {
std::cout << "The source entered is not a picture or read error." << std::endl;
return ret;
}
// Prepare an image parameter structure for configuration
HFImageStream imageHandle = {0};
ret = HFCreateImageStreamFromImageBitmap(image, rotation_enum, &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;
// The memory must be freed at the end of the program
ret = HFReleaseImageBitmap(image);
if (ret != HSUCCEED) {
printf("Release image bitmap error: %lu\n", ret);
return ret;
}
ret = HFReleaseImageStream(imageHandle);
if (ret != HSUCCEED) {
printf("Release image stream error: %lu\n", ret);
}
ret = HFReleaseInspireFaceSession(session);
if (ret != HSUCCEED) {
printf("Release session error: %lu\n", ret);
return ret;
}
```
For more examples, you can refer to the `cpp/sample` sub-project located in the root directory. You can compile these sample executables by enabling the `ISF_BUILD_WITH_SAMPLE` option during the compilation process.
**Note**: For each error code feedback, you can click on this [link](doc/Error-Feedback-Codes.md) to view detailed explanations.
### Python Native Sample
#### Use pip to install InspireFace
You can use pip to install the InspireFace Python package:
```bash
pip install inspireface
```
#### Python Native Sample
We provide a Python API that allows for more efficient use of the InspireFace library. After compiling the dynamic link library, you need to either symlink or copy it to the `python/inspireface/modules/core` directory within the root directory. You can then start testing by navigating to the **[python/](python/)** directory. Your Python environment will need to have some dependencies installed:
- python >= 3.7
- opencv-python
- loguru
- tqdm
- numpy
- ctypes
```bash
# Use a symbolic link
ln -s YOUR_BUILD_DIR/install/InspireFace/lib/libInspireFace.so python/inspireface/modules/core
# Navigate to the sub-project directory
cd python
```
Import inspireface for a quick facial detection example:
```python
import cv2
import inspireface as isf
# Step 1: Initialize the SDK globally (only needs to be called once per application)
ret = isf.reload()
assert ret, "Launch failure. Please ensure the resource path is correct."
# Optional features, loaded during session creation based on the modules specified.
opt = isf.HF_ENABLE_NONE
session = isf.InspireFaceSession(opt, isf.HF_DETECT_MODE_ALWAYS_DETECT)
# 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.location
cv2.rectangle(draw, (x1, y1), (x2, y2), (0, 0, 255), 2)
```
In the project, more usage examples are provided:
- sample_face_detection.py: Facial detection example
- sample_face_recognition.py: Facial recognition example
- sample_face_track_from_video.py: Facial tracking from video stream example
### Java and Android platform API
We have prepared an Android sample project. You can download library from the [Release Page](https://github.com/HyperInspire/InspireFace/releases) or compile the Android library yourself and place it in the `inspireface/libs directory` of the Android sample project. You can compile and run this project using Android Studio.
```bash
InspireFaceExample/inspireface/libs
├── arm64-v8a
│ └── libInspireFace.so
└── armeabi-v7a
└── libInspireFace.so
```
We provide a Java API for Android devices, which is implemented using Java Native Interface(JNI).
```java
// Launch InspireFace, only need to call once
boolean launchStatus = InspireFace.GlobalLaunch(folder + "/Pikachu");
if (!launchStatus) {
Log.e(TAG, "Failed to launch InspireFace");
}
// Create a ImageStream
ImageStream stream = InspireFace.CreateImageStreamFromBitmap(img, InspireFace.CAMERA_ROTATION_0);
// Create a session
CustomParameter parameter = InspireFace.CreateCustomParameter()
.enableRecognition(true)
.enableFaceQuality(true)
.enableFaceAttribute(true)
.enableInteractionLiveness(true)
.enableLiveness(true)
.enableMaskDetect(true);
Session session = InspireFace.CreateSession(parameter, InspireFace.DETECT_MODE_ALWAYS_DETECT, 10, -1, -1);
// Execute face detection
MultipleFaceData multipleFaceData = InspireFace.ExecuteFaceTrack(session, stream);
if (multipleFaceData.detectedNum > 0) {
// Get face feature
FaceFeature feature = InspireFace.ExtractFaceFeature(session, stream, multipleFaceData.tokens[0]);
// ....
}
// ....
// Release resource
InspireFace.ReleaseSession(session);
InspireFace.ReleaseImageStream(stream);
// Global release
InspireFace.GlobalRelease();
```
## Test
In the project, there is a subproject called cpp/test. To compile it, you need to enable the ISF_BUILD_WITH_TEST switch, which will allow you to compile executable programs for testing.
```bash
cmake -DISF_BUILD_WITH_TEST=ON ..
```
To run the test modules in the project, first check if the resource files exist in the test_res/pack directory. If they don't exist, you can either execute **command/download_models_general.sh** to download the required files, or download the files from the [Release Page](https://github.com/HyperInspire/InspireFace/releases/tag/v1.x) and manually place them in this directory.
```bash
test_res
├── data
├── images
├── pack <-- The model package files are here
├── save
├── valid_lfw_funneled.txt
├── video
└── video_frames
```
After compilation, you can find the executable program "**Test**" in `YOUR_BUILD_FOLDER/test`. The program accepts two optional parameters:
- **test_dir**:Path to the test resource files
- **pack**:Name of the model to be tested
```bash
./Test --test_dir PATH/test_res --pack Pikachu
```
During the process of building the test program using CMake, it will involve selecting CMake parameters. For specific details, you can refer to the parameter configuration table.
**Note**: If you want to view the benchmark test report, you can click on the [link](doc/Benchmark-Remark(Updating).md).
### Quick Test
If you need to perform a quick test, you can use the script we provide. This script will automatically download the test file `test_res` and build the test program to run the test.
*Note: If you need to enable more comprehensive tests, you can adjust the options in the script as needed.*
```bash
# If you are using Ubuntu, you can execute this.
bash ci/quick_test_linux_x86_usual.sh
# If you are using another system (including Ubuntu), you can execute this.
bash ci/quick_test_local.sh
```
Every time code is committed, tests are run on GitHub Actions.
## Features
The following Features and technologies are currently supported.
| Index | Feature | Adaptation | Note |
| -- | --- | --- | --- |
| 1 | Face Detection |  | SCRFD |
| 2 | Facial Landmark Detection |  | HyperLandmark |
| 3 | Face Recognition |  | ArcFace |
| 4 | Face Tracking |  | |
| 5 | Mask Detection |  | |
| 6 | Silent Liveness Detection |  | MiniVision |
| 7 | Face Quality Detection |  | |
| 8 | Face Pose Estimation |  | |
| 9 | Face Attribute Prediction |  | Age, Race, Gender |
| 10 | Cooperative Liveness Detection |  | Expressions and head |
| 11 | Face Embedding Management |  | Memory and Persistence |
## Resource Package List
For different scenarios, we currently provide several Packs, each containing multiple models and configurations.
| Name | Supported Devices | Note | Link |
| --- | --- | --- | --- |
| Pikachu | CPU | Lightweight edge-side models | [Download](https://github.com/HyperInspire/InspireFace/releases/download/v1.x/Pikachu) |
| Megatron | CPU, GPU | Mobile and server models | [Download](https://github.com/HyperInspire/InspireFace/releases/download/v1.x/Megatron) |
| Gundam-RV1109 | RKNPU | Supports RK1109 and RK1126 | [Download](https://github.com/HyperInspire/InspireFace/releases/download/v1.x/Gundam_RV1109) |
| Gundam-RV1106 | RKNPU | Supports RV1103 and RV1106 | [Download](https://github.com/HyperInspire/InspireFace/releases/download/v1.x/Gundam_RV1106) |
| Gundam-RK356X | RKNPU | Supports RK3566 and RK3568 | [Download](https://github.com/HyperInspire/InspireFace/releases/download/v1.x/Gundam_RK356X) |
## Acknowledgement
InspireFace is built on the following libraries:
- [MNN](https://github.com/alibaba/MNN)
- [RKNN](https://github.com/rockchip-linux/rknn-toolkit)
- [RKNN2](https://github.com/airockchip/rknn-toolkit2.git)
- [librga](https://github.com/airockchip/librga.git)
- [Eigen](https://eigen.tuxfamily.org/index.php?title=Main_Page)
- [sqlite](https://www.sqlite.org/index.html)
- [sqlite-vec](https://github.com/asg017/sqlite-vec)
- [Catch2](https://github.com/catchorg/Catch2)
- [yaml-cpp](https://github.com/jbeder/yaml-cpp)
Raw data
{
"_id": null,
"home_page": "https://github.com/HyperInspire/InspireFace",
"name": "inspireface",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": null,
"keywords": null,
"author": "Jingyu Yan",
"author_email": "tunmxy@163.com",
"download_url": null,
"platform": null,
"description": "# InspireFace\n[](https://github.com/HyperInspire/InspireFace/releases/latest)\n[](https://pypi.org/project/inspireface/)\n[](https://github.com/HyperInspire/InspireFace/actions/workflows/release-sdks.yaml)\n[](https://github.com/HyperInspire/InspireFace/actions/workflows/test_ubuntu_x86_Pikachu.yaml)\n\nInspireFace is a cross-platform face recognition SDK developed in C/C++, supporting multiple operating systems and various backend types for inference, such as CPU, GPU, and NPU.\n\nIf you require further information on tracking development branches, CI/CD processes, or downloading pre-compiled libraries, please visit our [development repository](https://github.com/HyperInspire/InspireFace).\n\nPlease contact [contact@insightface.ai](mailto:contact@insightface.ai?subject=InspireFace) for commercial support, including obtaining and integrating higher accuracy models, as well as custom development.\n\n<img src=\"images/banner.jpg\" alt=\"banner\" style=\"zoom:80%;\" />\n\n## Change Logs\n\n**`2025-01-08`** Support inference on Rockchip devices **RK3566/RK3568** NPU.\n\n**`2024-12-25`** Add support for optional **RKRGA** image acceleration processing on Rockchip devices.\n\n**`2024-12-22`** Started adapting for multiple Rockchip devices with NPU support, beginning with **RV1103/RV1106** support.\n\n**`2024-12-10`** Added support for quick installation via Python package manager.\n\n**`2024-11-19`** Project has been made lighter by removing mandatory dependency on OpenCV.\n\n**`2024-10-09`** Added system resource monitoring and session statistics.\n\n**`2024-09-30`** Fixed some bugs in the feature hub.\n\n**`2024-08-18`** Updating [Benchmark](doc/Benchmark-Remark(Updating).md): Using CoreML with Apple's Neural Engine (ANE) on the iPhone 13, the combined processes of **Face Detection** + **Alignment** + **Feature Extraction** take less than **2ms**.\n\n**`2024-07-17`** Add global resource statistics monitoring to prevent memory leaks.\n\n**`2024-07-07`** Add some face action detection to the face interaction module.\n\n**`2024-07-05`** Fixed some bugs in the python ctypes interface.\n\n**`2024-07-03`** Add the blink detection algorithm of face interaction module.\n\n**`2024-07-02`** Fixed several bugs in the face detector with multi-level input.\n\n**`2024-06-27`** Verified iOS usability and fixed some bugs.\n\n**`2024-06-18`** Added face detection feature with tracking-by-detection mode.\n\n**`2024-06-01`** Adapted for accelerated inference on CUDA-enabled devices.\n\n## Quick Start\n\nFor Python users on Linux and MacOS, InspireFace can be quickly installed via pip:\n\n```bash\npip install inspireface\n```\n\n_\u26a0\ufe0fWindows support is **not available yet**, but will be coming soon!_\n\nAfter installation, you can use inspireface like this:\n\n```Python\nimport cv2\nimport inspireface as isf\n\n# Create a session with optional features\nopt = isf.HF_ENABLE_NONE\nsession = isf.InspireFaceSession(opt, isf.HF_DETECT_MODE_ALWAYS_DETECT)\n\n# Load the image using OpenCV.\nimage = cv2.imread(image_path)\n\n# Perform face detection on the image.\nfaces = session.face_detection(image)\n\nfor face in faces:\n x1, y1, x2, y2 = face.location\n rect = ((x1, y1), (x2, y2), face.roll)\n # Calculate center, size, and angle\n center = ((x1 + x2) / 2, (y1 + y2) / 2)\n size = (x2 - x1, y2 - y1)\n angle = face.roll\n\n # Apply rotation to the bounding box corners\n rect = ((center[0], center[1]), (size[0], size[1]), angle)\n box = cv2.boxPoints(rect)\n box = box.astype(int)\n\n # Draw the rotated bounding box\n cv2.drawContours(image, [box], 0, (100, 180, 29), 2)\n\ncv2.imshow(\"face detection\", image)\ncv2.waitKey(0)\ncv2.destroyAllWindows()\n```\n\nMore examples can be found in the [python/](python/) directory.\n\n## Preparation\n### Clone 3rdparty\n\nClone the `3rdparty` repository from the remote repository into the root directory of the project. Note that this repository contains some submodules. When cloning, you should use the `--recurse-submodules` parameter, or after entering the directory, use `git submodule update --init --recursive` to fetch and synchronize the latest submodules:\n\n```Bash\n# Must enter this directory\ncd InspireFace\n# Clone the repository and pull submodules\ngit clone --recurse-submodules https://github.com/tunmx/inspireface-3rdparty.git 3rdparty\n```\n\nIf you need to update the `3rdparty` repository to ensure it is current, or if you didn't use the `--recursive` parameter during the initial pull, you can run `git submodule update --init --recursive`:\n\n```bash\n# Must enter this directory\ncd InspireFace\n# If you're not using recursive pull\ngit clone https://github.com/tunmx/inspireface-3rdparty.git 3rdparty\n\ncd 3rdparty\ngit pull\n# Update submodules\ngit submodule update --init --recursive\n```\n\n### Downloading Model Package Files\n\nYou can download the model package files containing models and configurations needed for compilation from [Release Page](https://github.com/HyperInspire/InspireFace/releases/tag/v1.x) and extract them to any location. \n\nYou can use the **command/download_models_general.sh** command to download resource files, which will be downloaded to the **test_res/pack** directory. This way, when running the Test program, it can access and read the resource files from this path by default.\n\n```bash\n# Download lightweight resource files for mobile device\nbash command/download_models_general.sh Pikachu\n# Download resource files for mobile device or PC/server\nbash command/download_models_general.sh Megatron\n# Download resource files for RV1109\nbash command/download_models_general.sh Gundam_RV1109\n# Download resource files for RV1106\nbash command/download_models_general.sh Gundam_RV1106\n# Download resource files for RK356X\nbash command/download_models_general.sh Gundam_RV356X\n\n# Download all model files\nbash command/download_models_general.sh\n```\n\n### Installing OpenCV(Optional)\nFor **InspireFace v1.1.8** and above, **OpenCV is optional and not required by default**. If you need OpenCV support, you can enable it using the cmake option ` INSPIRECV_BACKEND_OPENCV`.\n\n### Installing MNN\nThe '**3rdparty**' directory already includes the MNN library and specifies a particular version as the stable version. If you need to enable or disable additional configuration options during compilation, you can refer to the CMake Options provided by MNN. If you need to use your own precompiled version, feel free to replace it.\n\n### Requirements\n\n- CMake (version 3.10 or higher)\n- OpenCV (version 3.5 or higher) [**Optional**: If the version **>= 1.1.8**, opencv is not used by default]\n - Use the specific OpenCV-SDK supported by each target platform such as Android, iOS, and Linux.\n- NDK (version 16 or higher, only required for Android) [**Optional**]\n- MNN (version 1.4.0 or higher)\n- C++ Compiler\n - Either GCC or Clang can be used (macOS does not require additional installation as Xcode is included)\n - Recommended GCC version is 4.9 or higher\n - Note that in some distributions, GCC (GNU C Compiler) and G++ (GNU C++ Compiler) are installed separately.\n - For instance, on Ubuntu, you need to install both gcc and g++\n - Recommended Clang version is 3.9 or higher\n - arm-linux-gnueabihf (for RV1109/RV1126) [**Optional**]\n - Prepare the cross-compilation toolchain in advance, such as gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf\n- CUDA (version 10.1 or higher) [**Optional**]\n - GPU-based inference requires installing NVIDIA's CUDA dependencies on the device.\n- Eigen3\n \n- RKNN [**Optional**]\n - Adjust and select versions currently supported for specific requirements.\n\n## Compilation\nCMake option are used to control the various details of the compilation phase. Please select according to your actual requirements. [CMake Option](doc/CMake-Option.md).\n\n### Local Compilation\nMake sure OpenCV is installed, you can begin the compilation process. If you are using macOS or Linux, you can quickly compile using the shell scripts provided in the `command` folder at the project root:\n```bash\ncd InspireFace/\n# Execute the local compilation script\nbash command/build.sh\n```\nAfter compilation, you can find the local file in the build directory, which contains the compilation results. The install directory structure is as follows:\n```bash\ninspireface-linux\n \u251c\u2500\u2500 include\n \u2502 \u251c\u2500\u2500 herror.h\n \u2502 \u2514\u2500\u2500 inspireface.h\n \u2514\u2500\u2500 lib\n \u2514\u2500\u2500 libInspireFace.so\n```\n\n- **libInspireFace.so**\uff1aCompiled dynamic linking library.\n- **inspireface.h**\uff1aHeader file definition.\n- **herror.h**\uff1aReference error number definition.\n### Cross Compilation\nCross compilation requires you to prepare the target platform's cross-compilation toolchain on the host machine in advance. Here, compiling for Rockchip's embedded devices RV1106 is used as an example:\n```bash\n# Set the path for the cross-compilation toolchain\nexport ARM_CROSS_COMPILE_TOOLCHAIN=YOUR_DIR/arm-rockchip830-linux-uclibcgnueabihf\n# Execute the cross-compilation script for RV1106\nbash command/build_cross_rv1106_armhf_uclibc.sh\n```\nAfter the compilation is complete, you can find the compiled results in the `build/inspireface-linux-armv7-rv1106-armhf-uclibc` directory.\n\n### iOS Compilation\n\nTo compile for iOS, ensure you are using a Mac device. The script will automatically download third-party dependencies into the `.macos_cache` directory.\n\n```\nbash command/build_ios.sh\n```\n\nAfter the compilation is complete, `inspireface.framework` will be placed in the `build/inspireface-ios` directory.\n\n### Android Compilation\n\nYou can compile for Android using the following command, but first you need to set your Android NDK path:\n\n```\nexport ANDROID_NDK=YOUR_ANDROID_NDK_PATH\nbash command/build_android.sh\n```\n\nAfter the compilation is complete, arm64-v8a and armeabi-v7a libraries will be placed in the `build/inspireface-android` directory.\n\n### Supported Platforms and Architectures\nWe have completed the adaptation and testing of the software across various operating systems and CPU architectures. This includes compatibility verification for platforms such as Linux, macOS, iOS, and Android, as well as testing for specific hardware support to ensure stable operation in diverse environments.\n\n| **No.** | **Platform** | **CPU Architecture** | **Special Device Support** | **Adapted** | **Passed Tests** |\n| ------- | -------------------- | --------------------- | -------------------------- | ----------- | ---------------- |\n| 1 | **Linux-CPU** | ARMv7 | - | [](https://github.com/HyperInspire/InspireFace/actions/workflows/release-sdks.yaml) |  |\n| 2 | | ARMv8 | - | [](https://github.com/HyperInspire/InspireFace/actions/workflows/release-sdks.yaml) |  |\n| 3 | | x86/x86_64 | - | [](https://github.com/HyperInspire/InspireFace/actions/workflows/release-sdks.yaml) | [](https://github.com/HyperInspire/InspireFace/actions/workflows/test_ubuntu_x86_Pikachu.yaml) |\n| 4 | **Linux-Rockchip** | ARMv7 | RV1109/RV1126 | [](https://github.com/HyperInspire/InspireFace/actions/workflows/release-sdks.yaml) |  |\n| 5 | | ARMv7 | RV1103/RV1106 | [](https://github.com/HyperInspire/InspireFace/actions/workflows/release-sdks.yaml) ||\n| 6 | | ARMv8 | RK3566/RK3568 | [](https://github.com/HyperInspire/InspireFace/actions/workflows/release-sdks.yaml) |  |\n| 7 | | ARMv8 | RK3588 |  | |\n| 8 | **Linux-CUDA(MNN)** | x86/x86_64 | NVIDIA-GPU |  |  |\n| 9 | **MacOS** | Intel | CPU/Metal/**ANE** | [](https://github.com/HyperInspire/InspireFace/actions/workflows/release-sdks.yaml) |  |\n| 10 | | Apple Silicon | - | [](https://github.com/HyperInspire/InspireFace/actions/workflows/release-sdks.yaml) |  |\n| 11 | **iOS** | ARM | CPU/Metal/**ANE** | [](https://github.com/HyperInspire/InspireFace/actions/workflows/release-sdks.yaml) |  |\n| 12 | **Android** | ARMv7 | - | [](https://github.com/HyperInspire/InspireFace/actions/workflows/release-sdks.yaml) |  |\n| 13 | | ARMv8 | - | [](https://github.com/HyperInspire/InspireFace/actions/workflows/release-sdks.yaml) |  |\n| 14 | **Android-Rockchip** | ARMv8 | RK3566/RK3568 |  | |\n| 15 | | ARMv8 | RK3588 |  | |\n| 16 | **HarmonyOS** | ARMv8 | - |  | |\n| 17 | **Jetson series** | ARMv8 | - | | |\n\n- Complete compilation scripts and successful compilation.\n- Pass unit tests on physical devices.\n- Meet all performance benchmarks in tests.\n\n### Multi-platform compilation using Docker\n\nWe offer a method for rapid multi-platform compilation using Docker, provided that Docker is installed beforehand, and the appropriate commands are executed:\n```Bash\n# Build x86 Ubuntu18.04\ndocker-compose up build-ubuntu18\n\n# Build armv7 cross-compile\ndocker-compose up build-cross-armv7-armhf\n\n# Build armv7 with support RV1109RV1126 device NPU cross-complie\ndocker-compose up build-cross-rv1109rv1126-armhf\n\n# Build armv7 with support RV1106 device NPU cross-complie\ndocker-compose up build-cross-rv1106-armhf-uclibc\n\n# Build armv8 with support RK356x device NPU cross-complie\ndocker-compose up build-cross-rk356x-aarch64\n\n# Build Android with support arm64-v8a and armeabi-v7a\ndocker-compose up build-cross-android\n\n# Build all\ndocker-compose up\n```\n\n## Example\n### C/C++ Sample\nTo integrate InspireFace into a C/C++ project, you simply need to link the InspireFace library and include the appropriate header files. Below is a basic example demonstrating face detection:\n\n```c\nHResult ret;\n// The resource file must be loaded before it can be used\nret = HFLaunchInspireFace(packPath);\nif (ret != HSUCCEED) {\n std::cout << \"Load Resource error: \" << ret << std::endl;\n return ret;\n}\n\n// Enable the functions in the pipeline: mask detection, live detection, and face quality\n// detection\nHOption option = HF_ENABLE_QUALITY | HF_ENABLE_MASK_DETECT | HF_ENABLE_LIVENESS;\n// Non-video or frame sequence mode uses IMAGE-MODE, which is always face detection without\n// tracking\nHFDetectMode detMode = HF_DETECT_MODE_ALWAYS_DETECT;\n// Maximum number of faces detected\nHInt32 maxDetectNum = 20;\n// Face detection image input level\nHInt32 detectPixelLevel = 160;\n// Handle of the current face SDK algorithm context\nHFSession session = {0};\nret = HFCreateInspireFaceSessionOptional(option, detMode, maxDetectNum, detectPixelLevel, -1, &session);\nif (ret != HSUCCEED) {\n std::cout << \"Create FaceContext error: \" << ret << std::endl;\n return ret;\n}\n\nHFSessionSetTrackPreviewSize(session, detectPixelLevel);\nHFSessionSetFilterMinimumFacePixelSize(session, 4);\n\n// Load a image\nHFImageBitmap image;\nret = HFCreateImageBitmapFromFilePath(sourcePath, 3, &image);\nif (ret != HSUCCEED) {\n std::cout << \"The source entered is not a picture or read error.\" << std::endl;\n return ret;\n}\n// Prepare an image parameter structure for configuration\nHFImageStream imageHandle = {0};\nret = HFCreateImageStreamFromImageBitmap(image, rotation_enum, &imageHandle);\nif (ret != HSUCCEED) {\n std::cout << \"Create ImageStream error: \" << ret << std::endl;\n return ret;\n}\n\n// Execute HF_FaceContextRunFaceTrack captures face information in an image\nHFMultipleFaceData multipleFaceData = {0};\nret = HFExecuteFaceTrack(session, imageHandle, &multipleFaceData);\nif (ret != HSUCCEED) {\n std::cout << \"Execute HFExecuteFaceTrack error: \" << ret << std::endl;\n return ret;\n}\n// Print the number of faces detected\nauto faceNum = multipleFaceData.detectedNum;\nstd::cout << \"Num of face: \" << faceNum << std::endl;\n\n// The memory must be freed at the end of the program\nret = HFReleaseImageBitmap(image);\nif (ret != HSUCCEED) {\n printf(\"Release image bitmap error: %lu\\n\", ret);\n return ret;\n}\n\nret = HFReleaseImageStream(imageHandle);\nif (ret != HSUCCEED) {\n printf(\"Release image stream error: %lu\\n\", ret);\n}\nret = HFReleaseInspireFaceSession(session);\nif (ret != HSUCCEED) {\n printf(\"Release session error: %lu\\n\", ret);\n return ret;\n}\n\n```\nFor more examples, you can refer to the `cpp/sample` sub-project located in the root directory. You can compile these sample executables by enabling the `ISF_BUILD_WITH_SAMPLE` option during the compilation process.\n\n**Note**: For each error code feedback, you can click on this [link](doc/Error-Feedback-Codes.md) to view detailed explanations.\n\n### Python Native Sample\n\n#### Use pip to install InspireFace\n\nYou can use pip to install the InspireFace Python package:\n\n```bash\npip install inspireface\n```\n\n#### Python Native Sample\n\nWe provide a Python API that allows for more efficient use of the InspireFace library. After compiling the dynamic link library, you need to either symlink or copy it to the `python/inspireface/modules/core` directory within the root directory. You can then start testing by navigating to the **[python/](python/)** directory. Your Python environment will need to have some dependencies installed:\n\n- python >= 3.7\n- opencv-python\n- loguru\n- tqdm\n- numpy\n- ctypes\n```bash\n# Use a symbolic link\nln -s YOUR_BUILD_DIR/install/InspireFace/lib/libInspireFace.so python/inspireface/modules/core\n# Navigate to the sub-project directory\ncd python\n\n```\n\nImport inspireface for a quick facial detection example:\n```python\nimport cv2\nimport inspireface as isf\n\n# Step 1: Initialize the SDK globally (only needs to be called once per application)\nret = isf.reload()\nassert ret, \"Launch failure. Please ensure the resource path is correct.\"\n\n# Optional features, loaded during session creation based on the modules specified.\nopt = isf.HF_ENABLE_NONE\nsession = isf.InspireFaceSession(opt, isf.HF_DETECT_MODE_ALWAYS_DETECT)\n\n# Load the image using OpenCV.\nimage = cv2.imread(image_path)\nassert image is not None, \"Please check that the image path is correct.\"\n\n# Perform face detection on the image.\nfaces = session.face_detection(image)\nprint(f\"face detection: {len(faces)} found\")\n\n# Copy the image for drawing the bounding boxes.\ndraw = image.copy()\nfor idx, face in enumerate(faces):\n print(f\"{'==' * 20}\")\n print(f\"idx: {idx}\")\n # Print Euler angles of the face.\n print(f\"roll: {face.roll}, yaw: {face.yaw}, pitch: {face.pitch}\")\n # Draw bounding box around the detected face.\n x1, y1, x2, y2 = face.location\n cv2.rectangle(draw, (x1, y1), (x2, y2), (0, 0, 255), 2)\n```\nIn the project, more usage examples are provided:\n\n- sample_face_detection.py: Facial detection example\n- sample_face_recognition.py: Facial recognition example\n- sample_face_track_from_video.py: Facial tracking from video stream example\n\n### Java and Android platform API\n\nWe have prepared an Android sample project. You can download library from the [Release Page](https://github.com/HyperInspire/InspireFace/releases) or compile the Android library yourself and place it in the `inspireface/libs directory` of the Android sample project. You can compile and run this project using Android Studio.\n\n```bash\nInspireFaceExample/inspireface/libs\n\u251c\u2500\u2500 arm64-v8a\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 libInspireFace.so\n\u2514\u2500\u2500 armeabi-v7a\n \u2514\u2500\u2500 libInspireFace.so\n```\n\nWe provide a Java API for Android devices, which is implemented using Java Native Interface(JNI). \n\n```java\n// Launch InspireFace, only need to call once\nboolean launchStatus = InspireFace.GlobalLaunch(folder + \"/Pikachu\");\nif (!launchStatus) {\n Log.e(TAG, \"Failed to launch InspireFace\");\n}\n\n// Create a ImageStream\nImageStream stream = InspireFace.CreateImageStreamFromBitmap(img, InspireFace.CAMERA_ROTATION_0);\n\n// Create a session\nCustomParameter parameter = InspireFace.CreateCustomParameter()\n .enableRecognition(true)\n .enableFaceQuality(true)\n .enableFaceAttribute(true)\n .enableInteractionLiveness(true)\n .enableLiveness(true)\n .enableMaskDetect(true);\nSession session = InspireFace.CreateSession(parameter, InspireFace.DETECT_MODE_ALWAYS_DETECT, 10, -1, -1);\n\n// Execute face detection\nMultipleFaceData multipleFaceData = InspireFace.ExecuteFaceTrack(session, stream);\nif (multipleFaceData.detectedNum > 0) {\n // Get face feature\n FaceFeature feature = InspireFace.ExtractFaceFeature(session, stream, multipleFaceData.tokens[0]);\n // ....\n}\n\n// .... \n\n// Release resource\nInspireFace.ReleaseSession(session);\nInspireFace.ReleaseImageStream(stream);\n\n// Global release\nInspireFace.GlobalRelease();\n```\n\n## Test\n\nIn the project, there is a subproject called cpp/test. To compile it, you need to enable the ISF_BUILD_WITH_TEST switch, which will allow you to compile executable programs for testing.\n\n```bash\ncmake -DISF_BUILD_WITH_TEST=ON ..\n```\nTo run the test modules in the project, first check if the resource files exist in the test_res/pack directory. If they don't exist, you can either execute **command/download_models_general.sh** to download the required files, or download the files from the [Release Page](https://github.com/HyperInspire/InspireFace/releases/tag/v1.x) and manually place them in this directory.\n\n```bash\n\ntest_res\n\u251c\u2500\u2500 data\n\u251c\u2500\u2500 images\n\u251c\u2500\u2500 pack\t<-- The model package files are here\n\u251c\u2500\u2500 save\n\u251c\u2500\u2500 valid_lfw_funneled.txt\n\u251c\u2500\u2500 video\n\u2514\u2500\u2500 video_frames\n\n```\nAfter compilation, you can find the executable program \"**Test**\" in `YOUR_BUILD_FOLDER/test`. The program accepts two optional parameters:\n\n- **test_dir**\uff1aPath to the test resource files\n- **pack**\uff1aName of the model to be tested\n```bash\n./Test --test_dir PATH/test_res --pack Pikachu\n```\nDuring the process of building the test program using CMake, it will involve selecting CMake parameters. For specific details, you can refer to the parameter configuration table.\n\n**Note**: If you want to view the benchmark test report, you can click on the [link](doc/Benchmark-Remark(Updating).md).\n\n### Quick Test\n\nIf you need to perform a quick test, you can use the script we provide. This script will automatically download the test file `test_res` and build the test program to run the test. \n\n*Note: If you need to enable more comprehensive tests, you can adjust the options in the script as needed.*\n\n```bash\n# If you are using Ubuntu, you can execute this.\nbash ci/quick_test_linux_x86_usual.sh\n\n# If you are using another system (including Ubuntu), you can execute this.\nbash ci/quick_test_local.sh\n```\n\nEvery time code is committed, tests are run on GitHub Actions.\n\n## Features\nThe following Features and technologies are currently supported.\n\n| Index | Feature | Adaptation | Note |\n| -- | --- | --- | --- |\n| 1 | Face Detection |  | SCRFD |\n| 2 | Facial Landmark Detection |  | HyperLandmark |\n| 3 | Face Recognition |  | ArcFace |\n| 4 | Face Tracking |  | |\n| 5 | Mask Detection |  | |\n| 6 | Silent Liveness Detection |  | MiniVision |\n| 7 | Face Quality Detection |  | |\n| 8 | Face Pose Estimation |  | |\n| 9 | Face Attribute Prediction |  | Age, Race, Gender |\n| 10 | Cooperative Liveness Detection |  | Expressions and head |\n| 11 | Face Embedding Management |  | Memory and Persistence |\n\n\n## Resource Package List\n\nFor different scenarios, we currently provide several Packs, each containing multiple models and configurations.\n\n| Name | Supported Devices | Note | Link |\n| --- | --- | --- | --- |\n| Pikachu | CPU | Lightweight edge-side models | [Download](https://github.com/HyperInspire/InspireFace/releases/download/v1.x/Pikachu) |\n| Megatron | CPU, GPU | Mobile and server models | [Download](https://github.com/HyperInspire/InspireFace/releases/download/v1.x/Megatron) |\n| Gundam-RV1109 | RKNPU | Supports RK1109 and RK1126 | [Download](https://github.com/HyperInspire/InspireFace/releases/download/v1.x/Gundam_RV1109) |\n| Gundam-RV1106 | RKNPU | Supports RV1103 and RV1106 | [Download](https://github.com/HyperInspire/InspireFace/releases/download/v1.x/Gundam_RV1106) |\n| Gundam-RK356X | RKNPU | Supports RK3566 and RK3568 | [Download](https://github.com/HyperInspire/InspireFace/releases/download/v1.x/Gundam_RK356X) |\n\n## Acknowledgement\n\nInspireFace is built on the following libraries:\n\n- [MNN](https://github.com/alibaba/MNN)\n- [RKNN](https://github.com/rockchip-linux/rknn-toolkit)\n- [RKNN2](https://github.com/airockchip/rknn-toolkit2.git)\n- [librga](https://github.com/airockchip/librga.git)\n- [Eigen](https://eigen.tuxfamily.org/index.php?title=Main_Page)\n- [sqlite](https://www.sqlite.org/index.html)\n- [sqlite-vec](https://github.com/asg017/sqlite-vec)\n- [Catch2](https://github.com/catchorg/Catch2)\n- [yaml-cpp](https://github.com/jbeder/yaml-cpp)\n\n",
"bugtrack_url": null,
"license": null,
"summary": "InspireFace Python SDK",
"version": "1.1.10",
"project_urls": {
"Homepage": "https://github.com/HyperInspire/InspireFace"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "0029d2e1286ede387050a354ad88da18c8e334332ea95c0cc07a7c16e62bd1c6",
"md5": "da24f266c0ae2092d24af649a1bee3fb",
"sha256": "bf7653d0a6e39d9bc86e427d2c2cbf1cf57b28f4c76c85c46397f918d2427359"
},
"downloads": -1,
"filename": "inspireface-1.1.10-cp310-cp310-macosx_13_0_x86_64.whl",
"has_sig": false,
"md5_digest": "da24f266c0ae2092d24af649a1bee3fb",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.7",
"size": 2449618,
"upload_time": "2025-01-09T16:37:29",
"upload_time_iso_8601": "2025-01-09T16:37:29.075024Z",
"url": "https://files.pythonhosted.org/packages/00/29/d2e1286ede387050a354ad88da18c8e334332ea95c0cc07a7c16e62bd1c6/inspireface-1.1.10-cp310-cp310-macosx_13_0_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "2e4e82194018985d3681dc56065874f17cf6601c4dd7f3f102cbcd498b9a0db5",
"md5": "daa9dbe99504dfc6e9522252b564314a",
"sha256": "48d64e7bead8c7ab8f13af56dff1218ffda55b16bea9cea7b894d439c5ac63d5"
},
"downloads": -1,
"filename": "inspireface-1.1.10-cp310-cp310-macosx_14_0_universal2.whl",
"has_sig": false,
"md5_digest": "daa9dbe99504dfc6e9522252b564314a",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.7",
"size": 2010055,
"upload_time": "2025-01-09T16:37:25",
"upload_time_iso_8601": "2025-01-09T16:37:25.667537Z",
"url": "https://files.pythonhosted.org/packages/2e/4e/82194018985d3681dc56065874f17cf6601c4dd7f3f102cbcd498b9a0db5/inspireface-1.1.10-cp310-cp310-macosx_14_0_universal2.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "171531367e4a6041c4d830071b709639a8485cd861b233c7b4f63e4df7a2943d",
"md5": "e006b288ccbb5b227a86124514446c90",
"sha256": "397e5d38afc1506aab191baf11d750f879de2ba67223d72fb6191db24332c3d3"
},
"downloads": -1,
"filename": "inspireface-1.1.10-cp310-cp310-manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "e006b288ccbb5b227a86124514446c90",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.7",
"size": 2907746,
"upload_time": "2025-01-09T16:37:41",
"upload_time_iso_8601": "2025-01-09T16:37:41.667803Z",
"url": "https://files.pythonhosted.org/packages/17/15/31367e4a6041c4d830071b709639a8485cd861b233c7b4f63e4df7a2943d/inspireface-1.1.10-cp310-cp310-manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "5df3468d721faac17c9e8072bcca7e1e965a5b8916552880c17a0d8586e03774",
"md5": "edf9adfd64192e3349749f74de95cd91",
"sha256": "aaa2bc767691e1cba24776df979b2a0b7b525a5f1be62d16e082f6d24a946b87"
},
"downloads": -1,
"filename": "inspireface-1.1.10-cp311-cp311-macosx_13_0_universal2.whl",
"has_sig": false,
"md5_digest": "edf9adfd64192e3349749f74de95cd91",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.7",
"size": 2449618,
"upload_time": "2025-01-09T16:37:23",
"upload_time_iso_8601": "2025-01-09T16:37:23.550762Z",
"url": "https://files.pythonhosted.org/packages/5d/f3/468d721faac17c9e8072bcca7e1e965a5b8916552880c17a0d8586e03774/inspireface-1.1.10-cp311-cp311-macosx_13_0_universal2.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "fe1aed7ed40b35219bdc881bbadc76327dd10baf4eb59657535165c32a829f9f",
"md5": "36c5773655052f1960e315cd27b87a00",
"sha256": "4a706910012c830ebb1f4801b9c47d0a02110597340520bd471518cf4a5a0003"
},
"downloads": -1,
"filename": "inspireface-1.1.10-cp311-cp311-macosx_14_0_universal2.whl",
"has_sig": false,
"md5_digest": "36c5773655052f1960e315cd27b87a00",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.7",
"size": 2010055,
"upload_time": "2025-01-09T16:37:51",
"upload_time_iso_8601": "2025-01-09T16:37:51.517145Z",
"url": "https://files.pythonhosted.org/packages/fe/1a/ed7ed40b35219bdc881bbadc76327dd10baf4eb59657535165c32a829f9f/inspireface-1.1.10-cp311-cp311-macosx_14_0_universal2.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "e3b5394d18d503bf91a7e5ba23792cde6f3f5a02b6f3478feebeea4434156fd1",
"md5": "67066c5101d02257b000a83cd3778d57",
"sha256": "7d8c2b70e83839b8866707e71953b91fd08a8f6d4fca548e883fa52f6698ec25"
},
"downloads": -1,
"filename": "inspireface-1.1.10-cp311-cp311-manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "67066c5101d02257b000a83cd3778d57",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.7",
"size": 2907746,
"upload_time": "2025-01-09T16:37:38",
"upload_time_iso_8601": "2025-01-09T16:37:38.408648Z",
"url": "https://files.pythonhosted.org/packages/e3/b5/394d18d503bf91a7e5ba23792cde6f3f5a02b6f3478feebeea4434156fd1/inspireface-1.1.10-cp311-cp311-manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "79428783e9343976ff3335f0445e2a05b82e1b9196f4b6a926549836ca9071ff",
"md5": "25f1b3be2035dae7bfdbf20ad2648c85",
"sha256": "a80c49cee3befe416e41363a810aea64c4000c9d37fcf1e16181f652303f235d"
},
"downloads": -1,
"filename": "inspireface-1.1.10-cp312-cp312-macosx_13_0_universal2.whl",
"has_sig": false,
"md5_digest": "25f1b3be2035dae7bfdbf20ad2648c85",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.7",
"size": 2449671,
"upload_time": "2025-01-09T16:37:33",
"upload_time_iso_8601": "2025-01-09T16:37:33.476981Z",
"url": "https://files.pythonhosted.org/packages/79/42/8783e9343976ff3335f0445e2a05b82e1b9196f4b6a926549836ca9071ff/inspireface-1.1.10-cp312-cp312-macosx_13_0_universal2.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "2ab1e4ed2b80b949f8ddd30241da6df4f8c086972b8c7edc091d543d047eb7a8",
"md5": "9ac5de7b8013f2dd74cca99b22f0fb24",
"sha256": "3ad9f1f5f09222378e541f36e4f0fad5fe9fa03758acdb91218065b67f1b5e38"
},
"downloads": -1,
"filename": "inspireface-1.1.10-cp312-cp312-macosx_14_0_universal2.whl",
"has_sig": false,
"md5_digest": "9ac5de7b8013f2dd74cca99b22f0fb24",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.7",
"size": 2010105,
"upload_time": "2025-01-09T16:37:17",
"upload_time_iso_8601": "2025-01-09T16:37:17.935944Z",
"url": "https://files.pythonhosted.org/packages/2a/b1/e4ed2b80b949f8ddd30241da6df4f8c086972b8c7edc091d543d047eb7a8/inspireface-1.1.10-cp312-cp312-macosx_14_0_universal2.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "2f01a4b5d597d6862b750f6e3060e2578c9e144318915512975a7f0c6a04fcef",
"md5": "eca5166bfea1323fa547ea8e0d88e13b",
"sha256": "cce0c905eeff302af4cb78728fadee19441ea43c6294c386e492e4af6b25ed31"
},
"downloads": -1,
"filename": "inspireface-1.1.10-cp312-cp312-manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "eca5166bfea1323fa547ea8e0d88e13b",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.7",
"size": 2907793,
"upload_time": "2025-01-09T16:37:10",
"upload_time_iso_8601": "2025-01-09T16:37:10.176040Z",
"url": "https://files.pythonhosted.org/packages/2f/01/a4b5d597d6862b750f6e3060e2578c9e144318915512975a7f0c6a04fcef/inspireface-1.1.10-cp312-cp312-manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "821ad29e88a0aecfc82fdfecdb2905aa6c7f19b03e93a7fecda0dc9b9b30eea1",
"md5": "50325b6f37ba653c6ef2ca1220c3196b",
"sha256": "2a8ab1408ed6fba7368d3ece278332392dd2f44ee415a1d7e1b49d531aa6242d"
},
"downloads": -1,
"filename": "inspireface-1.1.10-cp37-cp37m-macosx_13_0_x86_64.whl",
"has_sig": false,
"md5_digest": "50325b6f37ba653c6ef2ca1220c3196b",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": ">=3.7",
"size": 2442367,
"upload_time": "2025-01-09T16:37:13",
"upload_time_iso_8601": "2025-01-09T16:37:13.874774Z",
"url": "https://files.pythonhosted.org/packages/82/1a/d29e88a0aecfc82fdfecdb2905aa6c7f19b03e93a7fecda0dc9b9b30eea1/inspireface-1.1.10-cp37-cp37m-macosx_13_0_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "e70050b039b0a3c4b02adfefbad60c3387fbb0d5bffcdbdbb800363282fa8644",
"md5": "574e8f8fb2610d2b4e972740e1d26c7c",
"sha256": "3ce6a102007129885b21b0de9a22c0188c415d5273803ad324786363f72598c1"
},
"downloads": -1,
"filename": "inspireface-1.1.10-cp37-cp37m-manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "574e8f8fb2610d2b4e972740e1d26c7c",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": ">=3.7",
"size": 2900477,
"upload_time": "2025-01-09T16:37:45",
"upload_time_iso_8601": "2025-01-09T16:37:45.557445Z",
"url": "https://files.pythonhosted.org/packages/e7/00/50b039b0a3c4b02adfefbad60c3387fbb0d5bffcdbdbb800363282fa8644/inspireface-1.1.10-cp37-cp37m-manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "0dd86fc4628f6b15dcbe50461cfba6a148119eecb036283774e604c9cc706103",
"md5": "6f07747caa771821df2f98f402a871f1",
"sha256": "493c2585108e5493c3af5687cc4ee38525f2c3eca25f7ec054930c490604c224"
},
"downloads": -1,
"filename": "inspireface-1.1.10-cp38-cp38-macosx_13_0_x86_64.whl",
"has_sig": false,
"md5_digest": "6f07747caa771821df2f98f402a871f1",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.7",
"size": 2442366,
"upload_time": "2025-01-09T16:37:07",
"upload_time_iso_8601": "2025-01-09T16:37:07.007301Z",
"url": "https://files.pythonhosted.org/packages/0d/d8/6fc4628f6b15dcbe50461cfba6a148119eecb036283774e604c9cc706103/inspireface-1.1.10-cp38-cp38-macosx_13_0_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "711a2efcd71ed2bddd446dd13632075d6fb9d048fd5c778826b6582a6d97fa9e",
"md5": "319e9eb4859a1158445fa8f85adcff3e",
"sha256": "ea51c1e2fa89f1684762c8060e7e5e7d9c963f0a2a0816d0830031b3f0d016fe"
},
"downloads": -1,
"filename": "inspireface-1.1.10-cp38-cp38-macosx_14_0_universal2.whl",
"has_sig": false,
"md5_digest": "319e9eb4859a1158445fa8f85adcff3e",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.7",
"size": 2002805,
"upload_time": "2025-01-09T16:37:48",
"upload_time_iso_8601": "2025-01-09T16:37:48.620367Z",
"url": "https://files.pythonhosted.org/packages/71/1a/2efcd71ed2bddd446dd13632075d6fb9d048fd5c778826b6582a6d97fa9e/inspireface-1.1.10-cp38-cp38-macosx_14_0_universal2.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "fcf1e57ea993e8d4e4d270bee0a1624ee6d2abf5e2cc59403910a4953a9beb78",
"md5": "6de93c3ec328d56d00fe4ce17d458b37",
"sha256": "8f0edb2634b3640bf6d84d96f2f78ecd57f279ceb5f976d0f3b58695320d9c45"
},
"downloads": -1,
"filename": "inspireface-1.1.10-cp38-cp38-manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "6de93c3ec328d56d00fe4ce17d458b37",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.7",
"size": 2900477,
"upload_time": "2025-01-09T16:37:43",
"upload_time_iso_8601": "2025-01-09T16:37:43.511603Z",
"url": "https://files.pythonhosted.org/packages/fc/f1/e57ea993e8d4e4d270bee0a1624ee6d2abf5e2cc59403910a4953a9beb78/inspireface-1.1.10-cp38-cp38-manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "fceaffa69cb7455976c33aa54103761c464cb753d40c026e579bfb5629b112a0",
"md5": "9fc59daed9548e570fb09756f332c061",
"sha256": "8d9d6ab1ff1c6c751348b8412bf30cb427828c2acd844dadea0282eb8e18da96"
},
"downloads": -1,
"filename": "inspireface-1.1.10-cp39-cp39-macosx_13_0_x86_64.whl",
"has_sig": false,
"md5_digest": "9fc59daed9548e570fb09756f332c061",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.7",
"size": 2449637,
"upload_time": "2025-01-09T16:37:15",
"upload_time_iso_8601": "2025-01-09T16:37:15.776690Z",
"url": "https://files.pythonhosted.org/packages/fc/ea/ffa69cb7455976c33aa54103761c464cb753d40c026e579bfb5629b112a0/inspireface-1.1.10-cp39-cp39-macosx_13_0_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "81859ef74e1e26070d974c821e1ed93a4227d2df093d10fed36b6c3b012a1fa8",
"md5": "328dd78b23ce705b20f1c8783616a2ec",
"sha256": "868d8931af5ff1ae0e1d39db4abd37469364e27d0fb08440f6051f85043efd75"
},
"downloads": -1,
"filename": "inspireface-1.1.10-cp39-cp39-macosx_14_0_universal2.whl",
"has_sig": false,
"md5_digest": "328dd78b23ce705b20f1c8783616a2ec",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.7",
"size": 2010074,
"upload_time": "2025-01-09T16:37:04",
"upload_time_iso_8601": "2025-01-09T16:37:04.732309Z",
"url": "https://files.pythonhosted.org/packages/81/85/9ef74e1e26070d974c821e1ed93a4227d2df093d10fed36b6c3b012a1fa8/inspireface-1.1.10-cp39-cp39-macosx_14_0_universal2.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "0678677db0fbe37cfc0db2dc8b43ba5e24f38b55172da45382fd8a4f4957f42d",
"md5": "018d877b9e5ced990cd022de7433368f",
"sha256": "71e81e02d62e078ac318f578ce4c2b0121e06463f3bc15538916ca11e3cbaf5e"
},
"downloads": -1,
"filename": "inspireface-1.1.10-cp39-cp39-manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "018d877b9e5ced990cd022de7433368f",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.7",
"size": 2907744,
"upload_time": "2025-01-09T16:37:20",
"upload_time_iso_8601": "2025-01-09T16:37:20.240997Z",
"url": "https://files.pythonhosted.org/packages/06/78/677db0fbe37cfc0db2dc8b43ba5e24f38b55172da45382fd8a4f4957f42d/inspireface-1.1.10-cp39-cp39-manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-01-09 16:37:29",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "HyperInspire",
"github_project": "InspireFace",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "inspireface"
}