Ce projet propose un système d'automatisation qui permet d'extraire un ensemble de contacts depuis une image. L'utilisateur n'a pas à se soucier des programmes utilisés, une chaîne d'automatisation est créée et nécessite simplement le dépôt de l'image source et d'un fichier de configuration.
- Extraction du texte brut, qui récupère simplement l'ensemble des caractères et des mots reconnus sur l'image;
- Extraction des informations, qui récupère les informations demandées par l'utilisateur;
- Conversion des données au format souhaité, indiqué par l'utilisateur.
Les codes sources sont fournis dans l'archive .tgz, dans laquelle cette documentation se situait. Vous y trouverez les fichiers suivants :
start, qui permet de démarrer la chaîne de conteneursstop, qui permet de l'arrêterenvoyer, qui envoie un fichier image et un fichier de configuration au début de la chaînerecevoir, qui récupère le rendu à la fin de la chaîne
Après extraction, la première chose à faire est d'ajouter les droits d'exécution à tous les scripts :
chmod +x start stop envoyer recevoirCes 4 scripts sont ceux avec lesquels un technicien ou un utilisateur doit interragir. Ils contiennent les commandes essentielles et complètes pour la gestion de la chaîne. D'autres fichiers sources, internes au fonctionnement, se situent dans le dossier src/ :
tesseract.sh, script de la première étape, qui extrait le texte brut de l'imageextraction.php, script de la deuxième partie, qui extrait les informations demandéesconversion.sh, script de la troisième partie, qui convertit au format souhaitémodele.php, modèle utilisé par la troisième partie pour générer un HTML
Le fichier texte de configuration doit absolument se nommer config.txt. L'utilisateur y rentre d'abord la liste des champs, puis le format souhaité.
Les champs permettent de préciser quels types d'information récupérer :
nomprenomemailtelephoneadresse
L'ordre entré par les utilisateurs reste le même sur le résultat, ainsi si prenom est entré avant nom, le résultat aura lui aussi d'abord le prénom puis le nom.
Pour les champs nom, prenom et adresse, il est nécessaire de renseigner des informations complémentaires. Par exemple, pour une capture d'écran de la forme :
{
"last_name" : "Deschamps"
"first_name" : "Didier"
"address" : "Paris",
"phone" : "07.08.09.10.11"
}
Un fichier de configuration ressemblera à ceci :
nom : "last_name"
prenom : "first_name"
telephone
adresse : "address"
Ces informations complémentaires permettent au programme de détecter les données souhaitées quand ces dernières n'ont pas de motif récurrent (comme c'est le cas d'un email ou d'un numéro de téléphone).
Si l'image fournie en entrée est sous forme de tableau alors l'utilisateur doit le spécifier au début du fichier, avec le nombre total de colonnes (y compris celles non-extraites). Dans ce cas particulier, chaque champ doit être accompagné du titre de sa colonne en informations complémentaires. Un fichier de configuration type ressemblerait à :
tableau
colonnes : 3
nom : "Name"
telephone : "Phone"
Le format de sortie est nécessaire au bon fonctionnement de la chaine. Le système propose les formats PDF, HTML et CSV. Le format de sortie doit être précisé comme suit :
format : "PDF"
Pour éviter d'obtenir des erreurs en sortie, vous pouvez suivre les règles suivantes :
- Mettre les informations entre guillemets
- Ne pas rajouter d'accents sur les noms des champs (le moteur OCR ne les reconnait pas toujours)
- Bien préciser le nom de chaque colonne pour le format tableau
Les 3 conteneurs suivants ont été créés à l'avance et sont utilisés. Certains apportent un programme en particulier (ex: Tesseract OCR), et tous sont fournis avec PHP 7.4 :
| Conteneur | Étape |
|---|---|
tesseract |
Extraction du texte brut |
php-cli74 |
Extraction des informations souhaitées |
weasyprint |
Conversion |
Le démarrage de la chaîne fonctionne comme suit :
- Un volume nommé
sae103est créé. Il contiendra les fichiers traités par les conteneurs - Un conteneur temporaire, nommé
sae103-tmp, est démarré et lié au volume. Il sert de port d'entrée vers le volume le temps de transférer les sources - Les fichiers du dossier
src/sont tranférés dans le volume par le conteneur temporaire - Les dossiers de résultats
etape1/,etape2/etetape3/sont créés dans le volume - Le conteneur temporaire est fermé et supprimé
- Les 3 conteneurs finaux sont lancés en mode détaché et liés au volume. On lance dans chaque conteneur le programme associé.
Chaque programme du dossier src/ attend qu'un fichier de configuration arrive dans le dossier qu'il regarde (selon l'étape).
Les commandes, dans l'ordre, à lancer pour l'utilisation de la chaîne sont les suivantes. Les fichiers doivent être au préalables marqués comme exécutables.
Démarrage de la chaîne :
./start
Envoi d'une image, puis du fichier de configuration. Le fichier de configuration doit être mis en dernier, car il est l'élément déclancheur de la chaîne :
./envoyer dossier/image.png
./envoyer dossier/config.txt
Enfin, la récupération des éléments produits par la chaîne, dans le dossier out_dir :
./recuperer
Répétez autant de fois que nécessaire l'envoi et la récupération des fichiers produits. Pour finalement arrêter la chaîne, exécutez :
./stop
La documentation est fournie avec 2 cas de tests pour comprendre l'utilisation et le fonctionnement de la chaîne.
Le premier test s'effectue avec un tableau, se trouvant de le dossier test/tableau/. Il possède un fichier config.txt, ainsi qu'une image tableau.png
Lorsque l'utilisateur souhaite lancer le test, il lui suffit d'entrer les commandes suivantes (une fois la chaîne lancée) :
./envoyer test/tableau/tableau.png
./envoyer test/tableau/config.txt
Puis pour récupérer les fichiers produits :
./recuperer
Le second cas s'effectue avec une capture d'un fichier JSON. Il se trouve dans le dossier test/json/. De même que pour le premier test, il possède une image sample.png et un fichier config.txt.
Pour lancer le test, il faut lancer les commandes suivantes (une fois la chaîne lancée) :
./envoyer test/json/sample.png
./envoyer test/json/config.txt
Puis pour récupérer les fichiers produits :
./recuperer