Comment lire la couleur du texte de l'image en Python

2020-08-02 python ocr

Je construis un projet qui peut lire du texte à partir d'images. Je dois également déterminer dans quelle couleur ce texte est écrit. Les images sont générées par ordinateur et sont toujours constituées de nombres. J'utilise PyTesseract pour la détection OCR. Quelqu'un peut-il me suggérer comment puis-je le faire?

Exemple d'image

Disons par exemple que j'ai besoin d'informations dans mon code python comme 429.05 Green

Mon code est comme ci-dessous

import pytesseract
import cv2

pytesseract.pytesseract.tesseract_cmd = "C:\\Program Files\\Tesseract-OCR\\tesseract.exe"
img = cv2.imread("D:\\test2.png")
text = pytesseract.image_to_string(img)

print(text)

Answers

Pour lire n'importe quelle image, nous utilisons la méthode cv2.imread () et spécifions le chemin complet de l'image qui est importée dans le notebook sous forme de tableau Numpy. Nous pouvons ensuite le tracer en utilisant la méthode imshow () du pyplot .

Je vais vous suggérer de vous référer à ce site, cela pourrait vous aider. Lien

Cela pourrait être fait avec la bibliothèque Pillow.

getcolors abord les bibliothèques requises et utilisez la méthode getcolors pour obtenir la palette de couleurs, en la triant par nombre de pixels croissant.

from PIL import Image
i = Image.open("D:\\test2.png")

colors = sorted(i.getcolors())

Pour les colors votre image colors y a maintenant une liste de tuples, où le premier élément de chaque tuple est le nombre de pixels contenant ladite couleur, et le deuxième élément est un autre tuple indiquant le code de couleur RVB.

Le dernier élément de la liste est celui avec le plus de pixels (blanc):

>>> colors[-1]
(2547, (255, 255, 255))

L'avant dernier est probablement la couleur que vous voulez:

>>> colors[-2]
(175, (76, 175, 80))

Cela peut ensuite être converti en un code hexadécimal :

>>> '#%02x%02x%02x' % colors[-2][1]
'#4caf50'

Et confirmez rapidement avec un sélecteur hexadécimal basé sur le Web:

couleur calculée

Cela semble correct pour votre image de test, mais vous devrez peut-être modifier légèrement si les images sur lesquelles vous travaillez varient.

Merci à tous pour votre soutien. J'ai recadré l'image contenant la première lettre puis appliqué les étapes suggérées par @ v25. Ci-dessous est le code.

import pytesseract
from PIL import Image


pytesseract.pytesseract.tesseract_cmd = "C:\\Program Files\\Tesseract-OCR\\tesseract.exe"
img = Image.open("D:\\test1.png")

text = pytesseract.image_to_boxes(img).split(" ")
(left, upper, right, lower) = (int(text[1]),int(text[2])-8,int(text[3]),int(text[4])+8)
im_crop = img.crop((left, upper, right, lower))
colors = sorted(im_crop.getcolors())
hex = ('#%02x%02x%02x' % colors[-2][1])
color = None
if (hex == '#91949a'):
    color = "Black"
elif ( hex == '#4caf50'):
    color = "Green"
elif ( hex == '#ff9d9d'):
color= "Red"
number = pytesseract.image_to_string(img)
print("Number is: "+number+" Color is: "+color)

Related