---
language:
- en
- ru
tags:
- vision
- image-classification
- style-recognition
- anime
- danbooru
- artist-identification
- few-shot
- aniworldai
- onnx
license: apache-2.0
base_model: facebook/convnext-tiny-224
library_name: onnxruntime
pipeline_tag: image-classification
---
# 🎨 Author_ID — Anime Artist Style Recognition
## 🇬🇧 English Description
**Author_ID** is an AI model that recognizes the **artistic style** of anime illustrations and identifies the most likely artist from **Danbooru** database.
Think of it as **"Shazam for anime art"** — upload any illustration and instantly discover who drew it or whose style it resembles.
### 🧠 Architecture: Face ID for Art
This model is built using the same architectural principles as **Apple Face ID**:
| Face ID | Author_ID |
|---------|-----------|
| Encodes facial features into embedding | Encodes artistic style into embedding |
| Compares with stored face template | Compares with artist style centroids |
| Works with one photo enrollment | Works with few-shot artist samples |
The model generates a **512-dimensional style embedding** and compares it against precomputed artist centroids using cosine similarity.
### ⚡ Few-Shot Learning
Unlike traditional classifiers that require thousands of samples per class, Author_ID uses a **metric learning** approach:
- **No retraining needed** to add new artists
- Just compute centroid from **3-5 sample images**
- Instantly searchable in the embedding space
### 📦 Model Versions
| Version | Authors | Availability |
|---------|---------|--------------|
| **Demo (this repo)** | 500 | Free download |
| **Full** | 3000+ | [Telegram Bot](https://t.me/aniworld_bot) |
### 🏷️ Output Format
Returns top-5 most similar artists with confidence scores:
```
(artist:hiten:0.87), (artist:saitom:0.72), (artist:anmi:0.68), ...
```
---
## 🇷🇺 Описание на русском
**Author_ID** — это ИИ-модель, которая распознаёт **художественный стиль** аниме-иллюстраций и определяет наиболее вероятного автора из базы **Danbooru**.
Можно сказать, это **"Shazam для аниме-артов"** — загрузите любую картинку и мгновенно узнайте, кто её нарисовал или чей стиль она напоминает.
### 🧠 Архитектура: Face ID для арта
Модель построена по тем же принципам, что и **Apple Face ID**:
| Face ID | Author_ID |
|---------|-----------|
| Кодирует черты лица в эмбеддинг | Кодирует стиль рисунка в эмбеддинг |
| Сравнивает с сохранённым шаблоном | Сравнивает с центроидами авторов |
| Работает с одним фото при регистрации | Работает с few-shot примерами |
Модель генерирует **512-мерный вектор стиля** и сравнивает его с предрассчитанными центроидами авторов через косинусное сходство.
### ⚡ Few-Shot обучение
В отличие от классических классификаторов, Author_ID использует **metric learning**:
- **Не требует переобучения** для новых авторов
- Достаточно **3-5 примеров** для создания центроида
- Мгновенный поиск в пространстве эмбеддингов
### 📦 Версии модели
| Версия | Авторов | Доступность |
|--------|---------|-------------|
| **Demo (этот репо)** | 500 | Бесплатно |
| **Full** | 3000+ | [Telegram Bot](https://t.me/aniworld_bot) |
---
## 🚀 How to Use / Как использовать
### Installation / Установка
```bash
pip install onnxruntime onnx pillow numpy huggingface_hub
# or for GPU / или для GPU:
pip install onnxruntime-gpu onnx pillow numpy huggingface_hub
```
### Inference / Инференс
```python
import onnxruntime as ort
import onnx
import numpy as np
from PIL import Image
import json
from huggingface_hub import hf_hub_download
# Download model from HuggingFace (cached automatically)
MODEL_PATH = hf_hub_download(
repo_id="AugustLabs/Author_ID",
filename=" style_predictor_500.onnx"
)
class AuthorID:
"""
Author_ID: Anime Artist Style Recognition
Single ONNX file contains: model + centroids + author names
"""
def __init__(self, onnx_path):
# Load metadata (author names embedded in ONNX)
model_onnx = onnx.load(onnx_path)
self.names = []
self.input_size = 384
for prop in model_onnx.metadata_props:
if prop.key == "author_names":
self.names = json.loads(prop.value)
elif prop.key == "input_size":
self.input_size = int(prop.value)
providers = ['CUDAExecutionProvider', 'CPUExecutionProvider']
self.session = ort.InferenceSession(onnx_path, providers=providers)
self.mean = np.array([0.485, 0.456, 0.406], dtype=np.float32).reshape(1, 3, 1, 1)
self.std = np.array([0.229, 0.224, 0.225], dtype=np.float32).reshape(1, 3, 1, 1)
def preprocess(self, image_path):
img = Image.open(image_path)
# Handle transparency
if img.mode in ('RGBA', 'LA') or (img.mode == 'P' and 'transparency' in img.info):
bg = Image.new('RGB', img.size, (255, 255, 255))
img = img.convert('RGBA')
bg.paste(img, mask=img.split()[3])
img = bg
else:
img = img.convert('RGB')
img = img.resize((self.input_size, self.input_size), Image.BILINEAR)
img_np = np.array(img, dtype=np.float32) / 255.0
img_np = img_np.transpose(2, 0, 1)[np.newaxis, ...]
img_np = (img_np - self.mean) / self.std
return img_np
def predict(self, image_path, top_k=5):
"""Returns list of (author_name, similarity_score)"""
img_np = self.preprocess(image_path)
top_indices, top_scores = self.session.run(None, {'image': img_np})
results = []
for idx, score in zip(top_indices[0][:top_k], top_scores[0][:top_k]):
results.append((self.names[idx], float(score)))
return results
def predict_tags(self, image_path, top_k=5):
"""Returns formatted tags: (artist:name:score)"""
results = self.predict(image_path, top_k)
return [f"(artist:{name}:{score:.2f})" for name, score in results]
# === Example Usage ===
if __name__ == "__main__":
# Initialize (once) — model downloads automatically
model = AuthorID(MODEL_PATH)
# Predict
results = model.predict("your_image.jpg", top_k=5)
print("🎨 Detected artist styles:")
for author, score in results:
print(f" {author}: {score:.1%}")
# Or get formatted tags
tags = model.predict_tags("your_image.jpg")
print("\n📝 Tags:", ", ".join(tags))
```
### Expected Output / Пример вывода
```
🎨 Detected artist styles:
hiten_(hitenkei): 87.3%
saitom: 71.8%
anmi: 68.2%
kantoku: 65.1%
mishima_kurone: 62.4%
📝 Tags: (artist:hiten_(hitenkei):0.87), (artist:saitom:0.72), (artist:anmi:0.68), (artist:kantoku:0.65), (artist:mishima_kurone:0.62)
```
---
## 📊 Technical Details / Технические детали
| Parameter | Value |
|-----------|-------|
| Backbone | ConvNeXt-Tiny |
| Embedding dim | 512 |
| Input size | 384×384 |
| Training data | Danbooru (filtered) |
| Metric | Cosine similarity |
| Format | ONNX (opset 17) |
---
## ⚠️ Limitations / Ограничения
- Works best on **anime/manga style** illustrations
- May confuse artists with very similar styles
- Confidence drops on **heavily cropped** or **low-quality** images
- Demo version limited to **500 authors**
---