scan-core
Motor de visión por computadora en Rust para la detección y rectificación de exámenes. Optimizado para alto rendimiento y facilidad de integración.
🚀 Modos de Escaneo
| Modo | Marcas en papel | Dictado | Uso ideal |
|---|---|---|---|
Aruco4x4 |
✅ Sí | ARUCO_4X4_50 (16 bits) |
Recomendado. Rápido y compacto |
Aruco5x5 |
✅ Sí | 25 bits | Entornos con interferencia visual |
Aruco6x6 |
✅ Sí | 36 bits | Máxima seguridad contra falsos positivos |
Invisible |
❌ No | Bordes + Anclas NCC | Exámenes sin marcadores visibles |
🛠️ Uso como Librería (Rust)
use
let img = open?.to_luma8
let config = ScanConfig
let result = scan?
if result.success
🖥️ Uso como CLI
El binario scan-core-test expone la funcionalidad del motor vía línea de comandos.
Escaneo con salida JSON (integración con otros sistemas)
Esto imprime el ScanResult completo como JSON a stdout, incluyendo las imágenes en base64 inline. Ideal para integración con Python, Node.js u otros backends.
Campos del JSON de respuesta:
| Campo | Tipo | Descripción |
|---|---|---|
success |
bool |
Si la detección fue exitosa |
error |
string? |
Mensaje de error (si aplica) |
cropped_image |
string? |
Base64 PNG del examen rectificado |
marked_image |
string? |
Base64 JPEG con bordes y anclas |
debug_image |
string? |
Base64 PNG del mapa de bordes (con --debug) |
corners |
Point[]? |
Esquinas detectadas (TL, TR, BR, BL) |
detected_markers |
Marker[]? |
Marcadores ArUco encontrados |
match_score |
float? |
Score de confianza NCC (modo invisible) |
logs |
string[] |
Logs de depuración |
Escaneo con salida visual (inspección humana)
Genera archivos en result/<carpeta>/:
*_cropped.png— Examen rectificado*_marked.jpg— Original con marcas de detección*_debug.png— Mapa de bordes
Generar marcadores ArUco
Opciones disponibles
| Flag | Default | Descripción |
|---|---|---|
--input |
(requerido) | Imagen o directorio a procesar |
--mode |
Aruco4x4 |
Aruco4x4, Aruco5x5, Aruco6x6, Invisible |
--json |
false |
Salida JSON a stdout (para integración) |
--debug |
false |
Incluir imágenes de depuración |
--ids |
1,2,3,4 |
IDs de marcadores ArUco (orden TL,TR,BR,BL) |
--min-markers |
3 |
Mínimo de marcadores requeridos |
--max-hamming |
1 |
Tolerancia Hamming máxima |
--anchors |
(ninguno) | Archivo JSON con config de anclas (modo Invisible) |
📐 Sistema de Coordenadas
Todas las coordenadas de anclas usan porcentaje relativo al Ancho (0.0 a 100.0).
x: 50.0= centro horizontal- En documentos A4 (más altos que anchos),
ypuede superar 100.0
⚙️ Configuración de Anclas (JSON)
🧪 Ejemplo de integración con Python
=
=
= # Base64 PNG
= # 0.0 - 1.0
Para más detalles técnicos sobre algoritmos internos, consultar: