|
# ArcFace ONNX |
|
|
|
A high-accuracy face recognition (embedding) model exported to ONNX format, ready to run with [onnxruntime](https://onnxruntime.ai/). |
|
|
|
- **Input:** Cropped RGB face image, resized to 112x112. |
|
- **Output:** 512-dimensional embedding (vector). |
|
- **Use case:** Face verification and recognition (compare two faces for similarity). |
|
|
|
--- |
|
|
|
## π₯ Download Model |
|
|
|
Download the ONNX model using: |
|
|
|
```bash |
|
wget https://huggingface.co/garavv/arcface-onnx/resolve/main/arc.onnx?download=true -O arcface.onnx |
|
``` |
|
|
|
--- |
|
|
|
## π Quick Start |
|
|
|
```python |
|
import cv2 |
|
import numpy as np |
|
import onnxruntime as ort |
|
|
|
def preprocess(img_path): |
|
img = cv2.imread(img_path) |
|
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) |
|
img = cv2.resize(img, (112, 112)) |
|
img = (img.astype(np.float32) - 127.5) / 128.0 |
|
return img[np.newaxis, ...] # shape: (1, 112, 112, 3) |
|
|
|
sess = ort.InferenceSession("arcface.onnx") |
|
input_name = sess.get_inputs()[0].name |
|
output_name = sess.get_outputs()[0].name |
|
|
|
emb1 = sess.run([output_name], {input_name: preprocess("face1.jpg")})[0][0] |
|
emb2 = sess.run([output_name], {input_name: preprocess("face2.jpg")})[0][0] |
|
|
|
# Normalize |
|
emb1 = emb1 / np.linalg.norm(emb1) |
|
emb2 = emb2 / np.linalg.norm(emb2) |
|
cosine_sim = np.dot(emb1, emb2) |
|
print("Cosine similarity:", cosine_sim) |
|
``` |
|
|
|
--- |
|
|
|
## π¦ Dependencies |
|
|
|
- Python 3.7+ |
|
- onnxruntime |
|
- numpy |
|
- opencv-python |
|
|
|
**Install with:** |
|
|
|
```bash |
|
pip install onnxruntime numpy opencv-python |
|
``` |
|
|
|
--- |
|
|
|
## π Model Details |
|
|
|
- **Architecture:** ArcFace (ONNX, 512-dim output) |
|
- **Input shape:** (1, 112, 112, 3) (batch, height, width, channels) |
|
- **Output:** (1, 512) embedding vector |
|
|
|
--- |
|
|
|
|
|
|