File size: 4,148 Bytes
ffdb35d
bd820cc
 
ffdb35d
e741394
 
 
ffdb35d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e741394
ffdb35d
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123

import streamlit as st
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import make_pipeline
from sklearn.svm import SVR
from sklearn.ensemble import RandomForestRegressor

st.title("Webcam Color Detection Charting")

uploaded_file = st.file_uploader("Choose a CSV file", type="csv")

time_frame_options = [
    "All",
    "1 second",
    "5 seconds",
    "10 seconds",
    "30 seconds",
    "1 minute",
    "5 minutes",
    "10 minutes",
    "30 minutes",
    "60 minutes",
]
time_frame = st.selectbox("Data Time Frame", time_frame_options)

regression_options = [
    "None",
    "Linear Regression",
    "Polynomial Regression",
    "SVR (Support Vector Regression)",
    "Random Forest Regression",
]
regression_type = st.selectbox("Regression Analysis Type", regression_options)

if uploaded_file is not None:
    # Read CSV file
    data = pd.read_csv(uploaded_file)

    # Filter data according to the time frame
    if time_frame != "All":
        seconds = {
            "1 second": 1,
            "5 seconds": 5,
            "10 seconds": 10,
            "30 seconds": 30,
            "1 minute": 60,
            "5 minutes": 300,
            "10 minutes": 600,
            "30 minutes": 1800,
            "60 minutes": 3600,
        }
        data['timestamp'] = pd.to_datetime(data['timestamp'], unit='ms')
        data.set_index('timestamp', inplace=True)
        data = data.resample(f"{seconds[time_frame]}S").mean().dropna().reset_index()

    # Create charts
    fig, axes = plt.subplots(2, 1, figsize=(10, 8))

    # RGB chart
    
color_space_options = ["RGB", "HSV"]
color_space = st.selectbox("Select Color Space", color_space_options)

# Depending on the selection, plot the corresponding values
if color_space == "RGB":
    axes[0].plot(data['R'], 'r', label='R')
    axes[0].plot(data['G'], 'g', label='G')
    axes[0].plot(data['B'], 'b', label='B')
elif color_space == "HSV":
    axes[0].plot(data['H'], 'r', label='H')
    axes[0].plot(data['S'], 'g', label='S')
    axes[0].plot(data['V'], 'b', label='V')
axes[0].legend(loc='upper right')


    axes[0].legend(loc='upper right')
    axes[0].set_title('RGB Values')
    axes[1].legend(loc='upper right')
    axes[1].set_title('HSV Values')

    # Perform regression analysis if selected
    if regression_type != "None":
        X = np.arange(len(data)).reshape(-1, 1)

        # Linear Regression
        if regression_type == "Linear Regression":
            model = LinearRegression()
            for color, code in zip(['R', 'G', 'B'], ['r', 'g', 'b']):
                model.fit(X, data[color])
                axes[0].plot(X, model.predict(X), f'{code}--')
                st.write(f"{color}: y = {model.coef_[0]} * x + {model.intercept_}")

        # Polynomial Regression
        elif regression_type == "Polynomial Regression":
            polynomial_features = PolynomialFeatures(degree=2)
            model = make_pipeline(polynomial_features, LinearRegression())
            for color, code in zip(['R', 'G', 'B'], ['r', 'g', 'b']):
                model.fit(X, data[color])
                axes[0].plot(X, model.predict(X), f'{code}--')
            st.write("Polynomial regression equation is not easily representable.")

        # SVR (Support Vector Regression)
        elif regression_type == "SVR (Support Vector Regression)":
            model = SVR()
            for color, code in zip(['R', 'G', 'B'], ['r', 'g', 'b']):
                model.fit(X, data[color])
                axes[0].plot(X, model.predict(X), f'{code}--')
            st.write("SVR equation is not easily representable.")

        # Random Forest Regression
        elif regression_type == "Random Forest Regression":
            model = RandomForestRegressor()
            for color, code in zip(['R', 'G', 'B'], ['r', 'g', 'b']):
                model.fit(X, data[color])
                axes[0].plot(X, model.predict(X), f'{code}--')
            st.write("Random Forest equation is not easily representable.")

    st.pyplot(fig)