Il y a quelques temps j'ai eu besoin d'écrire un script qui détectait l'orientation d'un document scanné et le remettait automatiquement "dans le bon sens".
Simple à faire, un passage d'ocr sur le document initial puis un second sur le document retourné à 180°. Le résultat comportant le plus de mots existants de plus de 4 lettres (pour éviter les artefacts) gagne.
Du coup j'ai installé une bonne partie des ocr disponibles. Le meilleur (dans ces conditions précises) a été ocrad :
- très peu de dépendances sous debian (libc6 libgcc1 libstdc++6, qui sont très probablement déjà installées)
- très rapide (de l'ordre de la seconde pour une image de 3 millions de pixel en 300 dpi)
- résultats parfait pour l'usage.
Testé sur une vingtaine de milliers de document, il fonctionne impeccablement.
Voici le script pour ceux que ça intéresse :
#!/bin/bash
# this script determines whether an image must be flipped by comparing the results
# of OCR on the image and the flipped image
show_help()
{
echo "${0##*/} image1 [image2]..."
exit 1
}
topbm()
{
mimetype=$(file --brief --mime "1ドル" | cut -d';' -f1)
case "$mimetype" in
"image/x-ms-bmp")
bmptopnm --quiet "1ドル"
;;
"image/jpeg")
jpegtopnm --quiet "1ドル"
;;
"image/png")
pngtopnm --quiet "1ドル"
;;
* )
>&2 echo ${file}: Mime type "$mimetype" not supported
return 1
;;
esac
}
verbose=0
while getopts ":vh" opt
do
case $opt in
v)
verbose=$((verbose + 1))
;;
h)
show_help
exit 0
;;
\?)
>&2 echo "Invalid option: -$OPTARG"
show_help
exit 1
;;
esac
done
shift "$((OPTIND-1))"
pbmfile=$(mktemp)
for file in $*
do
topbm "$file" > "$pbmfile"
if [ $? -eq 0 ]
then
normal=$(ocrad -l "`{mathjax} pbmfile" | iconv -f iso8859-15 | hunspell -G | grep -v '[0-9]' | grep '[a-zA-Z]\`
flipped=$(ocrad --transform=rotate180 -l "`{mathjax} pbmfile" | iconv -f iso8859-15 | hunspell -G | grep -v '[`
if [ $flipped -gt $normal ]
then
if [ $verbose -gt 0 ]
then
echo "$file : flip needed ($normal / $flipped)"
fi
mogrify -flip -flop "$file"
fi
fi
done
if [ -e "$pbmfile" ]
then
rm "$pbmfile"
fi
[^] # Re: Tesseract-ocr
Posté par guppy . En réponse à la dépêche GNU/Linux a son OCR de qualité. Évalué à 7.
Il y a quelques temps j'ai eu besoin d'écrire un script qui détectait l'orientation d'un document scanné et le remettait automatiquement "dans le bon sens".
Simple à faire, un passage d'ocr sur le document initial puis un second sur le document retourné à 180°. Le résultat comportant le plus de mots existants de plus de 4 lettres (pour éviter les artefacts) gagne.
Du coup j'ai installé une bonne partie des ocr disponibles. Le meilleur (dans ces conditions précises) a été ocrad :
- très peu de dépendances sous debian (libc6 libgcc1 libstdc++6, qui sont très probablement déjà installées)
- très rapide (de l'ordre de la seconde pour une image de 3 millions de pixel en 300 dpi)
- résultats parfait pour l'usage.
Testé sur une vingtaine de milliers de document, il fonctionne impeccablement.
Voici le script pour ceux que ça intéresse :