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

Documents pareils