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
1MB
1.5K SLoC
Rust Faces - 带有 Rust 接口的 Face Detection 模型
本项目旨在为多个最先进的面部检测模型提供 Rust 接口。
特性
- 集成多个面部检测模型;
- Rust 接口:核心实现是用 Rust 编写的,利用其安全性、性能和并发特性,用于预处理、非最大值抑制和其他计算密集型任务。
- 由 Ort 提供的 ONNX Runtime 推理。
- 语言绑定:项目将为 Python (✔️)、C (⚙️)、C++ (⚙️)、Java (⚙️) 和 C# (⚙️) 提供绑定,使更多拥有面部技术的开发者受益。
- 易于集成
支持的 Face Detection 模型
该项目旨在包含一系列流行且性能高的面部检测模型,例如
- BlazeFace - BlazeFace640 和 BlazeFace320
- MTCNN (多任务级联卷积网络) - 来自 timesler/facenet-pytorch 的模型
请注意,具体模型的可用性可能因各自模型的许可条款和开源可用性而异。
使用方法
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 使用方法
要求
- Rust
- Onnx Runtime - 下载其中一个版本
$ 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