web-dev-qa-db-fra.com

pytesseract utilisant uniquement des numéros tesseract 4.0 ne fonctionne pas

Quelqu'un a-t-il essayé d'obtenir des numéros en appelant uniquement la dernière version de tesseract 4.0 en python?

Le ci-dessous a fonctionné dans 3.05 mais renvoie toujours des caractères dans 4.0, j'ai essayé de supprimer tous les fichiers de configuration, mais le fichier de chiffres et ne fonctionnait toujours pas; Toute aide est la bienvenue:

im est une image d'une date, fond noir texte blanc:

import pytesseract
im =  imageOfDate
im = pytesseract.image_to_string(im, config='outputbase digits')
print(im)
11
CuriousGeorge

Vous pouvez spécifier les nombres dans le tessedit_char_whitelist comme ci-dessous comme config option.

ocr_result = pytesseract.image_to_string(image, lang='eng', boxes=False, \
           config='--psm 10 --oem 3 -c tessedit_char_whitelist=0123456789')

J'espère que cette aide.

10
thewaywewere

L'utilisation de drapeaux tessedit_char_whitelist avec pytesseract n'a pas fonctionné pour moi. Cependant, une solution consiste à utiliser un indicateur qui fonctionne, qui est config = 'digits':

import pytesseract
text = pytesseract.image_to_string(pixels, config='digits')

où pixels est un tableau numpy de votre image (l'image PIL devrait également fonctionner). Cela devrait forcer votre pytesseract à ne renvoyer que des chiffres. Maintenant, pour personnaliser ce qu'il retourne, trouvez votre fichier de configuration de chiffres, sur Windows le mien était situé ici:

C:\Program Files (x86)\Tesseract-OCR\tessdata\configs

Ouvrez le fichier de chiffres et ajoutez les caractères que vous souhaitez. Après avoir enregistré et exécuté pytesseract, il ne devrait renvoyer que les caractères personnalisés.

3
Robert Harris

Comme vous pouvez le voir dans ce problème GitHub , la liste noire et la liste blanche ne fonctionnent pas avec la version 4.0 de tesseract.

Il existe 3 solutions possibles à ce problème, comme je l'ai décrit dans cet article de blog :

  1. Mettre à jour tesseract vers la version> 4.1
  2. Utilisez le mode hérité comme décrit dans la réponse de @ thewaywewere
  3. Créez une fonction python qui utilise une expression régulière simple pour extraire tous les nombres:

    def replace_chars(text):
        list_of_numbers = re.findall(r'\d+', text)
        result_number = ''.join(list_of_numbers)
        return result_number
    
    result_number = pytesseract.image_to_string(im)
    
0
mhellmeier