Spaces:
Sleeping
Sleeping
Merge remote Space changes into drag-and-drop branch
Browse files
README.md
CHANGED
|
@@ -13,14 +13,22 @@ pinned: false
|
|
| 13 |
|
| 14 |
# Guarden π±π‘οΈ
|
| 15 |
|
| 16 |
-
An AI-powered plant care
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 17 |
|
| 18 |
### Team :
|
| 19 |
[AntoineR974](https://huggingface.co/AntoineR974) and [Crocolil](https://huggingface.co/Crocolil)
|
| 20 |
|
| 21 |
## Description
|
| 22 |
|
| 23 |
-
|
| 24 |
|
| 25 |
The application combines:
|
| 26 |
|
|
@@ -35,6 +43,7 @@ The application combines:
|
|
| 35 |
* πΏ Virtual garden management
|
| 36 |
* π€ 7-day weather forecast
|
| 37 |
* π§ Daily watering recommendations
|
|
|
|
| 38 |
* π Plant care information dashboard
|
| 39 |
|
| 40 |
## Demo Video
|
|
|
|
| 13 |
|
| 14 |
# Guarden π±π‘οΈ
|
| 15 |
|
| 16 |
+
An AI-powered plant care companion that identifies plants from photos, helps users organize and monitor their virtual garden, and provides personalized care recommendations based on each plant's specific needs and local weather conditions.
|
| 17 |
+
|
| 18 |
+
## Context
|
| 19 |
+
|
| 20 |
+
This project was originally made for my father, a passionate botany enthusiast who cares for a wide variety of plants. As his collection grew, keeping track of each plantβs specific needsβespecially watering schedulesβbecame increasingly challenging.
|
| 21 |
+
|
| 22 |
+
Guarden was created to simplify plant care by bringing all of a user's plants together in a single, intuitive application. The app helps users identify their plants, organize them in a virtual garden, access species-specific information, and receive personalized watering recommendations based on local weather conditions.
|
| 23 |
+
|
| 24 |
+
Our goal is to make plant care more accessible, accurate, and enjoyable for both experienced gardeners and beginners alike.
|
| 25 |
|
| 26 |
### Team :
|
| 27 |
[AntoineR974](https://huggingface.co/AntoineR974) and [Crocolil](https://huggingface.co/Crocolil)
|
| 28 |
|
| 29 |
## Description
|
| 30 |
|
| 31 |
+
Guarden helps users build and manage a virtual garden. Simply upload a picture of a plant, and the application identifies the species using a computer vision model trained on plant datasets. Once identified, the plant is added to the user's virtual garden, where they can view plant information, care requirements, and daily watering recommendations based on the weather forecast.
|
| 32 |
|
| 33 |
The application combines:
|
| 34 |
|
|
|
|
| 43 |
* πΏ Virtual garden management
|
| 44 |
* π€ 7-day weather forecast
|
| 45 |
* π§ Daily watering recommendations
|
| 46 |
+
* π€πΏAI Plant care assistant
|
| 47 |
* π Plant care information dashboard
|
| 48 |
|
| 49 |
## Demo Video
|
app.py
CHANGED
|
@@ -34,7 +34,6 @@ from modules import advisor
|
|
| 34 |
from utils.geo import city_to_coordinates
|
| 35 |
|
| 36 |
# ββ Config βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 37 |
-
WEATHER_API_KEY = os.getenv("WEATHER_API_KEY", "") # OpenWeatherMap key
|
| 38 |
WEATHER_CITY = os.getenv("WEATHER_CITY", "Marseille")
|
| 39 |
DATA_ROOT = Path("user_data") # per-user gardens & photos live here
|
| 40 |
DATA_ROOT.mkdir(exist_ok=True)
|
|
@@ -159,7 +158,7 @@ def load_garden(user_id: str) -> list[dict]:
|
|
| 159 |
"nickname": "Example Fig Tree",
|
| 160 |
"photo": "plant_photos\\Example_Fig_Tree.jpg",
|
| 161 |
"genus": "Ficus",
|
| 162 |
-
"confidence":
|
| 163 |
"added": datetime.date.today().isoformat(),
|
| 164 |
"last_watered": None,
|
| 165 |
"rained": False,
|
|
@@ -167,7 +166,7 @@ def load_garden(user_id: str) -> list[dict]:
|
|
| 167 |
"sunlight": "full sunlight",
|
| 168 |
"soil": "sandy",
|
| 169 |
"fertilization_type": "Balanced",
|
| 170 |
-
"notes": "
|
| 171 |
}]
|
| 172 |
|
| 173 |
garden_file = _garden_file(user_id)
|
|
@@ -482,7 +481,7 @@ with gr.Blocks(title="πΏ Plant Watering Planner") as app:
|
|
| 482 |
|
| 483 |
# ββ Header bar βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 484 |
with gr.Row(elem_id="header-bar"):
|
| 485 |
-
gr.Markdown("# π± Guarden\nKeep every plant happy
|
| 486 |
add_plant_btn = gr.Button("β Add a plant", elem_id="add-plant-fab", variant="primary")
|
| 487 |
|
| 488 |
# ββ Add-plant drawer (slide-in overlay, hidden until the FAB is clicked) ββ
|
|
@@ -529,7 +528,7 @@ with gr.Blocks(title="πΏ Plant Watering Planner") as app:
|
|
| 529 |
|
| 530 |
# Ask-the-assistant panel β hidden until a plant is selected
|
| 531 |
with gr.Group(visible=False) as advisor_panel:
|
| 532 |
-
advisor_question = gr.Textbox(label="Ask about this plant", placeholder="e.g. Why are the leaves turning yellow?")
|
| 533 |
advisor_ask_btn = gr.Button("π€ Ask the assistant")
|
| 534 |
advisor_answer = gr.Markdown()
|
| 535 |
|
|
|
|
| 34 |
from utils.geo import city_to_coordinates
|
| 35 |
|
| 36 |
# ββ Config βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
|
|
| 37 |
WEATHER_CITY = os.getenv("WEATHER_CITY", "Marseille")
|
| 38 |
DATA_ROOT = Path("user_data") # per-user gardens & photos live here
|
| 39 |
DATA_ROOT.mkdir(exist_ok=True)
|
|
|
|
| 158 |
"nickname": "Example Fig Tree",
|
| 159 |
"photo": "plant_photos\\Example_Fig_Tree.jpg",
|
| 160 |
"genus": "Ficus",
|
| 161 |
+
"confidence": ,
|
| 162 |
"added": datetime.date.today().isoformat(),
|
| 163 |
"last_watered": None,
|
| 164 |
"rained": False,
|
|
|
|
| 166 |
"sunlight": "full sunlight",
|
| 167 |
"soil": "sandy",
|
| 168 |
"fertilization_type": "Balanced",
|
| 169 |
+
"notes": ""
|
| 170 |
}]
|
| 171 |
|
| 172 |
garden_file = _garden_file(user_id)
|
|
|
|
| 481 |
|
| 482 |
# ββ Header bar βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 483 |
with gr.Row(elem_id="header-bar"):
|
| 484 |
+
gr.Markdown("# π± Guarden\nKeep every plant happy : your garden, watered on time.")
|
| 485 |
add_plant_btn = gr.Button("β Add a plant", elem_id="add-plant-fab", variant="primary")
|
| 486 |
|
| 487 |
# ββ Add-plant drawer (slide-in overlay, hidden until the FAB is clicked) ββ
|
|
|
|
| 528 |
|
| 529 |
# Ask-the-assistant panel β hidden until a plant is selected
|
| 530 |
with gr.Group(visible=False) as advisor_panel:
|
| 531 |
+
advisor_question = gr.Textbox(label="Ask about this plant π§βπΎ", placeholder="e.g. Why are the leaves turning yellow?")
|
| 532 |
advisor_ask_btn = gr.Button("π€ Ask the assistant")
|
| 533 |
advisor_answer = gr.Markdown()
|
| 534 |
|