Una aplicación Java sencilla que usa Tesseract (a través de Tess4J) para realizar OCR sobre imágenes.
JavaOCR carga una imagen seleccionada por el usuario y extrae su texto usando Tesseract. Este repositorio incluye un directorio tessdata/ con el archivo spa.traineddata (español) para facilitar pruebas locales.
Características principales
- Interfaz Swing minimalista para seleccionar imágenes y ver el texto reconocido.
- Usa Tess4J (wrapper Java para Tesseract).
- Viene preparado para usar los datos de lenguaje local (
tessdata/).
- Java JDK 8 o posterior (se recomienda JDK 17+).
- Tesseract OCR (instalación nativa) si deseas usar OCR completo. Para pruebas locales el proyecto incluye
tessdata/spa.traineddata. - Maven para compilar (opcional si usas IntelliJ). Si no tienes Maven en PATH, puedes usar el Maven Wrapper (
mvnw) — ver sección "Maven Wrapper".
Desde CMD (ventana de comandos) en Windows:
cd /d C:\Users\juan\Documents\IdeaProjects\JavaOCR
:: Si tienes Maven instalado globalmente
mvn -DskipTests package
:: Si no tienes Maven, usa IntelliJ (Maven -> Lifecycle -> package) o genera el wrapper (ver sección "Maven Wrapper")
:: Configura tessdata (temporal para la sesión):
set TESSDATA_PREFIX=C:\Users\juan\Documents\IdeaProjects\JavaOCR\tessdata
:: O define de forma persistente:
setx TESSDATA_PREFIX "C:\Users\juan\Documents\IdeaProjects\JavaOCR\tessdata"
:: Ejecuta el JAR empacado (o usa el script run_javaocr.bat):
java -jar target\JavaOCR-0.0.1-SNAPSHOT.jarEl Maven Wrapper (mvnw, mvnw.cmd y .mvn/wrapper/) permite a cualquier usuario construir el proyecto sin instalar Maven globalmente.
Para generarlo (necesitas Maven al menos una vez) ejecuta en la raíz del proyecto:
mvn -N io.takari:maven:wrapperEsto crea los archivos mvnw, mvnw.cmd y la carpeta .mvn/wrapper/. Después podrás compilar con:
mvnw.cmd -DskipTests packageNota: no incluí los binarios del wrapper en el repositorio para evitar añadir artefactos binarios aquí; si quieres que los añada, puedo generarlos e incluirlos (necesito ejecutar Maven localmente o que los descargues).
- Clona o descarga el repositorio.
- Compila (ver Quick start).
- El JAR generado estará en
target/JavaOCR-*.jar.
Tesseract necesita encontrar los archivos .traineddata. El código intenta usar la variable de entorno TESSDATA_PREFIX si está definida; si no lo está, usa ./tessdata relativo al directorio de trabajo.
Cómo establecer TESSDATA_PREFIX en Windows (CMD):
:: Para la sesión actual (temporal)
set TESSDATA_PREFIX=C:\Users\juan\Documents\IdeaProjects\JavaOCR\tessdata
:: Para la sesión y de forma persistente (setx)
setx TESSDATA_PREFIX "C:\Users\juan\Documents\IdeaProjects\JavaOCR\tessdata"En IntelliJ (Run Configuration):
- Run -> Edit Configurations -> selecciona tu aplicación -> Environment variables -> añade
TESSDATA_PREFIX.
Comandos útiles para diagnosticar en Windows (CMD):
:: Versión de Java y arquitectura (importante para compatibilidad con DLLs nativas)
java -version
echo %PROCESSOR_ARCHITECTURE%
:: Localiza tesseract si está instalado
where tesseract
:: Comprueba que spa.traineddata existe en el tessdata usado
dir C:\Users\juan\Documents\IdeaProjects\JavaOCR\tessdata\spa.traineddata- Desde IntelliJ: Ejecuta la clase
org.juanrdzbaeza.JavaOCR(Run Configuration). - Desde la línea de comandos (si ya generaste el JAR):
java -jar target\JavaOCR-0.0.1-SNAPSHOT.jarTambién hay dos scripts en la raíz:
setup_tessdata_win.bat— configuraTESSDATA_PREFIX(temporal y persistente) y compruebatesseract --version.run_javaocr.bat— estableceTESSDATA_PREFIXpara la sesión si no está definido y ejecuta el JAR empaquetado si existe entarget/.
- Pulsa "Examinar" para seleccionar una imagen.
- La aplicación mostrará "Procesando..." y luego el texto reconocido.
A modo de ejemplo, si ejecutas OCR sobre src/main/resources/images-tests/2024-10-17_02-02.png, podrías obtener una salida similar a:
Factura Nº: 2024-1001
Fecha: 2024-10-17
Importe: 123,45 EUR
Cliente: Empresa Ejemplo S.A.
Los resultados varían según la calidad de la imagen y el idioma.
- Error:
Error opening data file ./spa.traineddatao mensajes sobreTESSDATA_PREFIX:- Asegúrate de que
tessdata/spa.traineddataexiste en la ruta que useTESSDATA_PREFIX. - Ejecuta:
- Asegúrate de que
echo %TESSDATA_PREFIX%
dir "%TESSDATA_PREFIX%\spa.traineddata"- Si no existe, apunta
TESSDATA_PREFIXal directorio correcto o copiaspa.traineddataen el directoriotessdatadel proyecto.
-
Error nativo
Invalid memory access(JNA / DLLs) o excepciones nativas:- Causa típica: las DLLs nativas de Tesseract/Leptonica no están en
PATH, o la arquitectura (x86 vs x64) no coincide con la JVM. - Pasos:
- Verifica
where tesseractpara confirmar la instalación nativa. - Verifica
java -versiony%PROCESSOR_ARCHITECTURE%para comparar arquitecturas. - Si no tienes Tesseract instalado, instala una build para Windows (ej.: UB-Mannheim) y añade su
binalPATH. - Reinicia el terminal/IDE después de modificar
PATH.
- Verifica
- Causa típica: las DLLs nativas de Tesseract/Leptonica no están en
-
Advertencia SLF4J (
No SLF4J providers were found):- Ya añadimos
slf4j-simpleenpom.xmlpara evitar la advertencia en ejecución.
- Ya añadimos
-
Si un archivo ya estaba trackeado por Git y ahora lo quieres ignorar (ej.:
.idea/), debes eliminarlo del índice primero:
git rm -r --cached .idea
git commit -m "Remove .idea from repo and ignore globally"- El JAR resultante empaqueta dependencias Java, pero las DLLs nativas de Tesseract NO quedan dentro del JAR. Para una distribución portable en Windows puedes crear un ZIP que incluya:
JavaOCR-<versión>.jar- carpeta
tessdata/completa - la carpeta
bin/con los DLLs nativos de Tesseract (desde una instalación Windows) - un script
run_javaocr.batque establezcaTESSDATA_PREFIXy añada temporalmente la carpetabinalPATHantes de ejecutar el JAR.
Ejemplo sencillo de run_portable.bat (esquema):
@echo off
set SCRIPT_DIR=%~dp0
set PATH=%SCRIPT_DIR%bin;%PATH%
set TESSDATA_PREFIX=%SCRIPT_DIR%tessdata
java -jar %SCRIPT_DIR%JavaOCR-0.0.1-SNAPSHOT.jarSi quieres compilar automáticamente en GitHub Actions, puedo añadir un workflow mínimo que ejecute mvn -DskipTests package y almacene el artifact. Dime si lo quieres y lo añado.
Contribuciones bienvenidas. Abre issues o pull requests en GitHub: https://github.com/juanrdzbaeza/JavaOCR
MIT. Ver el archivo LICENSE.
Si necesitas ayuda adicional, comenta en un issue del repo o deja un mensaje en la página del proyecto en GitHub.