4 个版本 (1 个稳定版)

1.0.0 2023 年 8 月 11 日
0.3.0 2023 年 7 月 5 日
0.2.0 2023 年 6 月 30 日
0.1.0 2023 年 6 月 28 日

机器学习 中排名 #549

MIT 许可证

1MB
1.5K SLoC

Rust Faces - 带有 Rust 接口的 Face Detection 模型

Rust

Python

本项目旨在为多个最先进的面部检测模型提供 Rust 接口。

特性

  • 集成多个面部检测模型;
  • Rust 接口:核心实现是用 Rust 编写的,利用其安全性、性能和并发特性,用于预处理、非最大值抑制和其他计算密集型任务。
  • 由 Ort 提供的 ONNX Runtime 推理。
  • 语言绑定:项目将为 Python (✔️)、C (⚙️)、C++ (⚙️)、Java (⚙️) 和 C# (⚙️) 提供绑定,使更多拥有面部技术的开发者受益。
  • 易于集成

支持的 Face Detection 模型

该项目旨在包含一系列流行且性能高的面部检测模型,例如

请注意,具体模型的可用性可能因各自模型的许可条款和开源可用性而异。

使用方法

Linux 系统要求

  • libssl-dev
  • pkg-config

Ubuntu: $sudo apt install libssl-dev pkg-config

安装包

$ cargo add rust-faces --features viz
use rust_faces::{
    viz, BlazeFaceParams, FaceDetection, FaceDetectorBuilder, InferParams, Provider, ToArray3,
    ToRgb8,
};

pub fn main() {
    let face_detector =
        FaceDetectorBuilder::new(FaceDetection::BlazeFace640(BlazeFaceParams::default()))
            .download()
            .infer_params(InferParams {
                provider: Provider::OrtCpu,
                intra_threads: Some(5),
                ..Default::default()
            })
            .build()
            .expect("Fail to load the face detector.");

    let image = image::open("tests/data/images/faces.jpg")
        .expect("Can't open test image.")
        .into_rgb8()
        .into_array3();
    let faces = face_detector.detect(image.view().into_dyn()).unwrap();

    let mut image = image.to_rgb8();
    viz::draw_faces(&mut image, faces);
    std::fs::create_dir_all("tests/output").expect("Can't create test output dir.");
    image
        .save("tests/output/should_have_smooth_design.jpg")
        .expect("Can't save test image.");
}

使 OnnxRuntime 共享库可用

[Linux] 如果需要,将您的库路径导出到 onnx runtime 目录。

$ export LD_LIBRARY_PATH=<path to onnx runtime lib directory>:$LD_LIBRARY_PATH

如果您仍然收到以下错误消息

PanicException: ort 1.14 与在 onnxruntime.dll 中找到的 ONNX Runtime 二进制文件不兼容;期望 GetVersionString 返回 '1.14.x',但得到 '1.10.0'

尝试直接设置环境变量 ORT_DYLIB_PATH

# bash
$ export ORT_DYLIB_PATH="<your onnx runtime dir>/onnxruntime.so"
# Powershell
> $env:ORT_DYLIB_PATH="<your onnx runtime dir>/onnxruntime.dll"

有关 Ort 项目的更多详细信息。

Python 使用方法

要求

$ pip install -e "git+https://github.com/rustybuilder/rust-faces.git#egg=py-rust-faces&subdirectory=python" --install-option="--release"

使用方法

import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle

import py_rust_faces as prf

detector = prf.blazeface(prf.BlazeFace.Net320)
image = np.array(Image.open(args.image))
rects, _confidences, _landmarks = detector.detect(image)
plt.imshow(image)

for rect in rects:
    plt.gca().add_patch(
        Rectangle(
            (rect[0], rect[1]),
            rect[2],
            rect[3],
            edgecolor="red",
            facecolor="none",
            lw=2,
        )
    )
plt.show()

基准测试

算法 【最小值,平均值,最大值】
MTCNN(CPU) 【12.561 毫秒 13.083 毫秒 13.646 毫秒】
BlazeFace 320(CPU) 【2.7741 毫秒 2.7817 毫秒 2.7900 毫秒】
BlazeFace 640(CPU) 【3.3369 毫秒 3.3430 毫秒 3.3498 毫秒】

**由于架构太小,省略了GPU时间,因为它们与CPU相似。

贡献

欢迎对项目做出贡献!如果您有建议、错误报告或希望添加对其他面部检测模型或编程语言的支持,请随时提交拉取请求或打开一个问题。

待办事项: https://github.com/users/rustybuilder/projects/1

许可证

本项目采用MIT许可证。

依赖项

~14–28MB
~429K SLoC