generated from AceReapers101/fdk-init
-
Notifications
You must be signed in to change notification settings - Fork 2
/
index.py
255 lines (218 loc) · 9.76 KB
/
index.py
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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
# pylint: disable=import-error
import os
from tensorflow.keras.layers.experimental import preprocessing
from tensorflow.keras import layers
from tensorflow import keras
import tensorflow as tf
import seaborn as sns
import plotly.express as px
from plotly import tools
import plotly.graph_objects as go
import numpy as np
import matplotlib.pyplot as plt
import streamlit as st
from streamlit import caching
from imageai.Detection import ObjectDetection
import pandas as pd
pd.plotting.register_matplotlib_converters()
st.set_option('deprecation.showPyplotGlobalUse', False)
option = st.sidebar.selectbox(
'', ['Project Overview', 'Project Demo', 'Linear Regression Prediction'])
if option == "Project Overview":
from PIL import Image
st.title('MyTACC')
st.write('Deep Learning for Traffic Analysis and Climate Control')
st.header('Problem Statement')
st.write('Carbon emissions from car exhaust gases contain a great number of chemical substances that are detrimental not only to the human body, but also to environmental health. In a country with high car ownership like Malaysia, many environmentally harmful gases and substances are released into the surroundings on a daily basis. In the long term, this phenomenon leads to cases of climate change, particularly global warming. As seen in the graph below, the rate of carbon emission has seen a steady increase in the past 50 years.')
st.write('')
img = Image.open("assets/graph.png")
st.image(img, width=600)
st.header('Solution')
st.write('0) Local authorities may choose to set a certain limit to the number of cars on the road to be notified when that limit is reached')
st.write('1) A clear photo of incoming traffic is taken to monitor at regular intervals on Road X, preferably during the red light when cars are stationary so as to ease the process of analysis and object detection.')
st.write('2) Traffic analysis is carried out by counting the number of vehicles at the time of the monitoring using FDK object_detection.')
st.write('3) The data is collected and authorities may act accordingly. For example, local authorities may want to adjust the red light durations, monitor carbon emission in a given area and limit cars on road etc.')
st.header('Future Improvements')
st.write('0) Feed a live video into the product.')
st.write('1) Product can become a webhook and automate tasks if number of vehicles on the road exceeds the limit.')
st.write('2) Product can be integrated into a webapp that advises users to take up public transport instead of using private vehicles and passenger cars to reduce carbon emission.')
st.header('Our Team')
st.write('')
col1, col2, col3 = st.beta_columns(3)
col1.image(Image.open("assets/cheahzixu.jpg"),width=150)
col1.subheader('Cheah Zixu')
col1.write('@Xephius')
col1.write('GitHub: @genesis331')
col1.write('IG: @zixucheah331')
col2.image(Image.open("assets/choochenzhung.jpg"),width=150)
col2.subheader('Choo Chen Zhung')
col2.write('@Xectroz')
col2.write('GitHub: @Deadsteration')
col2.write('IG: @czhung0701')
col3.image(Image.open("assets/hoshuyi.jpg"),width=150)
col3.subheader('Ho Shu Yi')
col3.write('@Xytrix')
col3.write('GitHub: @Xytrix1103')
col3.write('IG: @shuyi_ho03')
st.header('Appendix')
st.text('https://www.geography.org.uk/teaching-resources/singapore-malaysia/Can-Malaysia-do-anything-about-its-air-pollution#:~:text=The%20first%20is%20air%20pollution,in%20all%20its%20major%20cities.')
st.text('https://www.ucsusa.org/resources/cars-trucks-buses-and-air-pollution')
st.text('https://www.researchgate.net/publication/317304216_Verification_Relationship_between_Vehicle_Data_and_Air_Pollution_Index_Using_Muti-linear_Regression_Modeling')
st.text('https://www.researchgate.net/publication/286197080_Air_pollution_study_of_vehicles_emission_in_high_volume_traffic_Selangor_Malaysia_as_a_case_study')
st.text('https://www.titlemax.com/resources/the-effect-of-your-cars-carbon-emission/')
st.write('')
st.write('')
st.subheader('Project open-sourced on GitHub.')
st.write('https://github.com/AceReapers101/fdh-hackathon')
elif option == "Project Demo":
st.title('Project Demo')
st.write('')
left_column, right_column = st.beta_columns(2)
car_limit = left_column.number_input('Cars',min_value=0,value=0)
bus_limit = left_column.number_input('Buses',min_value=0,value=0)
truck_limit = left_column.number_input('Trucks',min_value=0,value=0)
motorcycle_limit = left_column.number_input('Motorcycles',min_value=0,value=0)
right_column.header('Total vehicle limit: ' + str(car_limit + bus_limit + truck_limit + motorcycle_limit))
st.write('')
st.echo()
with st.echo():
# import libraries
from imageai.Detection import ObjectDetection
import os
from PIL import Image
import cv2
st.echo()
with st.echo():
# define model files and get image
execution_path = os.getcwd()
detector = ObjectDetection()
detector.setModelTypeAsYOLOv3()
detector.setModelPath( os.path.join(execution_path , "yolo.h5"))
detector.loadModel()
detections = detector.detectObjectsFromImage(input_image=os.path.join(execution_path , "assets/highway.jpg"), output_image_path=os.path.join(execution_path , "imagenew.jpg"), minimum_percentage_probability=20)
st.echo()
with st.echo():
img = Image.open("assets/highway.jpg")
st.image(img, width=700)
st.echo()
with st.echo():
img2 = Image.open("imagenew.jpg")
st.image(img2, width=700)
st.echo()
with st.echo():
# get vehicle type and add into a dictionary
vehicle = []
count = 0
for eachObject in detections:
vehicle.append(eachObject["name"])
count += 1
dict = {
"cars": 0,
"bus": 0,
"truck": 0,
"motorcycle": 0,
"total": 0
}
dict["cars"] += vehicle.count('car')
dict["bus"] += vehicle.count('bus')
dict["truck"] += vehicle.count('truck')
dict["motorcycle"] += vehicle.count('motorcycle')
dict["total"] += count
st.table(pd.DataFrame(dict.items(),columns=['Vehicle Type','Value']))
imgTick = Image.open("assets/check-circle.png")
imgX = Image.open("assets/alert-circle.png")
left_column1, right_column1 = st.beta_columns(2)
left_column1.subheader('Car:')
if car_limit == 0:
left_column1.image(imgTick,width=30)
elif car_limit >= dict["cars"]:
left_column1.image(imgTick,width=30)
else:
left_column1.image(imgX,width=30)
left_column1.subheader('Bus:')
if bus_limit == 0:
left_column1.image(imgTick,width=30)
elif bus_limit >= dict["bus"]:
left_column1.image(imgTick,width=30)
else:
left_column1.image(imgX,width=30)
left_column1.subheader('Truck:')
if truck_limit == 0:
left_column1.image(imgTick,width=30)
elif truck_limit >= dict["truck"]:
left_column1.image(imgTick,width=30)
else:
left_column1.image(imgX,width=30)
left_column1.subheader('Motorcycle:')
if motorcycle_limit == 0:
left_column1.image(imgTick,width=30)
elif motorcycle_limit >= dict["motorcycle"]:
left_column1.image(imgTick,width=30)
else:
left_column1.image(imgX,width=30)
right_column1.subheader('Number of vehicles in total:')
if (car_limit + bus_limit + truck_limit + motorcycle_limit) == 0:
right_column1.image(imgTick,width=60)
elif (car_limit + bus_limit + truck_limit + motorcycle_limit) >= len(list):
right_column1.image(imgTick,width=60)
else:
right_column1.image(imgX,width=60)
elif option == "Linear Regression Prediction":
st.title('Extra stuff')
st.write('A simple prediction of future carbon emissions')
st.write('')
st.echo()
with st.echo():
# Read downloaded dataset from Kaggle
filepath = "./assets/data.csv"
raw_data = pd.read_csv(filepath)
# Remove unwanted contents and restructure the data
extracted_data = raw_data.loc[raw_data['Country Name'] == 'Malaysia']
cleaned_data = extracted_data.dropna(axis=1).drop(
columns=['Country Name', 'Country Code', 'Indicator Name', 'Indicator Code'])
data = cleaned_data.melt(var_name='Year', value_name='Value').sort_values(
['Year']).reset_index(drop=True)
data['Year Index'] = data.index + 1
st.echo()
with st.echo():
# Define a model
model = tf.keras.Sequential([
layers.Dense(units=1)
])
# Compile a model
model.compile(
optimizer=tf.optimizers.Adam(learning_rate=0.1),
loss='mean_absolute_error'
)
# Fit training data to model
history = model.fit(
data['Year Index'], data['Value'],
epochs=50
)
# Store the logs
hist = pd.DataFrame(history.history)
hist['epoch'] = history.epoch
st.echo()
with st.echo():
# Make prediction
x = tf.linspace(1, 70, 2)
y = model.predict(x)
st.echo()
with st.echo():
# Plot a loss graph
plt.plot(history.history['loss'], label='loss')
plt.xlabel('Epoch')
plt.ylabel('Error')
plt.legend()
plt.grid(True)
st.pyplot(clear_figure=True)
st.echo()
with st.echo():
# Scatterplot of data and adding regression line
plt.scatter(data['Year Index'], data['Value'], label='Data')
plt.plot(x, y, color='m', label='Predictions')
plt.xlabel('Year Index')
plt.ylabel('Value')
plt.title('Carbon Emissions')
plt.legend()
st.pyplot(clear_figure=True)