import streamlit as st import pandas as pd from transformers import pipeline # Load the NLP model from Hugging Face nlp_model = pipeline('text-classification', model='distilbert-base-uncased') # Enhanced tree dataset with more trees, climates, and soil types data = { 'Tree': ['Neem', 'Peepal', 'Mango', 'Bamboo', 'Chili', 'Guava', 'Coconut', 'Papaya', 'Pine', 'Oak', 'Acacia', 'Eucalyptus', 'Teak', 'Date Palm', 'Banana', 'Apple'], 'Climate': ['Tropical', 'Tropical', 'Tropical', 'Tropical', 'Tropical', 'Tropical', 'Tropical', 'Tropical', 'Temperate', 'Temperate', 'Arid', 'Temperate', 'Tropical', 'Arid', 'Tropical', 'Temperate'], 'Soil': ['Loamy', 'Sandy', 'Loamy', 'Loamy', 'Sandy', 'Loamy', 'Sandy', 'Loamy', 'Loamy', 'Clay', 'Sandy', 'Sandy', 'Loamy', 'Sandy', 'Loamy', 'Loamy'], 'Use': ['Shade', 'Shade', 'Fruit', 'Construction', 'Spice', 'Fruit', 'Fruit', 'Fruit', 'Timber', 'Timber', 'Shade', 'Timber', 'Timber', 'Fruit', 'Fruit', 'Fruit'], 'Height': ['Medium', 'Medium', 'Tall', 'Tall', 'Short', 'Medium', 'Tall', 'Medium', 'Tall', 'Tall', 'Medium', 'Tall', 'Tall', 'Tall', 'Medium', 'Medium'], 'Leaf Color': ['Green', 'Green', 'Green', 'Green', 'Green', 'Green', 'Green', 'Green', 'Green', 'Green', 'Green', 'Green', 'Green', 'Green', 'Green', 'Green'], 'Growth Rate': ['Fast', 'Fast', 'Fast', 'Fast', 'Medium', 'Fast', 'Fast', 'Fast', 'Slow', 'Slow', 'Medium', 'Fast', 'Medium', 'Slow', 'Fast', 'Medium'] } # Convert to DataFrame df = pd.DataFrame(data) # Streamlit UI st.title('Environmentally Friendly Tree Recommender') # User inputs climate = st.selectbox('Select your climate:', df['Climate'].unique()) soil_type = st.selectbox('Select your soil type:', df['Soil'].unique()) goal = st.selectbox('Select your goal:', df['Use'].unique()) height = st.selectbox('Select desired height:', df['Height'].unique()) leaf_color = st.selectbox('Select desired leaf color:', df['Leaf Color'].unique()) growth_rate = st.selectbox('Select desired growth rate:', df['Growth Rate'].unique()) # Recommendation logic def recommend_trees(climate, soil_type, goal, height, leaf_color, growth_rate): recommendations = df[ (df['Climate'] == climate) & (df['Soil'] == soil_type) & (df['Use'] == goal) & (df['Height'] == height) & (df['Leaf Color'] == leaf_color) & (df['Growth Rate'] == growth_rate) ] return recommendations # Get recommendations recommended_trees = recommend_trees(climate, soil_type, goal, height, leaf_color, growth_rate) # Display recommendations st.subheader('Recommended Trees:') if not recommended_trees.empty: for index, row in recommended_trees.iterrows(): st.write(f"**Tree**: {row['Tree']}") st.write(f" - **Use**: {row['Use']}") st.write(f" - **Height**: {row['Height']}") st.write(f" - **Leaf Color**: {row['Leaf Color']}") st.write(f" - **Growth Rate**: {row['Growth Rate']}") else: st.write("No suitable trees found for your criteria.") # Optional: Use NLP model to process natural language inputs user_input = st.text_area("Describe your requirements (optional):", "") if user_input: classification = nlp_model(user_input) st.write("NLP Model Classification:", classification) # Sidebar enhancements st.sidebar.header('Tree Information') st.sidebar.write('Use the sidebar to get more information about different trees and their characteristics.') # Tree images from free sources tree_images = { 'Neem': 'https://upload.wikimedia.org/wikipedia/commons/0/0a/Neem_tree_2.jpg', 'Peepal': 'https://upload.wikimedia.org/wikipedia/commons/2/23/Ficus_religiosa.JPG', 'Mango': 'https://upload.wikimedia.org/wikipedia/commons/6/6e/Mango_Tree.jpg', 'Bamboo': 'https://upload.wikimedia.org/wikipedia/commons/e/e2/Bamboo_forest_in_Mingxi%2C_Fujian%2C_China.jpg', 'Chili': 'https://upload.wikimedia.org/wikipedia/commons/f/fd/Chili_pepper_1.jpg', 'Guava': 'https://upload.wikimedia.org/wikipedia/commons/7/7e/Guava_Fruit.jpg', 'Coconut': 'https://upload.wikimedia.org/wikipedia/commons/7/7b/Coconut_%28fruit%29.jpg', 'Papaya': 'https://upload.wikimedia.org/wikipedia/commons/4/4e/Papaya_fruit.jpg', 'Pine': 'https://images.pexels.com/photos/1420402/pexels-photo-1420402.jpeg', 'Oak': 'https://images.pexels.com/photos/1001682/pexels-photo-1001682.jpeg', 'Acacia': 'https://images.pexels.com/photos/69570/acacia-tree-sunset-tree-africa-69570.jpeg', 'Eucalyptus': 'https://images.pexels.com/photos/4587979/pexels-photo-4587979.jpeg', 'Teak': 'https://images.pexels.com/photos/1003865/pexels-photo-1003865.jpeg', 'Date Palm': 'https://images.pexels.com/photos/235525/pexels-photo-235525.jpeg', 'Banana': 'https://images.pexels.com/photos/131365/pexels-photo-131365.jpeg', 'Apple': 'https://images.pexels.com/photos/712021/pexels-photo-712021.jpeg' } # Dynamic sidebar content st.sidebar.subheader('Tree Images') selected_tree = st.sidebar.selectbox('Select a tree to view image:', df['Tree'].unique()) if selected_tree in tree_images: image_url = tree_images[selected_tree] st.sidebar.image(image_url, caption=selected_tree, use_column_width=True) # Add a tooltip or additional info for each tree st.sidebar.markdown(f"*Additional Info*: The {selected_tree} tree is beneficial for {df[df['Tree'] == selected_tree]['Use'].values[0]} purposes and thrives in {df[df['Tree'] == selected_tree]['Climate'].values[0]} climates.") else: # Handle the case where there is no image URL st.sidebar.write("No image available for the selected tree.")