plant / app.py
razanalsulami's picture
Update app.py
1c0714f verified
# Import required libraries
import requests
from PIL import Image
from io import BytesIO
from transformers import pipeline
import gradio as gr
import torch
from gtts import gTTS
import IPython.display as ipd
device = "cuda" if torch.cuda.is_available() else "cpu"
translator_ar_to_en = pipeline("translation_ar_to_en", model="Helsinki-NLP/opus-mt-ar-en", device=0 if device == "cuda" else -1)
translator_en_to_ar = pipeline("translation_en_to_arabic", model="Helsinki-NLP/opus-mt-en-ar", device=0 if device == "cuda" else -1)
# Load the plant identification pipeline from Hugging Face
pipe = pipeline("image-classification", model="umutbozdag/plant-identity")
plant_care_dict = {
"Aloe Vera": "Water every 2-3 weeks, allowing the soil to dry out between waterings. Place in bright, indirect sunlight.",
"Bamboo": "Keep the soil moist but not soggy. Place in indirect sunlight, and avoid direct exposure to sunlight.",
"Basil": "Water regularly to keep the soil moist. Place in full sun for at least 6 hours a day.",
"Boston fern": "Water regularly to maintain humidity. Mist the leaves often and keep in indirect sunlight.",
"English ivy": "Water when the top inch of soil is dry. Place in moderate sunlight and maintain humidity.",
"Ficus": "Water when the top inch of soil is dry. Place in bright, indirect light, and rotate the plant occasionally.",
"Fiddle leaf fig": "Water when the top inch of soil is dry. Place in bright, indirect light, and avoid drafts.",
"Lavender": "Water when the soil is dry to the touch. Place in full sun and ensure good drainage.",
"Mint": "Water regularly to keep the soil moist. Place in partial shade, and pinch back to encourage bushiness.",
"Monstera deliciosa": "Water when the top inch of soil is dry. Place in indirect sunlight and provide support for climbing.",
"Orchids": "Water every 1-2 weeks. Provide humidity and place in indirect light.",
"Peace Lily": "Water when the top inch of soil is dry. Place in low light and keep out of direct sunlight.",
"Philodendron": "Water when the top inch of soil is dry. Place in indirect sunlight, and prune as needed.",
"Pothos": "Water when the top inch of soil is dry. Tolerates low light but grows best in bright, indirect light.",
"Rosemary": "Water when the top inch of soil is dry. Place in full sun and ensure good drainage.",
"Rubber plant": "Water when the top inch of soil is dry. Place in bright, indirect light, and dust leaves regularly.",
"Snake plant": "Water every 2-6 weeks, depending on light conditions. Place in low to bright indirect light.",
"Spider plant": "Water when the top inch of soil is dry. Place in bright, indirect light, and avoid soggy soil.",
"Succulents": "Water every 1-3 weeks, allowing the soil to dry completely between waterings. Place in bright sunlight.",
"ZZ plant": "Water when the soil is completely dry, usually every 2-3 weeks. Tolerates low light conditions.",
"Jasmine": "Water when the top inch of soil is dry. Place in full sun and prune regularly to encourage growth.",
"Rose": "Water regularly, keeping the soil moist but not soggy. Place in full sun and fertilize during the growing season.",
"Chamomile": "Water when the top inch of soil is dry. Place in full sun, and harvest flowers regularly.",
"Marigold": "Water regularly, especially in dry conditions. Place in full sun and deadhead flowers to promote blooming.",
"Daffodil": "Water when the soil is dry to the touch. Place in full sun and avoid overwatering.",
"Geranium": "Water when the top inch of soil is dry. Place in full sun and pinch back to promote bushiness.",
"Thyme": "Water when the soil is dry. Place in full sun and ensure good drainage.",
"Coriander": "Water regularly to keep the soil moist. Place in full sun and harvest leaves often.",
"Lemon Balm": "Water when the soil is dry. Place in full sun and prune regularly to encourage growth.",
"Sage": "Water when the soil is dry. Place in full sun and provide well-drained soil.",
"Peppermint": "Water regularly to keep the soil moist. Place in partial shade and pinch back to promote bushiness.",
"Bougainvillea": "Water when the soil is dry. Place in full sun and prune regularly to encourage flowering.",
"Desert Rose": "Water when the soil is dry. Place in full sun and ensure good drainage.",
"Palm Tree": "Water when the top inch of soil is dry. Place in bright sunlight and provide adequate space for growth.",
"Oleander": "Water when the top inch of soil is dry. Place in full sun and fertilize regularly.",
"Cactus": "Water every few weeks, allowing the soil to dry completely between waterings. Place in bright sunlight."
}
# Plant facts dictionary
plant_facts_dict = {
"Aloe Vera": "Aloe Vera is known for its soothing properties and is commonly used in skincare products. It thrives in bright, indirect sunlight.",
"Bamboo": "Bamboo is one of the fastest-growing plants in the world. It prefers moist soil and indirect sunlight.",
"Basil": "Basil is a fragrant herb that is often used in cooking. It needs plenty of sunlight and regular watering to thrive.",
"Boston fern": "Boston ferns are popular houseplants known for their lush, green fronds. They prefer high humidity and indirect sunlight.",
"English ivy": "English ivy is a climbing plant that can adapt to various conditions. It likes well-drained soil and moderate sunlight.",
"Ficus": "Ficus plants are versatile and can be grown indoors or outdoors. They prefer bright, indirect light and moderate watering.",
"Fiddle leaf fig": "Fiddle leaf figs are known for their large, glossy leaves. They thrive in bright, indirect light and require regular watering.",
"Lavender": "Lavender is a fragrant herb often used in aromatherapy. It prefers full sun and well-drained soil.",
"Mint": "Mint is a fast-growing herb that can easily spread. It prefers partial shade and moist soil.",
"Monstera deliciosa": "Monstera is known for its unique leaf holes. It thrives in indirect sunlight and requires regular watering.",
"Orchids": "Orchids are exotic flowers that require special care. They prefer indirect light and humidity.",
"Peace Lily": "Peace Lilies are known for their elegant white flowers. They thrive in low light and require regular watering.",
"Philodendron": "Philodendrons are popular houseplants with heart-shaped leaves. They prefer indirect sunlight and moderate watering.",
"Pothos": "Pothos are resilient plants that can survive in low light. They prefer to dry out between waterings.",
"Rosemary": "Rosemary is an aromatic herb that is commonly used in cooking. It prefers full sun and well-drained soil.",
"Rubber plant": "Rubber plants are known for their large, glossy leaves. They thrive in bright, indirect light and moderate watering.",
"Snake plant": "Snake plants are hardy and can tolerate low light. They require infrequent watering.",
"Spider plant": "Spider plants are known for their air-purifying properties. They prefer bright, indirect light and regular watering.",
"Succulents": "Succulents are drought-tolerant plants that store water in their leaves. They prefer bright sunlight and well-drained soil.",
"ZZ plant": "ZZ plants are known for their glossy leaves and resilience. They thrive in low light and require infrequent watering.",
"Jasmine": "Jasmine is a fragrant flower often used in perfumes. It prefers full sun and well-drained soil.",
"Rose": "Roses are popular garden plants known for their beautiful flowers. They prefer full sun and regular watering.",
"Chamomile": "Chamomile is an aromatic herb used in teas. It prefers full sun and well-drained soil.",
"Marigold": "Marigolds are bright flowers that repel pests. They thrive in full sun and require regular watering.",
"Daffodil": "Daffodils are spring flowers known for their trumpet shape. They prefer well-drained soil and full sun.",
"Geranium": "Geraniums are popular bedding plants. They prefer full sun and regular watering.",
"Thyme": "Thyme is an aromatic herb commonly used in cooking. It prefers full sun and well-drained soil.",
"Coriander": "Coriander is an herb known for its distinct flavor. It prefers full sun and well-drained soil.",
"Lemon Balm": "Lemon balm is a fragrant herb often used in teas. It prefers full sun and regular watering.",
"Sage": "Sage is a hardy herb commonly used in cooking. It prefers full sun and well-drained soil.",
"Peppermint": "Peppermint is a popular herb known for its refreshing flavor. It prefers partial shade and moist soil.",
"Bougainvillea": "Bougainvillea is a colorful flowering plant. It prefers full sun and well-drained soil.",
"Desert Rose": "Desert roses are succulent plants known for their beautiful flowers. They prefer full sun and well-drained soil.",
"Palm Tree": "Palm trees are iconic tropical plants. They prefer bright sunlight and well-drained soil.",
"Oleander": "Oleander is a hardy shrub known for its flowers. It prefers full sun and well-drained soil.",
"Cactus": "Cacti are drought-resistant plants that thrive in dry conditions. They prefer bright sunlight and minimal watering."
}
plant_name_translations = {
"Aloe Vera": "Aloe Vera - صبار الألوفيرا",
"Bamboo": "Bamboo - الخيزران",
"Basil": "Basil - الريحان",
"Boston fern": "Boston Fern - سرخس بوسطن",
"English ivy": "English Ivy - اللبلاب الإنجليزي",
"Ficus": "Ficus - نبات الفيكس",
"Fiddle leaf fig": "Fiddle Leaf Fig - التين ورقي الكمان",
"Lavender": "Lavender - الخزامى",
"Mint": "Mint - النعناع",
"Monstera deliciosa": "Monstera Deliciosa - مونستيرا دليسيوسا",
"Orchids": "Orchids - الأوركيد",
"Peace Lily": "Peace Lily - زنبق السلام",
"Philodendron": "Philodendron - الفيلوديندرون",
"Pothos": "Pothos - البوتس",
"Rosemary": "Rosemary - إكليل الجبل",
"Rubber plant": "Rubber Plant - نبات المطاط",
"Snake plant": "Snake Plant - نبات الثعبان",
"Spider plant": "Spider Plant - نبات العنكبوت",
"Succulents": "Succulents - النباتات العصارية",
"ZZ plant": "ZZ Plant - نبات زيزي",
"Jasmine": "Jasmine - الياسمين",
"Rose": "Rose - الورد",
"Chamomile": "Chamomile - البابونج",
"Marigold": "Marigold - القطيفة",
"Daffodil": "Daffodil - النرجس",
"Geranium": "Geranium - إبرة الراعي",
"Thyme": "Thyme - الزعتر",
"Coriander": "Coriander - الكزبرة",
"Lemon Balm": "Lemon Balm - بلسم الليمون",
"Sage": "Sage - الميرمية",
"Peppermint": "Peppermint - النعناع الفلفلي",
"Bougainvillea": "Bougainvillea - الجهنمية",
"Desert Rose": "Desert Rose - وردة الصحراء",
"Palm Tree": "Palm Tree - النخيل",
"Oleander": "Oleander - دفلى",
"Cactus": "Cactus - الصبار"}
def classify_plant_image(image):
image.save('temp_image.jpg') # Save the image locally for pipeline processing
predictions = pipe('temp_image.jpg')
top_prediction = predictions[0] # Get the top prediction
return top_prediction['label']
def text_to_speech(instructions, language='en'):
tts = gTTS(text=instructions, lang=language)
tts.save('temp_audio.mp3') # Save the audio file
return 'temp_audio.mp3'
def process_image_input(image=None, language='english'):
plant_name = classify_plant_image(image) # Identify plant from image
# Debugging: Log the identified plant name
print(f"Identified Plant Name: {plant_name}")
# Get care instructions in English
care_instructions = plant_care_dict.get(plant_name, f"Care instructions are not available for '{plant_name}'.")
plant_fact = plant_facts_dict.get(plant_name, f"Facts are not available for '{plant_name}'.")
# Translate care instructions and facts to Arabic
if language == 'arabic':
care_instructions = translator_en_to_ar(care_instructions)[0]['translation_text']
plant_fact = translator_en_to_ar(plant_fact)[0]['translation_text']
plant_name = plant_name_translations.get(plant_name, plant_name) # Translate plant name to Arabic
# Generate audio for the facts
audio_file = text_to_speech(plant_fact, language='ar' if language == 'arabic' else 'en')
return plant_name, care_instructions, audio_file
# Main processing function for text input
def process_text_input(plant_name=None, language='english'):
if plant_name:
# Debugging: Log the requested plant name
print(f"Requested Plant Name: {plant_name}")
# Get care instructions in English
care_instructions = plant_care_dict.get(plant_name, f"Care instructions are not available for '{plant_name}'.")
plant_fact = plant_facts_dict.get(plant_name, f"Facts are not available for '{plant_name}'.")
# Translate care instructions and facts to Arabic
if language == 'arabic':
care_instructions = translator_en_to_ar(care_instructions)[0]['translation_text']
plant_fact = translator_en_to_ar(plant_fact)[0]['translation_text']
plant_name = plant_name_translations.get(plant_name, plant_name) # Translate plant name to Arabic
# Generate audio for the facts
audio_file = text_to_speech(plant_fact, language='ar' if language == 'arabic' else 'en')
return plant_name, care_instructions, audio_file
# Creating Gradio app with tabs
with gr.Blocks() as demo:
gr.Markdown("## Plant Identification and Care Instructions")
with gr.Tab("Image Input"):
gr.Interface(
fn=process_image_input,
inputs=[
gr.Image(type="pil", label="Upload a Plant Image"), # Image input
gr.Dropdown(choices=["english", "arabic"], label="Select Language", value="english") # Language selection
],
outputs=[
gr.Textbox(label="Identified Plant"),
gr.Textbox(label="Care Instructions"),
gr.Audio(label="Audio Fact") # Output audio file
],
title="Identify Plant from Image",
description="Upload an image of a plant to identify it and receive care instructions in your chosen language."
)
with gr.Tab("Text Input"):
gr.Interface(
fn=process_text_input,
inputs=[
gr.Textbox(label="Enter Plant Name"), # Text input
gr.Dropdown(choices=["english", "arabic"], label="Select Language", value="english") # Language selection
],
outputs=[
gr.Textbox(label="Identified Plant"),
gr.Textbox(label="Care Instructions"),
gr.Audio(label="Audio Fact") # Output audio file
],
title="Identify Plant by Name",
description="Enter the name of a plant to receive care instructions in your chosen language."
)
# Launch the Gradio app with Tabs
demo.launch()
if __name__ == "__main__":
app.run(host="0.0.0.0", port=7860)