import cv2 import easyocr import numpy as np from PIL import Image from collections import Counter # Initialize the EasyOCR reader reader = easyocr.Reader(['en']) def preprocess_image(image): # Convert to PIL image for EasyOCR processing return Image.fromarray(cv2.cvtColor(image, cv2.COLOR_BGR2RGB)) def recognize_text(image): processed_image = preprocess_image(image) results = reader.readtext(np.array(processed_image), allowlist='0123456789') # Concatenate all recognized text results recognized_text = ''.join(result[1] for result in results) return recognized_text def format_number(text, length=6): # Remove non-numeric characters and pad with zeros if necessary formatted = ''.join(filter(str.isdigit, text)) return formatted.zfill(length)[-length:] def most_common_number(numbers): # Find the most common number from the list of numbers counter = Counter(numbers) most_common = counter.most_common(1) return most_common[0][0] if most_common else '' def main(): cap = cv2.VideoCapture(2) if not cap.isOpened(): print("Error: Could not open webcam.") return print("Press 'q' to quit.") frame_count = 0 text_history = [] while True: ret, frame = cap.read() if not ret: print("Error: Failed to capture image.") break # Recognize text from the current frame recognized_text = recognize_text(frame) formatted_number = format_number(recognized_text) # Update the history with the latest recognized number text_history.append(formatted_number) # Keep only the last 10 frames if len(text_history) > 20: text_history.pop(0) # Determine the most common number from the history most_common = most_common_number(text_history) print(f"Most common number from last 10 frames: {most_common}") # if cv2.waitKey(1) & 0xFF == ord('q'): # break cap.release() if __name__ == "__main__": main()