File size: 4,152 Bytes
715ba6c
 
 
 
 
0861991
715ba6c
0861991
715ba6c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0861991
 
715ba6c
3e99fcf
715ba6c
017eaa7
715ba6c
0861991
3e99fcf
0861991
 
 
 
3e99fcf
0861991
 
3e99fcf
0861991
 
 
 
 
 
 
 
715ba6c
 
 
 
 
 
0861991
715ba6c
 
 
 
 
 
 
 
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
import gradio as gr
import pandas as pd
import matplotlib.pyplot as plt
import random
from datetime import datetime, timedelta
from transformers import pipeline
from PIL import Image
import numpy as np

# Function to simulate sensor data
def generate_sensor_data(num_entries):
    data = []
    timestamp = datetime.now()
    for _ in range(num_entries):
        entry = {
            "timestamp": timestamp.strftime("%Y-%m-%d %H:%M:%S"),
            "engine_temp": random.randint(80, 110),
            "oil_pressure": random.randint(15, 50),
            "tire_pressure": random.randint(29, 35),
            "battery_voltage": round(random.uniform(11.0, 13.0), 1)
        }
        # Introduce anomalies
        if random.random() < 0.1:
            entry["engine_temp"] = random.randint(105, 120)
        if random.random() < 0.1:
            entry["oil_pressure"] = random.randint(10, 20)
        if random.random() < 0.05:
            entry["battery_voltage"] = round(random.uniform(10.5, 11.5), 1)
        data.append(entry)
        timestamp += timedelta(minutes=5)
    return pd.DataFrame(data)

# Generate sensor data
sensor_data = generate_sensor_data(10)

# Plot sensor data
def plot_sensor_data(df):
    timestamps = pd.to_datetime(df["timestamp"])
    fig, axs = plt.subplots(2, 2, figsize=(14, 10))
    fig.suptitle('Sensor Data', fontsize=16)

    thresholds = {"engine_temp": 100, "oil_pressure": 25, "tire_pressure": 28, "battery_voltage": 11.5}

    axs[0, 0].plot(timestamps, df["engine_temp"], color='red')
    axs[0, 0].axhline(y=thresholds["engine_temp"], color='green', linestyle='--')
    axs[0, 0].set_title("Engine Temperature (°C)")

    axs[0, 1].plot(timestamps, df["oil_pressure"], color='blue')
    axs[0, 1].axhline(y=thresholds["oil_pressure"], color='orange', linestyle='--')
    axs[0, 1].set_title("Oil Pressure (psi)")

    axs[1, 0].plot(timestamps, df["tire_pressure"], color='green')
    axs[1, 0].axhline(y=thresholds["tire_pressure"], color='purple', linestyle='--')
    axs[1, 0].set_title("Tire Pressure (psi)")

    axs[1, 1].plot(timestamps, df["battery_voltage"], color='black')
    axs[1, 1].axhline(y=thresholds["battery_voltage"], color='brown', linestyle='--')
    axs[1, 1].set_title("Battery Voltage (V)")

    plt.tight_layout()
    fig_path = "sensor_plot.png"
    plt.savefig(fig_path)
    plt.close(fig)
    return Image.open(fig_path)

pipe = pipeline("image-to-text", model="Salesforce/blip-image-captioning-large")     

# Generate recommendations
def analyze_data(image, plot_path):
    try:
        # Ensure image is a PIL object
        if isinstance(image, np.ndarray):
            image = Image.fromarray(image)

        # Damage analysis
        damage_output = pipe(inputs=image)[0]['generated_text'] if image else "No image uploaded."

        # Graph analysis
        graph_analysis = pipe(inputs=plot_path)[0]['generated_text']

        # Recommendations
        recommendations = f"Recommendations based on analysis:\n\n1. {graph_analysis}\n\n2. {damage_output}"
        return recommendations, plot_path, graph_analysis

    except Exception as e:
        return f"Error occurred: {str(e)}", None, None

# Gradio UI
with gr.Blocks(css=".output-text { font-family: 'Arial'; color: #222; font-size: 1rem; }") as app:
    gr.Markdown("# 🚗 Car Health Report Generation using Generative AI")
    with gr.Row():
        car_image = gr.Image(type="pil", label="Upload Car Part Damage Image")
    with gr.Row():
        display_graph = gr.Image(value=plot_sensor_data(sensor_data), type="pil", label="Sensor Data Over Time")
        recommendations = gr.Textbox(label="Analysis & Recommendations", placeholder="Insights will appear here...")
        graph_insights = gr.Textbox(label="Graph Insights", placeholder="Graph insights will appear here...")
    data_table = gr.Dataframe(sensor_data, label="Generated Sensor Data (Table View)", row_count=(10, "fixed"), interactive=False)

    # Realistic colors and UI layout for a polished look
    car_image.change(fn=analyze_data, inputs=[car_image, display_graph], outputs=[recommendations, display_graph, graph_insights])

app.launch()