| import gradio as gr |
| from PIL import Image |
| import requests |
| import hopsworks |
| import joblib |
| import pandas as pd |
| import numpy as np |
|
|
| project = hopsworks.login(project='suyiw000') |
|
|
| fs = project.get_feature_store() |
|
|
|
|
| mf = project.get_model_registry() |
| model = mf.get_model("food_model", version=1) |
| model_dir = model.download() |
| model = joblib.load(model_dir + "/food_model.pkl") |
| print("Model downloaded") |
|
|
|
|
| market = ['Badakhshan', 'Badghis', 'Baghlan', 'Balkh', 'Bamyan', 'Daykundi', 'Farah', 'Faryab', 'Ghazni', 'Ghor', 'Hilmand', 'Hirat', 'Jawzjan' 'Kabul', 'Kandahar', 'Kapisa', 'Khost', 'Kunar', 'Kunduz', 'Laghman', 'Logar', 'Maidan Wardak', 'Nangarhar', 'Nimroz', 'Nuristan', 'Paktika', 'Paktya', 'Panjsher', 'Parwan', 'Samangan', 'Sar-e-Pul', 'Takhar', 'Uruzgan', 'Zabul'] |
| commodity = ['Bread', 'Oil_cooking', 'Pulses', 'Rice_high', 'Rice_low', 'Salt', 'Sugar', 'Wheat', 'Wheatflour_high', 'Wheatflour_low'] |
|
|
|
|
| def predict_price(year, month, markets, food): |
| market_empty = np.zeros(34) |
| market_name = ['Badakhshan', 'Badghis', 'Baghlan', 'Balkh', 'Bamyan', 'Daykundi', 'Farah', 'Faryab', 'Ghazni', 'Ghor', 'Hilmand', 'Hirat', 'Jawzjan' 'Kabul', 'Kandahar', 'Kapisa', 'Khost', 'Kunar', 'Kunduz', 'Laghman', 'Logar', 'Maidan Wardak', 'Nangarhar', 'Nimroz', 'Nuristan', 'Paktika', 'Paktya', 'Panjsher', 'Parwan', 'Samangan', 'Sar-e-Pul', 'Takhar', 'Uruzgan', 'Zabul'] |
| market = [] |
| for i in range(34): |
| temp_market = market_empty.copy() |
| temp_market[i] = 1.0 |
| market.append(temp_market) |
|
|
| commodity_empty = np.zeros(10) |
| commodity_name = ['Bread', 'Oil_cooking', 'Pulses', 'Rice_high', 'Rice_low', 'Salt', 'Sugar', 'Wheat', 'Wheatflour_high', 'Wheatflour_low'] |
| commodity=[] |
| for i in range(10): |
| commodity_array = commodity_empty.copy() |
| commodity_array[i] = 1.0 |
| commodity.append(commodity_array) |
|
|
| commodity_with_names = dict(zip(commodity_name, commodity)) |
| arrays_with_names = dict(zip(market_name, market)) |
|
|
| date = ((year*10000+month*100+15)-20200000)/100000 |
|
|
| input_data = np.concatenate([arrays_with_names[markets], commodity_with_names[food], [date]]).reshape(1, -1) |
| |
| prediction = model.predict(input_data) |
|
|
| food_url = "https://raw.githubusercontent.com/TimiUU/wine/main/" + food + ".png" |
| img = Image.open(requests.get(food_url, stream=True).raw) |
| |
|
|
| return prediction, img |
|
|
|
|
| demo = gr.Interface( |
| fn = predict_price, |
| title = "AFG FOOD PRICE PREDICTION", |
| allow_flagging="never", |
| inputs=[ |
| gr.Number(label="Year"), |
| gr.Number(label="Mouth"), |
| gr.Dropdown(choices=market, label="Market"), |
| gr.Dropdown(choices=commodity, label="Food Type") |
| ], |
| outputs=[gr.Textbox(), gr.Image()] |
| |
| ) |
| demo.launch(debug=True) |