import io, os
from google.cloud import vision
from PIL import Image
def crop_image(image, text_area):
"""Crops an image to a specified area."""
return image.crop(text_area)
def detect_text(image_file, credentials_file, text_area):
"""Detects text in an image."""
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = credentials_file # Authenticates the client
# Open the image file
try:
with open(image_file, 'rb') as f:
image_data = f.read()
except FileNotFoundError:
print(f"Error: File not found: {image_file}")
return None
# Crop the image
image = Image.open(io.BytesIO(image_data))
cropped_image = crop_image(image, text_area)
# Send the cropped image to the Google Cloud Vision API for text detection
client = vision.ImageAnnotatorClient()
content = io.BytesIO()
cropped_image.save(content, format='JPEG')
image = vision.Image(content=content.getvalue())
response = client.text_detection(image=image)
texts = response.text_annotations
# Handle errors
if response.error.message:
raise Exception(response.error.message)
# Return the first detected text as a float
try:
print(float(texts[0].description)) # Print the detected text
return float(texts[0].description)
except IndexError:
print("No text detected in the image.")
return None
detect_text('meter_digits.jpg', 'GoogleVisionKeys.json', (270, 195, 720, 280))