1) Pré-requis : 2) Installation du plugin
Transcription
1) Pré-requis : 2) Installation du plugin
HOWTO La reconnaissance de caractères avec le greffon FuzzyOCR Pierre-Yves Dubreucq 12:40:44 - 17/10/07 Cet Howto n'est valable que pour la branche de FuzzyOCR en 3.5.x FuzzyOcr peut être trouver sur sa page de téléchargement : http://fuzzyocr.own-hero.net/wiki/Downloads 1) Pré-requis : SpamAssassin 3.1.4 ou plus NetPBM Tools , avec en préférence la 10.xx ou plus GifSicle GifLib/Libungif ➢ Il faut appliquer un patch disponible à cette adresse : http://fuzzyocr.ownhero.net/wiki/Downloads Il faut utiliser au moins un moteur OCR (plusieurs moteur de recherche sont disponible) par exemple : ➢ Ocrad OCR Engine (au moins la 0.14!) ➢ Dans beaucoup de situations OCRAD est le plus performant, dans d'autres cas c'est gocr, mais ocrad est considéré comme le meilleur choix. ➢ Gocr, de préférence la version 0.43 ➢ Lorsque vous compilez, assurez-vous du support NetPBM, sinon le résultats risque d'être mauvais. ➢ Il faut lire ce document OS specific notes lorsque vous l'installez à partir de paquets binaires Les Modules Perl : ➢ String::Approx ➢ Time::HiRes ➢ Optionnel : MLDBM si vous souhaitez utiliser le système de Hash database (recommandé) ➢ Egalement exigé : MLDBM::Sync pour le vérouillage ➢ Notez que vous pouvez aussi avoir besoin Log::Agent pour que ce module fonctionne, la plupart des gens le mette en place. ➢ Optionnel: [DBI http://dbi.perl.org] et DBD::mysql si vous souhaitez utiliser MySQL pour la Hash Database. Notez que cette fonctionnalité est encore au stade expérimentale. 2) Installation du plugin : Installation des fichiers nécessaires : ➢ Déposez les fichiers FuzzyOcr.cf, FuzzyOcr.scansets, FuzzyOcr.preps et le fichier 1/7 HOWTO La reconnaissance de caractères avec le greffon FuzzyOCR Pierre-Yves Dubreucq 12:40:44 - 17/10/07 FuzzyOcr.pm, ainsi que le repertoire FuzzyOcr/ à l'interieur /etc/mail/spamassassin. ➢ ➢ Le fichier FuzzyOcr.cf contient déjà une ligne de chargement du plugin, si vous souhaitez mettre le fichier .pm à un endroit différent il faudra le spécifier dans ce fichier. Créer un fichier de mots clefs, un exemple de ce fichier est disponible dans l'archive téléchager, il faut le déposer dans /etc/mail/spamassassin. Configuration : • Ouvrir le fichier FuzzyOcr.cf. Assurez-vous que l'utilisateur lançant amavis dispose des droits d'écriture pour le fichier de log, si vous souhaitez mettre en place le logging. Le niveau de log peut-être spécifié dans l'option focr_verbose. • Assurez-vous de spécifier le bon fichier de mots clefs, ceci est visible dans focr_global_wordlist • Si vos programmes externes ne sont pas situés aux emplacement par défaut, modifiez le fichier de configuration en conséquence. Avec ces changement, FuzzyOCR est prêt à fonctionner. Mais n'hésitez pas à lire la signification des autres variables de configuration. Mise en place des logrotates : # vi /etc/logrotate.d/fuzzyocr /<path>/FuzzyOcr.log { rotate 5 weekly compress delaycompress create 666 amavis amavis } 3) Activation de la base de données d'images de hachage (optionnel, mais recommandé): La base de données d'images de hachage permet de stocker un vecteur des caractéristiques de l'image dans la base de donnée, donc il « reconnait » l'image lors d'un second passage. Le plus de cette fonction est qu'elle reconnaît également l'image si elle a été légèrement modifiée. 2/7 HOWTO La reconnaissance de caractères avec le greffon FuzzyOCR Pierre-Yves Dubreucq 12:40:44 - 17/10/07 Si vous souhaitez utiliser cette fonction, il faut suivre ces étapes : ➢ Dans la version 3.5.x vous pouvez utiliser 3 modes de fonctionnements, il faudra modifier l'option focr_enable_image_hashing et voici les options possibles : ➢ 1 utilise digest_hash seulement (deprecié) ➢ 2 utilise digest_db w/digest_hash import (voir les pré-requis, recommendé) ➢ 3 utilise mysql database (voir les pré-requis, experimentale) L'option 2 qui est l'option recommandée utilise un fichier de base de données MLDBM et stocke beaucoup plus d'informations. Méthode recommandée : • Mettez en place les options suivante dans le fichier de configuration : focr_enable_image_hashing 2 focr_db_hash <full_path_to_file> focr_db_safe <full_path_to_file> focr_db_max_days <number_of_days> • • • • • • • Assurez-vous que l'utilisateur lançant amavis puisse modifier les fichiers spécifiés Par défaut, toutes les images reconnues comme spams, sont ajoutées à cette base de données automatiquement. Le score est sauvegardé et réutilisé par la suite. Les images non reconnues en tant que spams sont ajouté à la base de données en tant que HAM. Vous pouvez utiliser l'utilitaire fuzz-find.pl que l'on retrouve dans le repertoire de FuzzyOCR après l'avoir décompressé, dans le répertoire Utils. Vous pouvez afficher des informations ou retirer des images de la base de données en spécifiant le hashage directement ou en passant l'image via l'utilitaire. Vous pouvez utiliser l'utilitaire Utils/fuzzy-stats.pl pour afficher les statistiques journalier de la base de données. Après <number_of_days>, les hash expirent et sont supprimés. Il est fortement recommandé de mettre une valeur à cette option pour prévenir un grossissement illimité. 4) Tester le fonctionnement du plugin : Aller dans le sous-repertoire d'exemples et utiliser spamassassin avec un fichier .eml, vous pouvez utiliser par exemple animated-gif.eml : spamassassin --debug FuzzyOcr < animated-gif.eml > /dev/null 3/7 HOWTO La reconnaissance de caractères avec le greffon FuzzyOCR Pierre-Yves Dubreucq 12:40:44 - 17/10/07 Si vous utilisez amavisd-new, essayer celle-ci à la place : su -c "spamassassin --debug FuzzyOcr < animated-gif.eml > /dev/null" amavis 5) Peaufiner les scansets : (avancé et optionnel) Tous le monde reçoit des images de spams différentes, et la plupart du temps, une méthode de scan ne fonctionne pas avec tous les types de spams que vous recevez. C'est pourquoi les scansets peuvent vous aidez. Le fichier FuzzyOcr.scansets contient tous les scansets, et le fichier FuzzyOcr.preps contient tous les pré-processeurs. Les deux fichiers (comme la liste de mots clefs) accepte les commentaires avec le caractère #, comme une simple ligne ou à derrière une ligne. Preprocesseurs : Un préprocesseur est une unité qui reçoit les entrées et fournit un flux de sorite. Beaucoup de préprocesseurs peuvent être chainé dans un scansets pour modifier les données que le programme OCR reçevra. Un exemple : # requires ImageMagic convert preprocessor maketiff { command = convert args = $input tiff:$output } Cet exemple est composé d'un label (maketiff doit être unique), une commande et d'arguments. La ligne « commande » est requise, elle contient la commande exacte qui sera executé (sans aucun arguments). Cela peut être un nom de fichier binaire (avec ou sans chemin), ou une macro, comme $program, où "program" est enregistré en tant que helper application (voir FuzzyOcr.cf). The "command" line is required, it contains the command itself which is to be executed (without ANY arguments). It can either be a binary name (with or without path), or a macro, like $program, where "program" is a registered helper application (see FuzzyOcr.cf). Les macros sont automatiquement remplacées avec le bon chemin et le bon nom binaire. La ligne args est optionnelle, elle est composé d'option pour la commande, 4/7 HOWTO La reconnaissance de caractères avec le greffon FuzzyOCR Pierre-Yves Dubreucq 12:40:44 - 17/10/07 The args line is optional, it contains the arguments to the command, et est annexé. Il y a 2 macros spéciales acceptées ici, $input and $output. $input est remplacé par le fichier en entrée du préprocesseur, $output est respectivement le fichier de sortie. Vous ne pouvez pas modifier ces noms de fichiers, vous pouvez seulement spécifier où il se situe dans la commande complète, les noms de fichiers doivent rester identiques. Omettre $input dans args implique le flux d'entrée STDIN, omettre $output implique le flux de sortie STDOUT. Vous n'avez pas à vous inquieter de la compatibilité entre les préprocesseurs lorsqu'ils sont liés, FuzzyOcr fait tout le travail. Si un préprocesseur accepte seulement les données STDIN, Le préprocesseur dans cet exemple reçoit un flux en entrée et converti les données en tiff avec ImageMagick. Le premier préprocesseur reàoit un fichier .pnm en entrée $input. Le second preprocesseur recevra la sortie du premier et ainsi de suite... Scansets : Un scanset possède une syntaxe et un comportement similaire à un préprocesseur. Voici un exemple : scanset gocr-invert { preprocessors = normalize, invert, normalize command = $gocr args = -i $input } La ligne qui contient « command » et « args » a le même comportement que le scansets a. Une nouvelle ligne ici est la ligne des préprocesseurs. C'est optionnel et les différents labels des préprocesseurs sont délimités par des virgules. Tous les preprocesseurs dans la liste sont liés, le premier reçoit un fichier .pnm (ou des données pnm si STDIN) et la sortie du dernier préprocesseur est le flux d'entrée pour le commande OCR (spécifié par command et args) En supposant que "normalize" and "invert" sont des préprocesseurs dans notre exemple, are preprocessors here in our example, le scanset normalisera une première fois les données PNM, puis inversera l'image, puis normalisera encore les données PNM et utilisera gocr sur celle-ci. Gocr produits un flux de sortie STDOUT ici, mais si le programme le prend en charge, elle pourrait également sortir vers un fichier en utilisant $output. ATTENTION : NE PAS UTILISER LES REDIRECTIONS SHELL OU LES PIPES DANS COMMAND OU ARGS FuzzyOcr refusera les redirections shell ou les pipes dans command/args car c'est dangereux avec l'utilisation de la commande exec(). Exec() souhaiterai émuler la commande en utilisant un shell, lancerait de nombreux process que l'on ne pourrait pas 5/7 HOWTO La reconnaissance de caractères avec le greffon FuzzyOCR Pierre-Yves Dubreucq 12:40:44 - 17/10/07 killer plus tard. Si vous avez besoin de faire un pipe ou une redirection, le système de préprocesseur/scanset permet de faire tout ce qui serait également possible avec un pipe ou une redirection. Il ya une autre option disponible dans scansets, appelé "force_output_in ». Cette option peut-être utilisée pour forcer FuzzyOcr à lire le contenu de ce fichier de sortie plutôt que FuzzyOcr a utiliser $output. ($output lui-même peut également être utilisé dans la présente clause et être correctement substituée) Voici un exemple avec TesserAct pour clairfier ce point : scanset tesseract { preprocessors = maketiff command = $tesseract args = $input $output batch force_output_in = $output.txt } TesserAct reçoit un fichier $input (qui doit être au format TIFF, d'où le préprocesseur maketiff), et il prends l'argument $output. Mais cela créé 3 fichiers qui sont : • • • $output.map $output.raw $output.txt ($output est ici le nom de fichier que FuzzyOcr a créé a cette fin). Désormais FuzzyOcr devrait normalement essayer de lire la sortie $output, mais la sortie réelle d'OCR est dans ouput.txt. C'est pourquoi nous forceons FuzzyOcr à utiliser $output.txt à la place. 6) Conclusion : Vous êtes désormais libre de selectionner quel scanset traque le plus de spam, mais n'en prenez pas trop, car ça pourrait utiliser beaucoup de ressources. Cette version de FuzzyOcr fournit de nombreux exemples de scansets populaires pour les paramètres de gocr et ocrad, comme por le scanset tesseract. (Non recommandé d'ailleurs) Voici quelques conseil : • Si vos ressources vous le permettent, utilisez ocrad et gocr en même temps, ce qui vous permettra de filtrer plus de spam 6/7 HOWTO La reconnaissance de caractères avec le greffon FuzzyOCR • • • • • Pierre-Yves Dubreucq 12:40:44 - 17/10/07 Si vous obtenez des images qui sont truffées de petits points par lignes , essayez -d 2 en tant qu'argument. Le paramètre -l paramètre l'aide pour gocr, essayez des valeurs comme 180, 140 ou 100. Ocrad fonctionne le plus souvent mieux avec les paramètres -s5 et -T 0.4 Les images sombres avec du texte brillant peuvent être scanné avec Ocrad et le paramètre -i (Inverse l'image) pnminvert ou pnmquant sont utiles avec du texte en blanc ou du texte avec beaucoup de couleurs. Si les scansets échoue et que le debug est actif pour le logging, vous pourrez voir la sortie stderr dans le fichier de log. J'ai essayé de faire plus ou moins une traduction de l'article présent sur le wiki de FuzzyOcr, en l'adaptant à mes besoins disponible à cette adresse : http://fuzzyocr.own-hero.net/wiki/Installation-3.5.x Dernier petit conseil, ne pas oublier de recharger spamassassin après modification de FuzzyOcr.cf, puis de faire un redémarrage de amavis pour que les modifications soient bien prises en compte. 7/7