Java-OCR
Dieses Tutorial demonstriert die Implementierung von OCR in Java.
Java-OCR
Die OCR
oder Tesseract OCR
ist eine optische Zeichenlesemaschine, die 1985 von HP Labors entwickelt wurde und seit 2006 von Google entwickelt wird. Tesseract OCR läuft auf Unicode UTF-8
-Unterstützung und kann mehr als 100 Sprachen erkennen, weshalb es zur Erstellung von Sprachscanning-Software verwendet wird.
Die neuste Tesseract OCR
ist Tesseract Version 4, die das OCR-basierte neuronale Netzsystem LSTM
enthält, das zur Linienerkennung verwendet wird. Die Tesseract-OCR bietet Funktionen zur Bildverarbeitung mit KI und maschinellem Lernen in Java.
OCR-Anwendungen
Die Anwendungen von OCR lassen sich in folgenden Punkten definieren:
- Vorverarbeiten der Bilddaten, z. B. Filtern, Entzerren und Konvertieren in Graustufen.
- Es kann auch Wörter, Zeilen und Zeichen erkennen.
- Erkennen von Zeichen im Nachbearbeitungsprozess, Auswählen der besten Zeichen basierend auf ihrem Vertrauen aus den Sprachdaten, und diese Sprachdaten enthalten auch Grammatik, Wörterbuch usw.
- Es kann auch eine Rangliste basierend auf dem Trainingsdatensatz erstellen.
So verwenden Sie OCR in Java
Führen Sie die folgenden Schritte aus, um OCR in Java zu verwenden:
- Laden Sie zuerst die
Tess4j
-API herunter. - Extrahieren Sie die heruntergeladene Datei.
- Für OCR müssen wir ein neues Projekt in unserer IDE erstellen.
- Sobald das neue Projekt erstellt ist, importieren Sie die
jar
-Datei in Ihren Build-Pfad. - Sie finden die
jar
-Datei im Pfad.\Tess4J-3.4.8-src\Tess4J\dist
.
Wenn die obige Methode nicht funktioniert, extrahieren Sie die heruntergeladene Datei irgendwo, gehen Sie zu Eclipse, wählen Sie die Option Open Project from File System
und wählen Sie den Pfad des extrahierten Ordners.
Dadurch wird das OCR-Projekt tess4j
direkt in Eclipse geöffnet, und dann werden wir Klassen hinzufügen, um unsere Anwendungen zu erstellen.
Lassen Sie uns ein einfaches Beispiel für eine Bild-zu-Text-Konvertierung mit Tesseract OCR in Java ausprobieren.
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();
}
}
}
Der obige Code liest den Text aus dem folgenden Bild:
Sehen wir uns die Ausgabe des obigen Codes an.
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
Wie wir sehen können, ändert sich einige Ausgabe vom Bild, weil die OCR versucht hat, das Bild zu lesen. Versuchen wir nun das gleiche Beispiel mit dem folgenden handschriftlichen Beispiel:
Ändern Sie diese Codezeile:
String OutputText = DemoTesseract.doOCR(
new File("C:\\Users\\Sheeraz\\OneDrive\\Desktop\\New folder (3)\\Tess4J\\sample.png"));
Zu
String OutputText = DemoTesseract.doOCR(
new File("C:\\Users\\Sheeraz\\OneDrive\\Desktop\\New folder (3)\\Tess4J\\sample1.png"));
Jetzt ist die Ausgabe für den obigen Code für das handschriftliche Bild unten.
This Is a handwr.' ++en
Exampte
NrHC as good as X" "Cam.
Die obigen Bilder gelten als klar, was ist, wenn es ein ungeklärtes Bild gibt? Um OCR auf einem ungeklärten Bild durchzuführen, müssen wir das Bild zuerst verarbeiten; Versuchen wir es an einem Beispiel.
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);
}
}
}
Der obige Code verarbeitet zuerst ein verrauschtes Bild und versucht dann, den Bildtext zu lesen. Das für diesen Code verwendete Bild ist unten.
Siehe die Ausgabe:
I liVEI'` 1W,
Every :10 I 0
£0 Workyéy git;
A/Jo T would
M: £0 visié MW
Vor- und Nachteile von OCR
Hier sind die Vorteile der Verwendung von OCR in Java:
- Es hilft, die Arbeitseffizienz in Büros und anderen Orten zu steigern.
- OCR stellt sicher, dass der Inhalt intakt ist, was Zeit spart.
- Die Tesseract-OCR kann den angegebenen Inhalt sofort durchsuchen, was immens nützlich ist.
- Es spart die Handarbeit der Arbeiter.
Die Nachteile von OCR sind:
- Die OCR beschränkt sich nur auf die Spracherkennung.
- Diese OCR bietet keine 100%ige Genauigkeit des Inhalts.
- Diese OCR erfordert viel Aufwand, um Trainerdaten zu erstellen.
- Die Leistung von OCR basiert auf dem Bild, daher müssen wir das Bild möglicherweise extra verarbeiten, um bessere Ergebnisse zu erzielen.
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