1

J'ai tout un tas d'images de documents officiels des années 1930-40, à la fois couleur et B, qui sont de qualité médiocre (généralement généralement < 250 kB). Ce sont des photos de formulaires standard utilisés par les institutions officielles telles que les hôpitaux et les municipalités et similaires, qui ont été remplis à la main ou par machine à écrire avec des informations personnelles. J'ai placé deux exemples typiques à la fin de ce post. (Notez que ce sont des formulaires vides - je préfère ne pas placer ceux avec des informations personnelles en ligne.)Pré-traitement d'image et mise en grappe en utilisant SciKit-Image et SciKit-Learn - quelques conseils nécessaires

Ce que je dois faire est de commander la collection de sorte que tous les documents du même type sont regroupés. Je ne sais pas combien de types différents il y a. Alternativement, je pourrais d'abord essayer d'essayer de trouver toutes les instanciations d'un type de document particulier. J'imagine que la première approche est une approche de regroupement, tandis que la seconde est une approche de similarité. En ce qui concerne l'approche de clustering, mon idée est (1) de prétraiter les images pour améliorer les informations utiles, (2) extraire un vecteur de caractéristiques de chaque image, et (3) alimenter ces algorithmes en un algorithme de clustering. Je veux utiliser les bibliothèques SciKit-Image et SciKit-Learn pour ces trois tâches. J'ai fait un peu de recherche et de lecture pour me familiariser avec le sujet et les possibilités, mais je ne sais pas par où commencer et j'ai quelques questions de base.

  • Pré-traitement. Quelles sont les méthodes qui se sont avérées utiles? Il y a tellement d'options: binarisation, grayscaling, Redressement, débruitage, brouillant, recadrage, mise à l'échelle, ...
  • Extraction de caractéristiques. J'imagine qu'il est utile de saisir les caractéristiques les plus intéressantes d'une image (coins, lignes, grilles, images, logos) dans un vecteur de caractéristiques - en d'autres termes, si les caractéristiques sont basées sur des points d'intérêt. Encore une fois, existe-t-il des méthodes spécifiques qui se sont révélées utiles à cet égard? Quelle est la meilleure façon de représenter une image en tant que vecteur de caractéristiques, et comment puis-je extraire les caractéristiques intéressantes?
  • Clustering. Je vois que SciKit-Learn propose plusieurs algorithmes de clustering. Lesquelles seraient les plus appropriées pour ma tâche? Et lesquels sont les plus appropriés pour commencer - quelque chose comme k-means?

En ce qui concerne la tâche de similarité, je n'ai pas une idée claire de la façon d'aborder cela, ou si cela est possible. Toute aide est la bienvenue ...

Je me rends compte que c'est une question assez large. En général, j'aimerais savoir si mon approche a du sens et si elle peut donner des résultats utiles. De plus, j'apprécierais grandement les indications sur les exemples, les pipelines existants ou les bons conseils généraux!

Exemples:

Example form 1

Example form 2

Répondre

0

Je pense que votre tâche serait beaucoup plus facile si vous identifiez le nombre de types de documents à la main, puis vous essayez de trouver des correspondances en déterminant la similarité avec vos catégories identifiées.

Comme un indice de similarité, je poursuivrais une des deux stratégies:

1) Enregistrement de l'image sur la base des parties constantes des formes.

2) Appariement des phrases/mots-clés. A partir de votre exemple, "Antrag auf Krankenhausaufname" est facilement extrait de l'image via pytesseract, même sans pré-traitement de l'image:

from PIL import Image 
import pytesseract 

img = Image.open("test.jpg") 
text = pytesseract.image_to_string(img, lang="deu") 

print text 

Cela donne:

Zur Bendmmg für den Veru'dxerlenl ’ 

Die." Antragudm’n in! der Krln Iren In n: vor 
Au/wdum du Krankenhnu an zlnzuru'dlem 

Antrag auf Krankenhausaufnahme 

._ ‚x, - > 

A Namp des Mitgligds: 
V'orname: - ' 

Ehefrau: „_ 
Kind : 

Arbeitgeber : 
Behandelt seit arbeitsgnfähig seit 

Gehikhlq? ja _ nein i s 
Belördemnq durch Kunkenkranwagen — Mxelklahwagen — Ist 
‘ -- nichl — eflordarllch. r- „ - 
Arbeilsunh‘” Folge eine: Irüheren Arbgttsunlalls’l Un‘allvemlchefle 
Berulxkvankheifl Verkghßq Spodunlall. Schlägerei. Trunksuchfl 
VevsorgungslaideI-J Fundemwirkung? Folge emer Irühercn. nichl 
behobene" Krankhen7 

.AZuInfimJn Inlmmidnn g 

Krankheitsbezeichnung ')x WM.-." 

/



Begründung: __.___. 

Il est clair que , vous pouvez faire correspondre le document en associant des phrases que vous savez être extraites du document de manière fiable par tesseract.

+0

Excellent! Cela vient le plus proche de la solution que je cherche. J'ai joué avec Tesseract mais je ne connaissais pas Pytesseract. – rdv

1

: Prétraitement Vous pouvez faire, en niveaux de gris, débruitage, supprimer la frontière et désalignement. Ça devrait être suffisant pour que mon plan fonctionne.

  1. Redimensionner l'image pour correspondre à un format A4 se produisant habituellement comme, mais prenez soin de conserver le rapport d'aspect de l'image.

  2. Vous TROUVEZ des points d'intérêt et les recadrer. De cette façon, vous ne considérez que les champs de formulaire, pas les entrées qui peuvent varier.

  3. Vous créez une empreinte pour chaque point d'intérêt d'un document.

  4. Vous construisez une empreinte digitale entière à partir de tous les individus.

  5. Il suffit de trier toutes les empreintes digitales, pas de clustering sophistiqué nécessaire.

  6. Dans la liste triée des empreintes digitales, découvrez en quelque sorte où un groupe de documents se termine et un autre commence et les sépare.

Et vous avez terminé!

Si vous optez pour le clustering, le processus sera beaucoup plus lent et le résultat sera le même. Eh bien, dépend de l'algo clustering, et quel type de vecteur de fonctionnalité allez-vous nourrir. Mais cela devrait être plus rapide et plus facile à programmer.

1

La mise en cluster de telles données sera très difficile. k-means est très sensible aux mauvais points de données, donc ne pense pas que cela fonctionnera bien. Mais cela dépendra beaucoup de la qualité de vos fonctionnalités.

Je ne pense pas que les fonctionnalités standard comme SIFT seront d'une grande utilité. Ils sont destinés à des photographies avec des dégradés et autres.

Vous devrez créer avec soin les fonctions, par ex. quantité de lignes horizontales par rapport au nombre de lignes verticales, de la teinte d'arrière-plan, etc. Ensuite, expérimentez avec des algorithmes de clustering robustes tels que DBSCAN et la classification hiérarchique. Ce dernier peut être un point de départ plus facile, mais plus difficile à mettre à l'échelle.