Untitled
unknown
plain_text
a year ago
4.1 kB
3
Indexable
import random
import time
import json
import cv2
import pytesseract
import csv
from huskylib import HuskyLensLibrary
from pubnub.pubnub import PubNub
from pubnub.pnconfiguration import PNConfiguration
# PubNub configuration
pnconf = PNConfiguration()
pnconf.publish_key = 'pub-c-e47b3d62-b04d-412f-834c-39092e90ec84' # Set your PubNub publish_key
pnconf.subscribe_key = 'sub-c-28c258f2-2025-4241-9df4-c7f10715cac3' # Set your PubNub subscribe_key
pnconf.user_id = 'shukla728'
pubnub = PubNub(pnconf)
channel = 'lab1'
# HuskyLens configuration
hl = HuskyLensLibrary("I2C", "", address=0x32)
# Tesseract configuration
pytesseract.pytesseract.tesseract_cmd = "/usr/bin/tesseract"
# CSV file containing authorized license plates
CSV_FILE = "authorized_plates.csv"
# Function to read authorized license plates from a CSV file
def is_plate_authorized(plate_text):
with open(CSV_FILE, mode="r") as file:
reader = csv.DictReader(file)
for row in reader:
if row["LicensePlate"] == plate_text:
return True
return False
# Function to capture an image
def capture_image():
print("Capturing image...")
camera = cv2.VideoCapture(0)
if not camera.isOpened():
print("Error: Camera not detected!")
return None
ret, frame = camera.read()
if ret:
image_path = "captured_image.jpg"
cv2.imwrite(image_path, frame)
print(f"Image saved at {image_path}")
camera.release()
return image_path
else:
print("Error: Unable to capture image!")
camera.release()
return None
# Function to process image and detect the license plate
def recognize_license_plate(image_path):
print("Processing image for license plate detection...")
image = cv2.imread(image_path)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray, 100, 200)
contours, _ = cv2.findContours(edges, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
for contour in contours:
approx = cv2.approxPolyDP(contour, 0.018 * cv2.arcLength(contour, True), True)
if len(approx) == 4: # Possible license plate
x, y, w, h = cv2.boundingRect(contour)
cropped = gray[y:y+h, x:x+w]
text = pytesseract.image_to_string(cropped, config="--psm 8").strip()
print(f"Detected License Plate: {text}")
return text
print("No license plate detected.")
return None
# Publish detection result to PubNub
def publish_result(data):
exp = {"data": data}
pubnub.publish().channel(channel).message(exp).sync()
print(f"Published to channel {channel}: {exp}")
# Main execution
if __name__ == "__main__":
while True:
try:
print("\nWaiting for command...")
cmd = input("Enter 'capture' to detect plate, 'quit' to exit: ").strip().lower()
if cmd == "quit":
print("Exiting...")
break
elif cmd == "capture":
# Capture image
image_path = capture_image()
if image_path:
# Recognize license plate
plate_text = recognize_license_plate(image_path)
if plate_text:
# Check if the plate is authorized
if is_plate_authorized(plate_text):
print(f"Access Granted: {plate_text} is authorized.")
publish_result(f"Access Granted for {plate_text}.")
else:
print(f"Access Denied: {plate_text} is not authorized.")
publish_result(f"Access Denied for {plate_text}.")
else:
print("Unknown command. Please try again.")
except KeyboardInterrupt:
print("\nExiting...")
break
except Exception as e:
print(f"An error occurred: {e}")
Editor is loading...
Leave a Comment