techgium / rm_predict.py
tamizh-me's picture
Update rm_predict.py
f7ad298 verified
import gradio as gr
import joblib
import numpy as np
import csv
# Load your trained Gradient Boosted Trees model
model = joblib.load('gradient_boosting_regressor_model.joblib')
# Define emission factors directly
emission_factors = {
'Synthetic Rubber': 2.4,
'Natural Rubber': 0.639,
'Carbon Black': 3.2,
'Steel Cord': 2.46,
'Silica': 2.06,
'Process Oil': 1.61,
'Bead Wire': 2.46,
'Zinc Oxide': 2.01,
'Sulfur': 0.008
}
# Fuel emission coefficients (kgCO2e per unit)
fuel_emission_factors = {
'Benzene': 2.81,
'Kerosene': 2.76,
'Diesel fuel': 2.89,
'A heavy oil': 3.08,
'B • C heavy oil': 3.34,
'Liquefied petroleum gas (LPG)': 3.78,
'Liquefied natural gas (LNG)': 4.23,
'Fuel coal': 2.37
}
def get_next_identifier():
file_path = 'predictions.csv'
try:
with open(file_path, 'r') as file:
last_line = None
for last_line in csv.reader(file): pass
if last_line and last_line[0].startswith('tire'):
last_num = int(last_line[0][4:])
return f"tire{last_num + 1}"
except FileNotFoundError:
pass
return "tire1"
def save_prediction_results(identifier, tire_weight, predicted_emission, transport_emission, fuel_emission, plant_emission):
file_path = 'predictions.csv'
# Attempt to write the header only if the file is being created (i.e., doesn't exist)
try:
with open(file_path, 'x', newline='') as file:
writer = csv.writer(file)
writer.writerow(['Identifier', 'Tire Weight', 'Predicted Material CO2 Emissions', 'Raw Material Transportation CO2 Emissions', 'Fuel CO2 Emissions', 'Plant Energy Consumption CO2 Emissions'])
except FileExistsError:
pass # File already exists, proceed to append data without writing the header
with open(file_path, 'a', newline='') as file:
writer = csv.writer(file)
writer.writerow([identifier, tire_weight, predicted_emission, transport_emission, fuel_emission, plant_emission])
def predict_and_calculate_emissions(average_distance, fuel_type, fuel_quantity, energy_consumption, tire_weight, synthetic_rubber_weight, natural_rubber_weight, carbon_black_weight, steel_cord_weight, silica_weight, process_oil_weight, bead_wire_weight, zinc_oxide_weight, sulfur_weight):
weights = np.array([synthetic_rubber_weight, natural_rubber_weight, carbon_black_weight, steel_cord_weight, silica_weight, process_oil_weight, bead_wire_weight, zinc_oxide_weight, sulfur_weight])
emissions = weights * np.array([emission_factors[mat] for mat in emission_factors])
features = np.concatenate(([tire_weight], weights, emissions)).reshape(1, -1)
predicted_emission = model.predict(features)[0]
# Additional Calculations
transport_emission = tire_weight * 0.00056 * average_distance
fuel_emission = fuel_quantity * fuel_emission_factors[fuel_type]
plant_emission = energy_consumption * 0.9
# Save results
identifier = get_next_identifier()
save_prediction_results(identifier, tire_weight, predicted_emission, transport_emission, fuel_emission, plant_emission)
return predicted_emission, transport_emission, fuel_emission, plant_emission
# Assuming the predict_and_calculate_emissions function is defined correctly as per your previous code snippet
with gr.Blocks() as demo:
gr.Markdown("### Predict Total CO2 Emissions")
gr.Markdown("Enter the details to predict emissions and calculate additional environmental impacts.")
# Tire and raw material weights
with gr.Row():
tire_weight = gr.Number(label="Tire Weight (kg)")
with gr.Row():
synthetic_rubber_weight = gr.Number(label="Synthetic Rubber Weight (kg)", value=0)
natural_rubber_weight = gr.Number(label="Natural Rubber Weight (kg)", value=0)
carbon_black_weight = gr.Number(label="Carbon Black Weight (kg)", value=0)
with gr.Row():
steel_cord_weight = gr.Number(label="Steel Cord Weight (kg)", value=0)
silica_weight = gr.Number(label="Silica Weight (kg)", value=0)
process_oil_weight = gr.Number(label="Process Oil Weight (kg)", value=0)
with gr.Row():
bead_wire_weight = gr.Number(label="Bead Wire Weight (kg)", value=0)
zinc_oxide_weight = gr.Number(label="Zinc Oxide Weight (kg)", value=0)
sulfur_weight = gr.Number(label="Sulfur Weight (kg)", value=0)
# Fuel type selection in its own row
with gr.Row():
fuel_type = gr.Radio(['Benzene', 'Kerosene', 'Diesel fuel', 'A heavy oil', 'B • C heavy oil', 'Liquefied petroleum gas (LPG)', 'Liquefied natural gas (LNG)', 'Fuel coal'], label="Fuel Type")
# Additional parameters in a compact 3-box layout
with gr.Row():
average_distance = gr.Number(label="Average Transportation Distance (km)", value=0)
fuel_quantity = gr.Number(label="Fuel Quantity (liters/kg)", value=0)
energy_consumption = gr.Number(label="Plant Energy Consumption (kWh per tire)", value=0)
btn_predict = gr.Button("Predict", align="right")
# Outputs
predicted_material_emission = gr.Textbox(label="Predicted Material CO2 Emissions (kgCO2e)")
raw_material_transportation_emission = gr.Textbox(label="Transportation CO2 Emissions (kgCO2e)")
fuel_emission = gr.Textbox(label="Fuel CO2 Emissions (kgCO2e)")
plant_energy_consumption_emission = gr.Textbox(label="Plant Energy CO2 Emissions (kgCO2e)")
# Button to execute the function
btn_predict.click(
fn=predict_and_calculate_emissions,
inputs=[
average_distance, fuel_type, fuel_quantity, energy_consumption,
tire_weight, synthetic_rubber_weight, natural_rubber_weight, carbon_black_weight,
steel_cord_weight, silica_weight, process_oil_weight, bead_wire_weight,
zinc_oxide_weight, sulfur_weight
],
outputs=[
predicted_material_emission, raw_material_transportation_emission,
fuel_emission, plant_energy_consumption_emission
]
)
demo.launch()