Home

pl

La reconnaissance Optique des caractères ou tout simplement « OCR »  est une technique très intéressante utilisée dans plusieurs domaines et projets industriels tel que :

  • La reconnaissance des plaques d’immatriculation
  • La GED : gestion électronique des documents
  • la vison industrielle , la lecture des codes , la robotique intelligente …

Dans cet article nous allons utiliser la « library » TESS4J  et effectuer un test sur une plaque d’immatriculation.

1. Téléchargement

Tout d’abord commençons par télécharger Tess4J  depuis ce lien , et décompresser le fichier rar .

2. Configuration sur Eclipse
  • Créer un nouveau projet JAVA
  • Click droit sur votre projet et créer un nouveau dossier Libs : New – Folder

configuration

  • Copier les fichier jars suivants vers le dossier Libs :
    1.  tess4j.jar : \Dossier d’extraction de Tess4J \Tess4J\dist\tess4j.jar
    2.  log4j-1.2.17.jar : \Dossier d’extraction de Tess4J \Tess4J\lib\log4j-1.2.17.jar
    3.  junit-4.10.jar : \Dossier d’extraction de Tess4J \Tess4J\lib\junit-4.10.jar
    4.  jna-4.1.0.jar : \Dossier d’extraction de Tess4J \Tess4J\lib\jna-4.1.0.jar
    5.  jai_imageio.jar : \Dossier d’extraction de Tess4J \Tess4J\lib\jai_imageio.jar
    6.  ghost4j-0.5.1.jar : \Dossier d’extraction de Tess4J \Tess4J\lib\ghost4j-0.5.1.jar
  • Sélectionner tout les jars et ajouter les au Build Path comme suit :

build

  •  Créer un nouveau dossier  dlls dans votre projet et ajouter les fichiers dll suivants :
    1. liblept168.dll : \Dossier d’extraction de Tess4J\Tess4J\liblept168.dll
    2. libtesseract302.dll: \Dossier d’extraction de Tess4J\Tess4J\libtesseract302.dll
  • Localiser l’emplacement de votre projet avec : Properties – Ressources – Location et Copier ces deux fichiers dlls dans le dossier bin de votre projet .
  • Copier le dossier \Dossier d’extraction de Tess4J\Tess4J\tessdata et coller le dans votre projet :

pp2

3. Test de la reconnaissance des plaques d’immatriculation

Dans cette étape nous allons effectuer un test avec un programme basique , le résultat pour cette image est parfait mais avec un changement de luminosité ou avec un arrière plan ayant les mêmes couleurs du texte vous risquez d’avoir un résultat erroné , pour ceci nous allons vous proposer  dans un futur proche d’autres tutoriels à propos de l’optimisation des résultats.

Nous allons effectuer le test sur l’image suivante :

plaque

Créer une « Class » java et copier le code source suivant et n’oublier surtout pas de changer l’emplacement de votre image d’entrée :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import java.awt.Color;
import java.awt.Font;
import java.awt.LayoutManager;
import java.io.File;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.OverlayLayout;
import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.TesseractException;
public class JavaCVPrjt01 extends JPanel {
    public static void main(String[] args) {
        try {
            String chemin="C:/Users/SAAD/Desktop/plaque.jpg" ;
            Tesseract instance = Tesseract.getInstance();
            String result = instance.doOCR(new File(chemin));
            System.out.println("La valeur recupérée est :" + result);
            afficher(chemin,result) ;
        } catch (TesseractException e) {
            System.err.println(e.getMessage());
        }
    }
    public static void afficher(String link,String text){
        JFrame frame = new JFrame("Overlay App");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel panel = new JPanel();
        LayoutManager overlay = new OverlayLayout(panel);
        panel.setLayout(overlay);
        JLabel label1 = new JLabel(text);
        label1.setForeground(Color.GREEN);
        label1.setFont(new Font("SansSerif", Font.BOLD,35));
        label1.setAlignmentX(0.5f);
        label1.setAlignmentY(0.5f);
        panel.add(label1);
        JLabel label2 = new JLabel(new ImageIcon(link));
        label2.setAlignmentX(0.5f);
        label2.setAlignmentY(0.5f);
        panel.add(label2);
        frame.add(panel);
        frame.pack();
        frame.setVisible(true);
    }
}
4. Résultat

result2

Et voila vous disposez maintenant d’un système de reconnaissance des caractères , dans les prochains articles  nous allons renforcer la reconnaissance avec une couche de traitement d’image en utilisant OpenCV pour minimiser la marge d’erreur.

Advertisements

Laisser un commentaire

Choisissez une méthode de connexion pour poster votre commentaire:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s