Spaces:
Sleeping
Sleeping
Esmaeilkiani
commited on
Update app.py
Browse files
app.py
CHANGED
@@ -1,103 +1,103 @@
|
|
1 |
-
import streamlit as st
|
2 |
-
import
|
3 |
-
import
|
4 |
-
import
|
5 |
-
import
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
ee.
|
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 |
-
map_.
|
70 |
-
|
71 |
-
#
|
72 |
-
map_.
|
73 |
-
|
74 |
-
#
|
75 |
-
map_.
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
# امکان دانلود نقشه
|
81 |
-
st.download_button(label="دانلود نقشه", data=map_.to_image(), file_name="map.png", mime="image/png")
|
82 |
-
|
83 |
user_input = pd.DataFrame({
|
84 |
'Age': [farm_age],
|
85 |
'Variety': [farm_variety],
|
86 |
-
'NDRE': [
|
87 |
-
})
|
88 |
|
89 |
-
if start_date:
|
90 |
-
day_of_year = start_date.timetuple().tm_yday
|
91 |
-
month = start_date.month
|
92 |
-
user_input['DayOfYear'] = [day_of_year]
|
93 |
-
user_input['Month'] = [month]
|
94 |
-
|
95 |
-
user_input = user_input[['Age', 'DayOfYear', 'Month', 'Variety', 'NDRE']]
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
import datetime
|
3 |
+
import pandas as pd
|
4 |
+
import geemap
|
5 |
+
import ee # Ensure that Earth Engine is initialized
|
6 |
+
from sklearn.preprocessing import StandardScaler # Example import, adjust based on your model
|
7 |
+
|
8 |
+
try:
|
9 |
+
service_account = 'Esmaeil.kiani1387@gmail.com'
|
10 |
+
credentials_path = 'ee-esmaeilkiani1387-1b2c5e812a1d.json'
|
11 |
+
ee.Initialize(ee.ServiceAccountCredentials(service_account, credentials_path))
|
12 |
+
except Exception as e:
|
13 |
+
st.error(f"Error initializing Earth Engine: {e}")
|
14 |
+
st.stop() # Stop execution if authentication fails
|
15 |
+
#Load your farms data
|
16 |
+
Make sure to define `farms_data` DataFrame with columns ['farm_name', 'latitude', 'longitude', 'age', 'variety']
|
17 |
+
farms_data = pd.read_csv('Farm_Details_Export.csv')
|
18 |
+
|
19 |
+
# تابع برای دریافت نقشه NDVI
|
20 |
+
def get_ndvi_map(start_date, end_date):
|
21 |
+
s2 = ee.ImageCollection('COPERNICUS/S2').filterBounds(region).filterDate(start_date, end_date)
|
22 |
+
ndvi = s2.map(lambda image: image.normalizedDifference(['B8', 'B4']).rename('NDVI')).median()
|
23 |
+
ndvi_params = {'min': 0, 'max': 1, 'palette': ['red', 'yellow', 'green']}
|
24 |
+
return ndvi, ndvi_params
|
25 |
+
|
26 |
+
# تابع برای دریافت نقشه NDMI (شاخص رطوبت)
|
27 |
+
def get_ndmi_map(start_date, end_date):
|
28 |
+
s2 = ee.ImageCollection('COPERNICUS/S2').filterBounds(region).filterDate(start_date, end_date)
|
29 |
+
ndmi = s2.map(lambda image: image.normalizedDifference(['B8', 'B11']).rename('NDMI')).median()
|
30 |
+
ndmi_params = {'min': -1, 'max': 1, 'palette': ['brown', 'white', 'blue']}
|
31 |
+
return ndmi, ndmi_params
|
32 |
+
|
33 |
+
# ساخت برنامه Streamlit
|
34 |
+
st.title("نقشه NDVI و NDMI برای مزارع شرکت دهخدا")
|
35 |
+
|
36 |
+
# انتخاب بازه زمانی
|
37 |
+
start_date = st.date_input("تاریخ شروع", datetime.date(2023, 1, 1))
|
38 |
+
end_date = st.date_input("تاریخ پایان", datetime.date(2023, 12, 31))
|
39 |
+
|
40 |
+
# انتخاب شاخص
|
41 |
+
index_option = st.selectbox("شاخص مورد نظر را انتخاب کنید:", ["NDVI", "NDMI"])
|
42 |
+
|
43 |
+
# انتخاب مزرعه از فایل CSV
|
44 |
+
farm_name = st.sidebar.selectbox("نام مزرعه را انتخاب کنید:", farms_data['farm_name'].unique())
|
45 |
+
|
46 |
+
# پیدا کردن مختصات مزرعه انتخاب شده
|
47 |
+
selected_farm = farms_data[farms_data['farm_name'] == farm_name]
|
48 |
+
latitude = selected_farm['latitude'].values[0]
|
49 |
+
longitude = selected_farm['longitude'].values[0]
|
50 |
+
farm_age = selected_farm['age'].values[0]
|
51 |
+
farm_variety = selected_farm['variety'].values[0]
|
52 |
+
|
53 |
+
# دکمه برای نمایش نقشه
|
54 |
+
if st.button("نمایش نقشه"):
|
55 |
+
# بسته به شاخص انتخاب شده، نقشه را بارگذاری کنید
|
56 |
+
if index_option == "NDVI":
|
57 |
+
index_map, vis_params = get_ndvi_map(start_date.isoformat(), end_date.isoformat())
|
58 |
+
else:
|
59 |
+
index_map, vis_params = get_ndmi_map(start_date.isoformat(), end_date.isoformat())
|
60 |
+
|
61 |
+
# ایجاد نقشه با Geemap
|
62 |
+
map_ = geemap.Map(center=[latitude, longitude], zoom=12)
|
63 |
+
map_.addLayer(index_map, vis_params, index_option)
|
64 |
+
|
65 |
+
# افزودن نوار رنگ به نقشه
|
66 |
+
map_.add_colorbar(vis_params, label=index_option)
|
67 |
+
|
68 |
+
# افزودن مزرعه به نقشه
|
69 |
+
map_.add_marker([latitude, longitude], popup=f"نام: {farm_name}\nسن: {farm_age}\nواریته: {farm_variety}")
|
70 |
+
|
71 |
+
# نمایش نقشه در Streamlit
|
72 |
+
map_.to_streamlit()
|
73 |
+
|
74 |
+
# امکان دانلود نقشه (توجه: كد ایجاد تصویر ممکن است نیاز به بررسی داشته باشد)
|
75 |
+
map_image = map_.to_image() # Adjust if `to_image` doesn't exist or not functioning correctly
|
76 |
+
st.download_button(label="دانلود نقشه", data=map_image, file_name="map.png", mime="image/png")
|
77 |
+
|
78 |
+
# Preparation for the prediction model
|
79 |
+
# Ensure you have defined `model` and `ndre_value`, which are not included in the provided code
|
|
|
|
|
|
|
80 |
user_input = pd.DataFrame({
|
81 |
'Age': [farm_age],
|
82 |
'Variety': [farm_variety],
|
83 |
+
'NDRE': [None] # Assign ndre_value once computed if applicable
|
84 |
+
})
|
85 |
|
86 |
+
if start_date:
|
87 |
+
day_of_year = start_date.timetuple().tm_yday
|
88 |
+
month = start_date.month
|
89 |
+
user_input['DayOfYear'] = [day_of_year]
|
90 |
+
user_input['Month'] = [month]
|
91 |
+
|
92 |
+
user_input = user_input[['Age', 'DayOfYear', 'Month', 'Variety', 'NDRE']]
|
93 |
+
|
94 |
+
# Ensure that your model is properly defined and imported as necessary
|
95 |
+
if 'model' in locals():
|
96 |
+
prediction = model.predict(user_input)
|
97 |
+
st.write("Predictions:")
|
98 |
+
st.write(f"Brix: {prediction[0][0]}")
|
99 |
+
st.write(f"Pol: {prediction[0][1]}")
|
100 |
+
st.write(f"Purity: {prediction[0][2]}")
|
101 |
+
st.write(f"RS: {prediction[0][3]}")
|
102 |
+
else:
|
103 |
+
st.warning("مدل پیشبینی تعریف نشده است.")
|