web-dev-qa-db-fra.com

Reconnaissance des caractères (algorithme OCR)

Je travaille sur un projet dans lequel je dois développer un algorithme OCR (je dois lire le texte de l'image puis le convertir dans une langue différente), donc ma première tâche est d'obtenir le texte de l'image.

Étapes pour terminer la première tâche.

  1. Chargement de n'importe quel format d'image (bmp, jpg, png) à partir d'une source donnée. Convertissez ensuite l'image en niveaux de gris et binarisez-la à l'aide de la valeur de seuil (algorithme Otsu). // terminé (Comment supprimer le bruit de l'image de sortie ???)

Résultats

Input Image

Output Image

  1. Détection de fonctionnalités d'image telles que la résolution et l'inversion. Afin que nous puissions enfin le convertir en une image redressée pour un traitement ultérieur. (terminé le code de rotation de l'image mais pas en mesure de détecter l'angle d'image autour duquel nous devons faire pivoter l'image, donc toujours travailler sur la partie de détection d'angle)

  2. Détection et suppression de lignes. Cette étape est nécessaire pour améliorer l'analyse de la mise en page, pour obtenir une meilleure qualité de reconnaissance du texte souligné, pour détecter les tableaux, etc. (décidé de terminer cette partie à la fin)

  3. Analyse de la mise en page. Dans cette étape, j'essaie d'identifier les zones de texte présentes dans l'image. Alors que seule cette partie est utilisée pour la reconnaissance et le reste de la région est laissé de côté.

  4. Détection de lignes de texte et de mots. Ici, nous devons également prendre soin de différentes tailles de police et de petits espaces entre les mots.

  5. Reconnaissance des caractères. Il s'agit du principal algorithme d'OCR; une image de chaque caractère doit être convertie en code de caractère approprié. Parfois, cet algorithme produit plusieurs codes de caractères pour des images incertaines. Par exemple, la reconnaissance de l'image du caractère "I" peut produire "I", "|" Les codes "1", "l" et le code de caractère final seront sélectionnés ultérieurement.

  6. Enregistrement des résultats au format de sortie sélectionné, par exemple, PDF consultable, DOC, RTF, TXT. Il est important d'enregistrer la mise en page d'origine: colonnes, polices, couleurs, images, arrière-plan, etc.

J'ai donc besoin d'aide dans la partie 6.J'ai terminé la partie de détection de ligne (obtenez n images d'un paragraphe contenant n lignes) mais je suis coincé dans la partie suivante pour obtenir des mots et la reconnaissance de caractères.Si vous connaissez de bons liens liés à l'OCR et à la partie de reconnaissance de caractères, veuillez poster Ici.

Pour la reconnaissance des caractères, je pense utiliser asprise (bibliothèque Java) http://asprise.com/product/ocr/index.php?lang=Java

34
TLE

Pour détecter l'angle de rotation , utilisez transformation de Hough .

Pour réduction du bruit , remplacez tout pixel qui n'a pas de voisin (nord, est, sud ou ouest) avec la même couleur (une couleur similaire, en utilisant un seuil de tolérance), avec la moyenne des voisins.

Recherchez les espaces blancs verticaux pour la détection de disposition . Tranche le long de l'espace vertical. Pour chaque tranche, recherchez maintenant les espaces horizontaux et tranche. Si les tranches ont la même hauteur (une hauteur similaire), vous êtes au niveau de la ligne. Sinon, répétez le découpage vertical/horizontal jusqu'à ce qu'il ne vous reste que des lignes. La dernière étape est alors à nouveau un découpage vertical, vous donnant les caractères uniques (ou ligatures dans certains cas). Les tranches longues et étroites ou courtes et larges sont des lignes.

Comparez les tranches de caractères avec une bibliothèque de caractères. Si les performances ne sont pas la principale préoccupation, essayez de trouver les caractères dans différentes bibliothèques de polices, jusqu'à ce que vous puissiez identifier la police utilisée. Ensuite, restez avec cette police pour la reconnaissance des caractères .

Dans l'image d'origine, remplacez chaque caractère par la couleur d'arrière-plan, qui est déterminée en interpolant les pixels qui ne font pas partie du caractère pour chaque pixel du caractère. Cela vous donne l'image de fond , le cas échéant.

18
nibra

Vous devriez utiliser le seuil adaptatif à la place de la méthode Otsu .. Je pense que cela sera utile http://www.csse.uwa.edu.au/~shafait/papers/Shafait-efficient-binarization-SPIE08.pdf = Cette méthode supprimera automatiquement le bruit.

5
Stupi

Vous voudrez peut-être regarder Tesseract pour la partie de reconnaissance des caractères.

3
Engineero

Vous pouvez utiliser potrace pour réduire le bruit Il vectorise l'image donnée (bmp) et la convertit en svg, pdf et quelques autres formats

http://potrace.sourceforge.net/potrace.html

1
Magesh Vs