import io, os from google.cloud import vision from PIL import Image, ImageEnhance def detect_text(image_file, credentials_file, text_area): """Detects text in an image.""" os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = credentials_file # Authenticates the client try: with Image.open(image_file, 'r') as img: # Crop the image img_cropped = img.crop(text_area) img_rgb = img_cropped.convert('RGB') # Convert the image to grayscale mode img_gray = img_rgb.convert("L") # Apply thresholding to convert gray pixels to white img_bw = img_gray.convert('L') # Reduce the brightness of the image enhancer = ImageEnhance.Brightness(img_bw) img_low_brightness = enhancer.enhance(1.5) # Enhance the contrast of the image enhancer = ImageEnhance.Contrast(img_low_brightness) img_contrast = enhancer.enhance(3) # Rotate the image img_rotated = img_contrast.rotate(0, expand=True) # Save the modified image img_rotated.save("contrast_image.png") except FileNotFoundError: print(f"Error: File not found: {image_file}") return None # Send the cropped image to the Google Cloud Vision API for text detection client = vision.ImageAnnotatorClient() content = io.BytesIO() img_contrast.save(content, format='PNG') 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)) # Prints the detected text (optional) return float(texts[0].description) except IndexError: print("No text detected in the image.") return None detect_text(image_file='meter.jpg', credentials_file='GoogleVisionKeys.json', text_area=(340, 135, 580, 200)) # text_area = (left, top, right, bottom)