Skip to content

AlvaroQ/lotto-scan

Repository files navigation

Lotto Scan

Aplicación Kotlin Multiplatform para escanear y gestionar boletos de lotería española usando OCR con inteligencia artificial.

Kotlin Compose Multiplatform Platform License


Screenshots

Lista de boletos     Escaneo OCR


Descripción

Lotto Scan permite escanear boletos de lotería española con la cámara del dispositivo, extrayendo automáticamente los números mediante OCR (Reconocimiento Óptico de Caracteres) con modelos de IA ejecutados localmente.

Características principales

  • Escaneo OCR - Detección automática de números usando PaddleOCR + ONNX Runtime
  • 100% Offline - Los modelos de IA se ejecutan localmente, sin enviar datos a servidores
  • Multiplataforma - Android e iOS desde un único código base
  • Múltiples loterías - Primitiva, Euromillones, Bonoloto, El Gordo, Lotería Nacional, Quiniela
  • Detección inteligente - Extrae serie, fracción, fecha y tipo de sorteo en Lotería Nacional
  • Nivel de confianza - Muestra el porcentaje de precisión del OCR
  • Edición manual - Permite corregir números si el OCR falla
  • Almacenamiento local - Guarda tus boletos con SQLDelight

Stack Tecnológico

Categoría Tecnología
Lenguaje Kotlin 2.1.0
UI Framework Compose Multiplatform 1.7.3
Arquitectura Clean Architecture + MVVM
DI Koin
Base de datos SQLDelight
OCR Engine ONNX Runtime + PaddleOCR
Cámara Android CameraX
Cámara iOS AVFoundation
Imágenes Coil 3
Logging Napier
Testing kotlin-test, Turbine, coroutines-test

Arquitectura

El proyecto sigue Clean Architecture con patrón MVVM:

shared/src/commonMain/
├── presentation/          # UI Layer
│   ├── screen/            # Compose Screens
│   ├── viewmodel/         # ViewModels con StateFlow
│   ├── component/         # Componentes reutilizables
│   └── theme/             # Temas y estilos
├── domain/                # Business Layer
│   ├── model/             # Entidades de dominio
│   ├── repository/        # Interfaces de repositorio
│   └── usecase/           # Casos de uso
├── data/                  # Data Layer
│   ├── repository/        # Implementaciones
│   ├── local/             # SQLDelight DAOs
│   └── mapper/            # Mappers Entity <-> Domain
├── ml/                    # Machine Learning
│   ├── OcrProcessor       # expect/actual para OCR
│   └── LotteryNumberExtractor
└── di/                    # Módulos Koin

Flujo de datos

UI (Screen) → ViewModel → UseCase → Repository → DataSource
                                         ↑
                              (Flow reactivo para actualizaciones)

Loterías soportadas

Lotería Números Campos adicionales
Primitiva 6 números (1-49) -
Euromillones 5 + 2 estrellas -
Bonoloto 6 números (1-49) -
El Gordo 5 + 1 número -
Lotería Nacional 5 dígitos Serie, Fracción, Precio, Fecha, Tipo sorteo
Quiniela 15 resultados -

Requisitos

  • Android: minSdk 24 (Android 7.0+)
  • iOS: iOS 15.0+
  • JDK: 17+
  • Android Studio: Ladybug o superior
  • Xcode: 15+ (para iOS)

Instalación

Clonar repositorio

git clone https://github.com/AlvaroQ/lotto-scan.git
cd lotto-scan

Configurar JAVA_HOME

export JAVA_HOME="/Applications/Android Studio.app/Contents/jbr/Contents/Home"

Android

./gradlew :androidApp:assembleDebug

iOS

cd iosApp
pod install
open iosApp.xcworkspace

Compilar desde Xcode seleccionando el simulador o dispositivo.


Comandos útiles

Comando Descripción
./gradlew :androidApp:assembleDebug Build Android debug
./gradlew :androidApp:assembleRelease Build Android release
./gradlew :shared:allTests Ejecutar todos los tests
./gradlew :shared:generateCommonMainLotteryDatabaseInterface Generar SQLDelight
./gradlew clean Limpiar proyecto
cd iosApp && pod install Instalar pods iOS

Estructura del proyecto

lotto-scan/
├── androidApp/                    # Módulo Android
│   └── src/androidMain/
│       ├── assets/models/         # Modelos ONNX
│       └── res/                   # Resources Android
├── iosApp/                        # Módulo iOS
│   ├── iosApp/
│   │   └── Resources/models/      # Modelos ONNX
│   ├── Podfile                    # CocoaPods
│   └── project.yml                # XcodeGen
├── shared/                        # Código compartido KMP
│   └── src/
│       ├── commonMain/            # Código común
│       ├── androidMain/           # Implementaciones Android
│       ├── iosMain/               # Implementaciones iOS
│       └── commonTest/            # Tests compartidos
├── assets/                        # Screenshots para README
├── gradle/                        # Gradle wrapper y TOML
└── build.gradle.kts               # Build principal

Modelos OCR

La app utiliza PaddleOCR con ONNX Runtime para el reconocimiento de texto:

Modelo Tamaño Descripción
det.onnx ~2.5 MB Detección de regiones de texto
rec.onnx ~5 MB Reconocimiento de caracteres
dict.txt ~100 KB Diccionario de caracteres

Los modelos se ejecutan 100% localmente en el dispositivo.


Testing

# Todos los tests
./gradlew :shared:allTests

# Tests comunes (JVM)
./gradlew :shared:jvmTest

# Tests Android
./gradlew :shared:testDebugUnitTest

# Tests iOS (requiere macOS)
./gradlew :shared:iosSimulatorArm64Test

Roadmap

  • OCR con PaddleOCR + ONNX
  • Soporte Android e iOS
  • Detección de múltiples loterías
  • Edición manual de boletos
  • Almacenamiento local
  • Verificación de premios con API
  • Notificaciones de sorteos
  • Estadísticas de números
  • Dark mode mejorado
  • Exportar/compartir boletos

Licencia

MIT License

Copyright (c) 2024 Álvaro Quiroga

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

Autor

Álvaro Quiroga - @AlvaroQ


Made with Kotlin Multiplatform

About

AI-powered models for cross-platform lottery ticket scanner for lotteries using PaddleOCR and ONNX Runtime

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors