Search code examples
pythonpython-3.xgoogle-cloud-platformgoogle-cloud-vision

Extract Text from an image using Google Cloud Vision API using cv2 in python


We are trying to extract the text from an image using google-cloud-vision API:

import io
import os
from google.oauth2 import service_account
from google.cloud import vision

# The name of the image file to annotate (Change the line below 'image_path.jpg' ******)
path = os.path.join(os.path.dirname(__file__), '3.jpg') # Your image path from current directory 


client = vision.ImageAnnotatorClient()

with io.open(path, 'rb') as image_file:
    content = image_file.read()

image = vision.types.Image(content=content)

response = client.text_detection(image=image)
texts = response.text_annotations
print('Texts:')

for text in texts:
    print(format(text.description))

In this code, we need to make the API read the image through the 'cv2' function only, instead of using the 'io' function:

# Read image file
    with io.open(img_path, 'rb') as image_file:
        content = image_file.read()

Any suggestion will be helpful


Solution

  • All you need is to convert numpy array that is created from cv2 to bytes which is used by Google Vision API. Here is how you do it:

    import cv2 
    with open(path, 'rb') as image_file:
        content1 = image_file.read()
    image = cv2.imread(path)
    success, encoded_image = cv2.imencode('.jpg', image)
    content2 = encoded_image.tobytes()
    image_cv2 = vision.types.Image(content=content2)
    response =  client.text_detection(image=image_cv2)
    texts = response.text_annotations