File size: 3,365 Bytes
8f94351
416d33c
8f94351
416d33c
 
 
cd1ebf9
416d33c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
cd1ebf9
 
 
 
 
416d33c
 
cd1ebf9
416d33c
 
 
 
 
 
 
 
 
 
cd1ebf9
9ef2b34
416d33c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
fd41634
 
416d33c
 
 
a1052ae
416d33c
 
 
 
 
a1052ae
416d33c
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import torch
from transformers import AutoFeatureExtractor, AutoModelForObjectDetection
import cv2
import pandas as pd
import smtplib
from datetime import datetime, timedelta
import datetime

# Load pre-trained model
model_name = "hustvl/yolos-small"
feature_extractor = AutoFeatureExtractor.from_pretrained(model_name)
model = AutoModelForObjectDetection.from_pretrained(model_name)

def detect_number_plates(image):
    # Pre-process image
    inputs = feature_extractor(images=image, return_tensors="pt")
    
    # Run object detection
    outputs = model(**inputs)
    
    # Extract detected number plates
    number_plates = []
    for i, detection in enumerate(outputs):
        for j, score in enumerate(detection["scores"]):
            if score > 0.5 and detection["labels"][j] == 7:  # 7 is the class ID for number plates
                x1, y1, x2, y2 = detection["boxes"][j]
                number_plates.append((x1, y1, x2, y2))
    
    return number_plates

def detect_number_plates(image):
    # Your code here
    pass

def save_to_excel(number_plates):
    # Create a pandas DataFrame
    df = pd.DataFrame({
        "Date": [datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") for _ in range(len(number_plates))],
        "Number Plate": [f"{x1}, {y1}, {x2}, {y2}" for x1, y1, x2, y2 in number_plates]
    })
    
    # Append to existing Excel file or create a new one
    try:
        existing_df = pd.read_excel("number_plates.xlsx")
        combined_df = pd.concat([existing_df, df])
        combined_df.to_excel("number_plates.xlsx", index=False)
    except FileNotFoundError:
        df.to_excel("number_plates.xlsx", index=False)

def monitor_vehicles(number_plates):
    # Load registered number plates from a file or database
    registered_plates = pd.read_csv("registered_plates.csv")["Number Plate"].tolist()
    
    # Check each detected number plate
    for x1, y1, x2, y2 in number_plates:
        number_plate = f"{x1}, {y1}, {x2}, {y2}"
        if number_plate not in registered_plates:
            # Check if the vehicle has been present for more than 24 hours
            try:
                existing_df = pd.read_excel("number_plates.xlsx")
                vehicle_entries = existing_df[existing_df["Number Plate"] == number_plate]
                if len(vehicle_entries) > 0 and (datetime.now() - vehicle_entries.iloc[-1]["Date"]).total_seconds() > 86400:
                    # Send an alert email
                    send_alert_email(number_plate)
            except FileNotFoundError:
                pass

    
    def send_alert_email(number_plate):
    # Set up email server
    server = smtplib.SMTP("smtp.gmail.com", 587)
    server.starttls()
    server.login("karthikm@sathkrutha.com", "karthik@1443")
    
    # Send email
    subject = "Unregistered Vehicle Alert"
    body = f"Unregistered vehicle with number plate {number_plate} has been present for more than 24 hours."
    message = f"Subject: {subject}\n\n{body}"
    server.sendmail("karthikm@sathkrutha.com", "majjikarthikreddy64@gmail.com", message)
    server.quit()

    def main(image_path):
    image = cv2.imread(image_path)
    number_plates = detect_number_plates(image)
    save_to_excel(number_plates)
    monitor_vehicles(number_plates)

# Example usage
main("/Users/majjikarthikreddy/Downloads/WhatsApp Image 2025-04-10 at 10.29.25.jpeg")