J'ai une image et je souhaite extraire de l'image les détails de la paire clé / valeur.
À titre d'exemple, je souhaite extraire la valeur de "MASTER-AIRWAYBILL NO:"
J'ai écrit pour extraire le texte entier de l'image en utilisant python opencv et OCR, mais je n'ai aucune idée de comment extraire uniquement la valeur de "MASTER -AIRWAYBILL NO: "à partir du texte de résultat entier de l'image.
Veuillez trouver le code:
import cv2 import numpy as np import pytesseract from PIL import Image print ("Hello") src_path = "C:\\Users\Venkatraman.R\Desktop\\alpha_bill.jpg" pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files (x86)\Tesseract-OCR\tesseract.exe" print (src_path) # Read image with opencv img = cv2.imread(src_path) # Convert to gray img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # Apply dilation and erosion to remove some noise kernel = np.ones((1, 1), np.uint8) img = cv2.dilate(img, kernel, iterations=1) img = cv2.erode(img, kernel, iterations=1) # Write image after removed noise cv2.imwrite(src_path + "removed_noise.png", img) # Apply threshold to get image with only black and white #img = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 31, 2) # Write the image after apply opencv to do some ... cv2.imwrite(src_path + "thres.png", img) # Recognize text with tesseract for python result = pytesseract.image_to_string(Image.open(src_path + "thres.png")) # Remove template file #os.remove(temp) print ('--- Start recognize text from image ---') print (result)
La sortie devrait donc ressembler à: p >
PROJET DE LOI MAÎTRE-AIRWAY NO: 157-46637194
3 Réponses :
Vous pouvez utiliser pytesseract
image_to_string () et un regex pour extraire le texte souhaité, c'est-à-dire:
MASTER-AIRWAYBILL NO: 157â46637194
Sortie:
from PIL import Image import pytesseract, re f = "ocr.jpg" t = pytesseract.image_to_string(Image.open(f)) m = re.findall(r"MASTER-AIRWAYBILL NO: [\dâ-]+", t) if m: print(m[0])
La sortie s'imprime vide
Comme d'habitude, j'ai testé le code de la réponse (python 3.6) et cela fonctionne comme prévu. Le fichier image que j'ai utilisé est le même que dans votre question: i.stack.imgur.com /RKebi.jpg . Voulez-vous commenter le vote défavorable?
Même si j'utilise le même, j'ai vérifié en imprimant le t il est en train d'imprimer mais il n'imprime pas la valeur de m
J'ai utilisé la dernière version de pytesseract
pour py3.6
. Si vous ne l'utilisez pas, veuillez le mettre à jour. Je ne vois aucune autre raison pour laquelle vos résultats sont différents des miens.
J'utilise la version 3.7.1 de python
Et si je veux la valeur pour le destinataire à partir de l'image?
J'utilise python 2.7 et je veux aussi trouver le nom du fournisseur à partir de l'image comment trouver?
m = re.findall (r "MASTER-AIRWAYBILL NO: [\ d —-] +", t) pour la ligne ci-dessus son erreur d'affichage
et si j'utilise m = re.findall (r'Vendor Name: [\ d -] + ', t) alors aussi son erreur d'affichage
Bienvenue dans SO, si vous rencontrez un problème, postez une nouvelle question, cela ne répond pas à OP. Une fois que vous avez suffisamment de réputation, vous pouvez ajouter un commentaire à OP.
Vous pouvez essayer ceci après avoir installé tesseract.
from PIL import Image import pytesseract, re pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe" t = pytesseract.image_to_string(Image.open("path")) m = re.findall(r"Invoice No. [\dâ-]+", t) if m: print(m[0])