|
| 1 | +# Documentation |
| 2 | + |
| 3 | +## Présentation |
| 4 | + |
| 5 | +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. |
| 6 | + |
| 7 | +### Etapes |
| 8 | + - **Extraction du texte brut**, qui récupère simplement l'ensemble des caractères et des mots reconnus sur l'image; |
| 9 | + - **Extraction des informations**, qui récupère les informations demandées par l'utilisateur; |
| 10 | + - **Conversion** des données au format souhaité, indiqué par l'utilisateur. |
| 11 | + |
| 12 | +### Sources |
| 13 | + |
| 14 | +Les codes sources sont fournis dans l'archive `.tgz`, dans laquelle cette documentation se situait. Vous y trouverez les fichiers suivants : |
| 15 | +- `start`, qui permet de démarrer la chaîne de conteneurs |
| 16 | +- `stop`, qui permet de l'arrêter |
| 17 | +- `envoyer`, qui envoie un fichier image et un fichier de configuration au début de la chaîne |
| 18 | +- `recevoir`, qui récupère le rendu à la fin de la chaîne |
| 19 | + |
| 20 | +Après extraction, **la première chose à faire est d'ajouter les droits d'exécution** à tous les scripts : |
| 21 | +```bash |
| 22 | +chmod +x start stop envoyer recevoir |
| 23 | +``` |
| 24 | + |
| 25 | +Ces 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/` : |
| 26 | +- `tesseract.sh`, script de la première étape, qui extrait le texte brut de l'image |
| 27 | +- `extraction.php`, script de la deuxième partie, qui extrait les informations demandées |
| 28 | +- `conversion.sh`, script de la troisième partie, qui convertit au format souhaité |
| 29 | +- `modele.php`, modèle utilisé par la troisième partie pour générer un HTML |
| 30 | + |
| 31 | + |
| 32 | +## Fichier de configuration |
| 33 | + |
| 34 | +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é. |
| 35 | + |
| 36 | +### Champs |
| 37 | +Les champs permettent de préciser quels types d'information récupérer : |
| 38 | + |
| 39 | +- `nom` |
| 40 | +- `prenom` |
| 41 | +- `email` |
| 42 | +- `telephone` |
| 43 | +- `adresse` |
| 44 | + |
| 45 | +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. |
| 46 | + |
| 47 | +### Les informations complémentaires |
| 48 | + |
| 49 | +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 : |
| 50 | +``` |
| 51 | +{ |
| 52 | + "last_name" : "Deschamps" |
| 53 | + "first_name" : "Didier" |
| 54 | + "address" : "Paris", |
| 55 | + "phone" : "07.08.09.10.11" |
| 56 | +} |
| 57 | +``` |
| 58 | + |
| 59 | +Un fichier de configuration ressemblera à ceci : |
| 60 | + |
| 61 | +``` |
| 62 | +nom : "last_name" |
| 63 | +prenom : "first_name" |
| 64 | +telephone |
| 65 | +adresse : "address" |
| 66 | +``` |
| 67 | + |
| 68 | +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). |
| 69 | + |
| 70 | +### Cas du tableau |
| 71 | + |
| 72 | +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 à : |
| 73 | + |
| 74 | +``` |
| 75 | +tableau |
| 76 | +colonnes : 3 |
| 77 | +
|
| 78 | +nom : "Name" |
| 79 | +telephone : "Phone" |
| 80 | +``` |
| 81 | + |
| 82 | +### Format de sortie |
| 83 | + |
| 84 | +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 : |
| 85 | +``` |
| 86 | +format : "PDF" |
| 87 | +``` |
| 88 | + |
| 89 | +### Règles sur le fichier de configuration |
| 90 | + |
| 91 | +Pour éviter d'obtenir des erreurs en sortie, vous pouvez suivre les règles suivantes : |
| 92 | + 1. Mettre les informations entre guillemets |
| 93 | + 2. Ne pas rajouter d'accents sur les noms des champs (le moteur OCR ne les reconnait pas toujours) |
| 94 | + 3. Bien préciser le nom de chaque colonne pour le format tableau |
| 95 | + |
| 96 | +## Fonctionnement interne |
| 97 | +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 : |
| 98 | + |
| 99 | +| Conteneur | Étape | |
| 100 | +| - | - | |
| 101 | +| `tesseract` | Extraction du texte brut | |
| 102 | +| `php-cli74` | Extraction des informations souhaitées | |
| 103 | +| `weasyprint` | Conversion | |
| 104 | + |
| 105 | +Le démarrage de la chaîne fonctionne comme suit : |
| 106 | + 1. Un volume nommé `sae103` est créé. Il contiendra les fichiers traités par les conteneurs |
| 107 | + 2. 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 |
| 108 | + 3. Les fichiers du dossier `src/` sont tranférés dans le volume par le conteneur temporaire |
| 109 | + 4. Les dossiers de résultats `etape1/`, `etape2/` et `etape3/` sont créés dans le volume |
| 110 | + 5. Le conteneur temporaire est fermé et supprimé |
| 111 | + 6. Les 3 conteneurs finaux sont lancés en mode détaché et liés au volume. On lance dans chaque conteneur le programme associé. |
| 112 | + |
| 113 | +Chaque programme du dossier `src/` attend qu'un fichier de configuration arrive dans le dossier qu'il regarde (selon l'étape). |
| 114 | + |
| 115 | +## Exemple d'utilisation complète |
| 116 | + |
| 117 | +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. |
| 118 | + |
| 119 | +Démarrage de la chaîne : |
| 120 | +``` |
| 121 | +./start |
| 122 | +``` |
| 123 | + |
| 124 | +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 : |
| 125 | +``` |
| 126 | +./envoyer dossier/image.png |
| 127 | +./envoyer dossier/config.txt |
| 128 | +``` |
| 129 | + |
| 130 | +Enfin, la récupération des éléments produits par la chaîne, dans le dossier `out_dir` : |
| 131 | +``` |
| 132 | +./recuperer |
| 133 | +``` |
| 134 | + |
| 135 | +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 : |
| 136 | +``` |
| 137 | +./stop |
| 138 | +``` |
| 139 | + |
| 140 | +## Cas de test |
| 141 | + |
| 142 | +La documentation est fournie avec 2 cas de tests pour comprendre l'utilisation et le fonctionnement de la chaîne. |
| 143 | + |
| 144 | +### Cas n°1 |
| 145 | + |
| 146 | +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` |
| 147 | + |
| 148 | +Lorsque l'utilisateur souhaite lancer le test, il lui suffit d'entrer les commandes suivantes (une fois la chaîne lancée) : |
| 149 | + |
| 150 | +``` |
| 151 | +./envoyer test/tableau/tableau.png |
| 152 | +./envoyer test/tableau/config.txt |
| 153 | +``` |
| 154 | + |
| 155 | +Puis pour récupérer les fichiers produits : |
| 156 | + |
| 157 | +``` |
| 158 | +./recuperer |
| 159 | +``` |
| 160 | + |
| 161 | +### Cas n°2 |
| 162 | + |
| 163 | +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`. |
| 164 | + |
| 165 | +Pour lancer le test, il faut lancer les commandes suivantes (une fois la chaîne lancée) : |
| 166 | + |
| 167 | +``` |
| 168 | +./envoyer test/json/sample.png |
| 169 | +./envoyer test/json/config.txt |
| 170 | +``` |
| 171 | + |
| 172 | +Puis pour récupérer les fichiers produits : |
| 173 | + |
| 174 | +``` |
| 175 | +./recuperer |
| 176 | +``` |
0 commit comments