import cv2 import imghdr import pytesseract def extract_number_plate(image_path): # Load the image image = cv2.imread(image_path) # Check if the image is valid if image is None: print("Invalid image file!") return # Convert the image to grayscale gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # Apply Gaussian blur to reduce noise blurred = cv2.GaussianBlur(gray, (7, 7), 0) # Perform edge detection using Canny algorithm edges = cv2.Canny(blurred, 30, 150) # Find contours in the edge-detected image contours, _ = cv2.findContours(edges.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # Filter contours based on area to select potential number plates number_plate_contours = [] for contour in contours: x, y, w, h = cv2.boundingRect(contour) area = cv2.contourArea(contour) if area > 1000 and w > h: number_plate_contours.append(contour) # Draw bounding rectangles around the number plates for contour in number_plate_contours: x, y, w, h = cv2.boundingRect(contour) cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2) # Extract the region of interest (number plate) plate = gray[y:y+h, x:x+w] # Apply OCR to the number plate region plate_text = pytesseract.image_to_string(plate, config='--psm 7') # Print the extracted text print("Number Plate Text:", plate_text) # Display the image with bounding rectangles cv2.imshow("Number Plates", image) cv2.waitKey(0) cv2.destroyAllWindows() # Path to the input image image_path = "cars/car2.jpg" # Check if the file is an image if imghdr.what(image_path) is not None: # Extract the number plates and print the text extract_number_plate(image_path) else: print("Invalid image file format!")