/ Модель

Характеристики

Лицензия
Apache 2.0
Архитектура
crnn · dense
Опубликована
26 сен 2026

captCHAD

Описание изображенийИзображение → текст3 профессии

Компактная модель OCR распознаёт буквенно-цифровые CAPTCHA с помехами и подходит для быстрого запуска на CPU и периферийных устройствах.

73скачиваний за 30 дней2лайкавеса обновлены1 окт 2026

Бенчмарки

Как модель справилась с задачами пользователей ailist и что о ней публикуют открытые лидерборды

Публичные оценки

Из открытых лидербордов. Сравнивайте результаты одного теста при одинаковых условиях — отсутствие оценки не значит, что модель хуже.

В подключённых источниках результатов для этой модели пока нет.

Что умеет модель

Описание составлено по карточке модели и метаданным Hugging Face

captCHAD — компактная модель OCR для распознавания буквенно-цифровых CAPTCHA, разработанная AndresDev. Модель содержит 97 057 параметров и рассчитана на работу на CPU, периферийных устройствах и в браузере. Архитектура объединяет блоки MobileNet с инвертированными остаточными связями, контрастный входной блок с яркостными и градиентными признаками Собеля, двунаправленный GRU и декодирование CTC. Модель принимает изображения размером 3 × 64 × 192 и предсказывает последовательности длиной от 1 до 8 символов; словарь включает цифры и латинские буквы в обоих регистрах.

Для развёртывания доступны ONNX и Safetensors, включая варианты FP32, FP16 и INT8. В README приведён результат 80% точного совпадения на тесте из 50 CAPTCHA, а также малая задержка CPU-инференса; эти показатели относятся к описанному авторами набору испытаний. Модель предназначена для распознавания CAPTCHA с помехами и искажениями, но результат зависит от сходства входных изображений с обучающими и проверочными примерами. Лицензия — Apache-2.0.

Сценарии применения

  • распознавание буквенно-цифровых CAPTCHA на изображениях
  • автоматическая расшифровка CAPTCHA в браузере
  • инференс OCR на маломощном CPU
  • распознавание искажённых символов с линиями и фоновым шумом

Ограничения

В описанном авторами тесте точное совпадение составило 80% на 50 CAPTCHA, поэтому часть изображений распознаётся неверно. Модель настроена на буквенно-цифровые CAPTCHA и вход 3 × 64 × 192; качество на других типах изображений не подтверждено.

Для каких профессий подходит3

Разделы каталога профессий, в задачах которых используется эта модель

Все профессии

Карточка модели

README от автора на Hugging Face, как он его опубликовал

Открыть на Hugging Face

captCHAD: Sub-100k Parameter Neural CAPTCHA OCR

🚀 v1.5 Update: Weights upgraded to epoch 83 convergence. Real-world challenge benchmark increased to 4/5 (80%) in the gallery and 5/6 (83.3%) overall, now solving PXAZGC and JQA3Lg with 100% exact match. ONNX (FP32/INT8) and Safetensors (FP32/FP16) packages updated.

captCHAD is a compact, 97,057-parameter optical character recognition (OCR) model engineered for low-power CPU, edge, and browser environments.

⚡ Try the In-Browser Demo: You can test captCHAD directly in your browser with zero server latency using WebAssembly at AndresDev/captCHAD-demo. Pick from preset challenge datasets or drop/paste your own CAPTCHAs.

Rather than relying on heavy Vision Transformers (TrOCR, 61M–330M parameters) or standard CRNN pipelines that degrade when encountering crossing strike-bars, distorted grid patterns, and high-contrast color shifts, captCHAD employs a lightweight sequence architecture combining Inverted Residual MobileNet blocks, a Dual Contrast Stem, Bidirectional GRUs, and Connectionist Temporal Classification (CTC) decoding.


Direct Challenge Evaluation Gallery

Evaluation against open-source models on real-world production CAPTCHAs collected from active websites:

Image ChallengeGround TruthcaptCHAD v1.5 (97k)Graf-J CRNN (3.6M)Conv-Trans (12.3M)TrOCR (61.6M)
K6DXAYK6DXAY (100%)K6DXAY (100%)K6DxAYx674w7 (0%)
DmS3XDmS3X (100%)PxcC (0%)DxP9 (0%)p4c4m (0%)
PXAZGCPXAZGC (100%)PxAzGC (100% case)PXAZCc (83.3%)xw6c (0%)
JQA3LgJQA3Lg (100%)lIJ (0%)J8g (0%)dn86g (0%)
7yCntT2rGm5sajyGcr7GErcmcn

Comprehensive Benchmark: captCHAD vs. Hugging Face Models

Benchmarked on identical hardware (CPU, 4 threads) across 50 unseen multi-archetype test captchas:

ModelArchitecture# ParametersDisk FootprintExact MatchMean Char AccCPU Latency
captCHAD (ONNX)Inverted Residuals + BiGRU + CTC97,057582 KB80.0% (40/50)95.00%0.56 ms
captCHAD (PyTorch)Inverted Residuals + BiGRU + CTC97,057436 KB80.0% (40/50)95.00%3.65 ms
Graf-J/captcha-crnn-finetunedCNN + Bi-LSTM (CRNN)3,570,943 (3.57M)14.3 MB12.0% (6/50)58.33%16.18 ms
Graf-J/captcha-conv-transformerCNN + Transformer Encoder12,279,551 (12.3M)51.7 MB10.0% (5/50)58.90%18.22 ms
tomofi/trocr-captchaTrOCR (Vision Transformer)61,596,672 (61.6M)246.5 MB0.0% (0/50)15.67%564.51 ms

Architectural Observations

  • TrOCR (61.6M params): Autoregressive Vision Transformers trained primarily on clean documents lack inductive edge bias. When facing crossing strike-bars, non-linear waves, or bulge grids, the attention mechanism loses positional alignment and hallucinates, resulting in 0% exact match and 564 ms latency.
  • CRNN and Conv-Transformer (3.6M–12.3M params): Standard convolutional backbones without edge-separation stages fuse background grid lines and noise specks into character activations, resulting in 10%–12% exact match on multi-archetype noise.
  • captCHAD (97k params): Uses a pre-convolutional Contrast Stem (normalized luminance and directional Sobel gradients) and Squeeze-and-Excitation channel gating to isolate glyph contours from background clutter, maintaining 80% exact match with significantly lower compute requirements.

Quantization Formats & Benchmark

To support different deployment environments (WASM browsers, microcontrollers, embedded Linux, server inference), captCHAD is provided in multiple precision formats:

Format / FilePrecisionDisk SizeExact MatchMean Char AccSingle-Sample LatencyProfile / Recommendation
captchad.onnxFP32582 KB80.0%94.00%1.03 ms (0.56 ms raw)Fastest CPU Execution (Production standard)
model_fp16.safetensorsFP16206 KB80.0%94.00%5.61 msOptimal Balance (50% size reduction, 0% accuracy loss)
captchad_fp16.onnxFP16395 KB80.0%94.00%5.75 msBalanced ONNX (Half-precision graph)
captchad_int8.ptINT8320 KB80.0%94.00%6.13 msQuantized PyTorch (Integer dynamic weights)
captchad_int8.onnxINT8412 KB72.0%90.67%5.26 msEdge Hardware (Integer quantized graph)
model_fp8.safetensorsFP8 (e4m3fn)110 KB68.0%91.33%5.68 msUltra-Compact (72% size reduction, solid accuracy)
model_int4.safetensorsINT4 Packed72 KB4.0%41.30%5.63 msExtreme Compression (Experimental 4-bit packaging)

Architecture Details

Input Image (3 x 64 x 192)
     │
     ▼
[Contrast Stem] ──> Extracts Normalized Luminance + Sobel Spatial Gradients (Sobel-X & Sobel-Y)
     │
     ▼
[MobileNet Inverted Residual Blocks] ──> Depthwise-Separable Convolutions + Squeeze-and-Excitation
     │
     ▼
[Height Pooling] ──> Vertical feature compression: (B, 52, 48)
     │
     ▼
[Bidirectional GRU] ──> Horizontal temporal sequence modeling
     │
     ▼
[CTC Sequence Decoder] ──> Arbitrary-length prediction without segmentation
  • Input Dimensions: (B, 3, 64, 192)
  • Output Dimensions: (48, B, 63) (Logits for CTC Loss, sequence length $T=48$)
  • Output Character Length: 1 to 8 characters per image (optimized for 4–7 character CAPTCHAs)
  • Character Vocabulary: 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ (62 alphanumeric classes + 1 CTC blank token at index 0)
  • Trainable Parameters: 97,057

Quick Start

1. ONNX Runtime Inference

Requires onnxruntime, numpy, and pillow:

import numpy as np
from PIL import Image
import onnxruntime as ort

# Supports captchad.onnx (FP32), captchad_int8.onnx (INT8), captchad_fp16.onnx (FP16)
session = ort.InferenceSession("captchad.onnx")
input_name = session.get_inputs()[0].name

CHARSET = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
IDX2CHAR = {i + 1: ch for i, ch in enumerate(CHARSET)}

# Preprocess image to [1, 3, 64, 192] normalized in [-1.0, 1.0]
img = Image.open("sample.png").convert("RGB").resize((192, 64), Image.BILINEAR)
arr = (np.array(img, dtype=np.float32).transpose(2, 0, 1) - 127.5) / 127.5
inp = arr[np.newaxis, :, :, :]

# Run inference
logits = session.run(None, {input_name: inp})[0]
preds = np.argmax(logits[:, 0, :], axis=-1)

# CTC Collapse
decoded, prev = [], None
for t in preds:
    if t != prev and t != 0:
        decoded.append(IDX2CHAR[t])
    prev = t

print("Prediction:", "".join(decoded))

2. Safetensors and PyTorch Inference

import torch
from safetensors.torch import load_file
from model import captCHAD, decode_tokens
from PIL import Image
import numpy as np

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = captCHAD()

# Load weights (supports model.safetensors, model_fp16.safetensors, model_fp8.safetensors)
state_dict = load_file("model_fp16.safetensors")
state_dict = {k: v.to(torch.float32) if v.is_floating_point() else v for k, v in state_dict.items()}
model.load_state_dict(state_dict)
model.to(device)
model.eval()

img = Image.open("sample.png").convert("RGB").resize((192, 64), Image.BILINEAR)
arr = (np.array(img, dtype=np.float32).transpose(2, 0, 1) - 127.5) / 127.5
tensor = torch.from_numpy(arr).unsqueeze(0).to(device)

with torch.no_grad():
    logits = model(tensor)
    preds = logits.argmax(dim=-1)[:, 0].tolist()
    text = decode_tokens(preds)

print("Prediction:", text)

3. Command-Line Inference

Test different engines and quantization formats directly via inference.py:

# Fastest CPU production baseline (ONNX FP32)
python inference.py sample.png --engine onnx --quant fp32

# Balanced half-precision (ONNX FP16, 395 KB)
python inference.py sample.png --engine onnx --quant fp16

# Dynamic integer quantization (ONNX INT8, 412 KB)
python inference.py sample.png --engine onnx --quant int8

# Compact half-precision (Safetensors FP16, 206 KB)
python inference.py sample.png --engine safetensors --quant fp16

# Ultra-compact 8-bit float (Safetensors FP8, 110 KB)
python inference.py sample.png --engine safetensors --quant fp8

# Extreme 4-bit packed weights (Safetensors INT4, 72 KB)
python inference.py sample.png --engine safetensors --quant int4

License

This project is licensed under the Apache 2.0 License.

Как запустить

На своей GPU в ailist. Цена — по текущим предложениям провайдеров

GPU в ailist

Универсальный рантайм

Нельзя запустить

Архитектура crnn неизвестна transformers в образе рантайма.

Ревизия весов
584ee03

0 моделей