OCR de Java

Sheeraz Gul 15 febrero 2024
  1. OCR de Java
  2. Cómo usar OCR en Java
OCR de Java

Este tutorial demuestra la implementación de OCR en Java.

OCR de Java

El OCR o Tesseract OCR es un motor óptico de lectura de caracteres desarrollado en 1985 por los laboratorios HP, y desde 2006 lo está desarrollando Google. El tesseract OCR se ejecuta en soporte Unicode UTF-8 y puede detectar más de 100 idiomas, razón por la cual se utiliza para crear software de escaneo de idiomas.

El Tesseract OCR más nuevo es la versión 4 de tesseract, que incluye el sistema de red neuronal basado en OCR LSTM, utilizado para el reconocimiento de líneas. El tesseract OCR proporciona funcionalidades para realizar el procesamiento de imágenes con IA y aprendizaje automático en Java.

Aplicaciones OCR

Las aplicaciones de OCR se pueden definir en los siguientes puntos:

  1. Preprocesar los datos de la imagen, por ejemplo, filtrar, desviar y convertir a escala de grises.
  2. También puede detectar palabras, líneas y caracteres.
  3. Reconocer caracteres en el proceso posterior, eligiendo los mejores caracteres en función de su confianza en los datos del idioma, y estos datos del idioma también incluyen gramática, diccionario, etc.
  4. También puede generar una lista de clasificación basada en un conjunto de datos de entrenamiento.

Cómo usar OCR en Java

Siga los pasos a continuación para usar OCR en Java:

  1. Primero, descargue la API Tess4j.
  2. Extraiga el archivo descargado.
  3. Para OCR, tenemos que crear un nuevo proyecto en nuestro IDE.
  4. Una vez que se crea el nuevo proyecto, importe el archivo jar en su ruta de compilación.
  5. Puede encontrar el archivo jar en la ruta .\Tess4J-3.4.8-src\Tess4J\dist.

Si el método anterior no funciona, extraiga el archivo descargado en algún lugar, vaya a Eclipse, seleccione la opción Abrir proyecto desde el sistema de archivos y seleccione la ruta de la carpeta extraída.

Esto abrirá el proyecto OCR tess4j directamente en Eclipse, y luego agregaremos clases para crear nuestras aplicaciones.

Probemos un ejemplo simple de una conversión de imagen a texto usando tesseract OCR en Java.

package tess4jtest;

import java.io.File;
import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.TesseractException;
public class test {
  public static void main(String[] args) {
    // Instance of tesseract
    Tesseract DemoTesseract = new Tesseract();
    try {
      // path to the tessdata in the extracted folder
      DemoTesseract.setDatapath(
          "C:\\Users\\Sheeraz\\OneDrive\\Desktop\\New folder (3)\\Tess4J\\tessdata");
      // InputPath
      String OutputText = DemoTesseract.doOCR(
          new File("C:\\Users\\Sheeraz\\OneDrive\\Desktop\\New folder (3)\\Tess4J\\sample.png"));

      System.out.print(OutputText);
    } catch (TesseractException ex) {
      ex.printStackTrace();
    }
  }
}

El código de arriba leerá el texto de la siguiente imagen:

imagen de muestra del código

Veamos el resultado del código anterior.

Demmck is a resource for everyone interested in programming. embedded software, and electronics. It
covers the programming languages like Python‘ CIC++‘ ct and so on in mi: website’sfirstdevelopment
smge. Openrsource hardware alsofalls in the website's scope, like Arduino‘ Raspberry PL and BeagleBone.
Demmckaims to provide tutorials, howito's, and cheat sheets to different levels of developers and
hobbyists

Como podemos ver, algunos cambios de salida de la imagen porque el OCR intentó leer la imagen. Ahora probemos el mismo ejemplo en el siguiente ejemplo escrito a mano:

muestra manuscrita del código

Cambia esta línea de código:

String OutputText = DemoTesseract.doOCR(
    new File("C:\\Users\\Sheeraz\\OneDrive\\Desktop\\New folder (3)\\Tess4J\\sample.png"));

a

String OutputText = DemoTesseract.doOCR(
    new File("C:\\Users\\Sheeraz\\OneDrive\\Desktop\\New folder (3)\\Tess4J\\sample1.png"));

Ahora, el resultado del código anterior para la imagen escrita a mano está debajo.

This Is a handwr.' ++en
Exampte
NrHC as good as X"  "Cam.

Las imágenes anteriores se consideran claras, ¿y si hay una imagen sin aclarar? Para realizar OCR en una imagen sin borrar, primero debemos procesar la imagen; probemos un ejemplo.

package tess4jtest;

import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.*;
import java.io.*;
import javax.imageio.ImageIO;
import net.sourceforge.tess4j.*;

public class test {
  public static void ImageProcess(BufferedImage Input_Image, float scaleFactor, float offset)
      throws IOException, TesseractException {
    // First of all, create an empty image buffer
    BufferedImage Output_Image = new BufferedImage(1050, 1024, Input_Image.getType());

    // Now create a 2D platform
    Graphics2D DemoGraphic = Output_Image.createGraphics();

    // draw a new image
    DemoGraphic.drawImage(Input_Image, 0, 0, 1050, 1024, null);
    DemoGraphic.dispose();

    // rescale the OP object for the grey images
    RescaleOp RescaleImage = new RescaleOp(scaleFactor, offset, null);

    // perform scaling
    BufferedImage Buffered_FOP_Image = RescaleImage.filter(Output_Image, null);
    ImageIO.write(Buffered_FOP_Image, "jpg",
        new File(
            "C:\\Users\\Sheeraz\\OneDrive\\Desktop\\New folder (3)\\Tess4J\\output\\output.png"));

    Tesseract DemoTesseract = new Tesseract();

    DemoTesseract.setDatapath(
        "C:\\Users\\Sheeraz\\OneDrive\\Desktop\\New folder (3)\\Tess4J\\tessdata");

    String OutputStr = DemoTesseract.doOCR(Buffered_FOP_Image);
    System.out.println(OutputStr);
  }

  public static void main(String args[]) throws Exception {
    File InputFile =
        new File("C:\\Users\\Sheeraz\\OneDrive\\Desktop\\New folder (3)\\Tess4J\\sample2.png");

    BufferedImage Input_Image = ImageIO.read(InputFile);

    double Image_Double =
        Input_Image.getRGB(Input_Image.getTileWidth() / 2, Input_Image.getTileHeight() / 2);

    // compare the values
    if (Image_Double >= -1.4211511E7 && Image_Double < -7254228) {
      ImageProcess(Input_Image, 3f, -10f);
    } else if (Image_Double >= -7254228 && Image_Double < -2171170) {
      ImageProcess(Input_Image, 1.455f, -47f);
    } else if (Image_Double >= -2171170 && Image_Double < -1907998) {
      ImageProcess(Input_Image, 1.35f, -10f);
    } else if (Image_Double >= -1907998 && Image_Double < -257) {
      ImageProcess(Input_Image, 1.19f, 0.5f);
    } else if (Image_Double >= -257 && Image_Double < -1) {
      ImageProcess(Input_Image, 1f, 0.5f);
    } else if (Image_Double >= -1 && Image_Double < 2) {
      ImageProcess(Input_Image, 1f, 0.35f);
    }
  }
}

El código anterior primero procesará una imagen ruidosa y luego intentará leer el texto de la imagen. La imagen utilizada para este código se encuentra a continuación.

Muestra de una imagen poco clara

Ver la salida:

I liVEI'` 1W,
Every :10 I 0
£0 Workyéy git;
A/Jo T would
M: £0 visié MW

Ventajas y desventajas de OCR

Estas son las ventajas de usar OCR en Java:

  1. Ayuda a aumentar la eficiencia del trabajo en oficinas y otros lugares.
  2. OCR asegura que el contenido esté intacto, ahorrando tiempo.
  3. El tesseract OCR puede buscar instantáneamente a través del contenido dado, lo cual es inmensamente útil.
  4. Ahorra el trabajo manual de los trabajadores.

Las desventajas de OCR son:

  1. El OCR solo se limita al reconocimiento de idiomas.
  2. Este OCR no proporciona una precisión del 100 % del contenido.
  3. Este OCR requiere mucho esfuerzo para crear datos de entrenamiento.
  4. El rendimiento de OCR se basa en la imagen, por lo que es posible que necesitemos un procesamiento adicional de la imagen para obtener mejores resultados.
Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook