# ๐Ÿšœ Smart Farm Photo Keyword Tagging AI - API Documentation ## ๐ŸŒ Web UI & API Overview The Smart Farm AI system provides both a **web interface** and **REST API** for agricultural photo keyword generation. ### ๐Ÿš€ Quick Start ```bash # Start the web UI and API server python3 start_ui.py # Or manually start with uvicorn uvicorn src.api.main:app --host 0.0.0.0 --port 8000 ``` **Access Points:** - **Web UI**: http://localhost:8000 - **API Docs**: http://localhost:8000/docs (Swagger) - **Alternative Docs**: http://localhost:8000/redoc - **System Status**: http://localhost:8000/status ## ๐Ÿ“‹ API Endpoints ### 1. System Status **GET** `/status` Get current system status and capabilities. **Response:** ```json { "status": "Operational", "model_loaded": true, "version": "1.0.0", "capabilities": [ "Agricultural keyword generation", "Image title creation", "Quality validation", "Batch processing", "Agricultural distinctions (farmer vs rancher)", "Location extraction", "Performance metrics" ] } ``` ### 2. Single Image Analysis **POST** `/analyze/single` Analyze a single agricultural image for keywords and title. **Request:** - **Content-Type**: `multipart/form-data` - **Body**: Image file (JPG, PNG, etc.) **Response:** ```json { "filename": "farm_photo.jpg", "keywords": ["farmer", "corn", "field", "agriculture", "tractor"], "title": "Agricultural scene: Farmer working in corn field", "quality_score": 73.3, "processing_time": 2.5, "caption": "a farmer working in a corn field with a tractor" } ``` **cURL Example:** ```bash curl -X POST "http://localhost:8000/analyze/single" \ -H "accept: application/json" \ -H "Content-Type: multipart/form-data" \ -F "file=@farm_photo.jpg" ``` ### 3. Batch Image Analysis **POST** `/analyze/batch` Analyze multiple agricultural images in a single request. **Request:** - **Content-Type**: `multipart/form-data` - **Body**: Multiple image files **Response:** ```json { "total_images": 5, "successful": 5, "failed": 0, "results": [ { "filename": "corn_field.jpg", "keywords": ["corn", "field", "agriculture", "farming"], "title": "Agricultural scene: Corn field at sunset", "quality_score": 80.0, "processing_time": 2.1, "caption": "a corn field at sunset" } ], "average_quality": 75.2, "total_processing_time": 12.5 } ``` **cURL Example:** ```bash curl -X POST "http://localhost:8000/analyze/batch" \ -H "accept: application/json" \ -H "Content-Type: multipart/form-data" \ -F "files=@photo1.jpg" \ -F "files=@photo2.jpg" \ -F "files=@photo3.jpg" ``` ### 4. Demo with Sample Images **GET** `/demo` Run demonstration using existing sample agricultural images. **Response:** ```json { "total_images": 7, "successful": 7, "failed": 0, "results": [ { "filename": "agric-field8.png", "keywords": ["corn", "field", "agriculture", "farming", "rural"], "title": "Agricultural scene: A corn field with the sun setting", "quality_score": 73.3, "processing_time": 3.2, "caption": "a corn field with the sun setting in the background" } ], "average_quality": 65.2, "total_processing_time": 18.7 } ``` ## ๐ŸŽฏ Quality Scoring The system provides quality scores for generated keywords: | Score Range | Quality Level | Description | |-------------|---------------|-------------| | 80-100 | **Excellent** | High agricultural relevance, specific terms | | 60-79 | **Good** | Relevant agricultural content, some generic terms | | 40-59 | **Fair** | Basic agricultural recognition, needs improvement | | 0-39 | **Poor** | Limited agricultural context, mostly generic | ## ๐Ÿ”ง Agricultural Distinctions The AI system automatically applies agricultural distinctions: ### Farmer vs Rancher Logic - **Farmer**: Detected when crops, grains, or cultivation mentioned - **Rancher**: Detected when cattle, livestock, or grazing mentioned - **Dairy Farmer**: Detected when milk, dairy, or Holstein mentioned - **Chicken Farmer**: Detected when poultry, chickens, or eggs mentioned ### Gender Identification - Combines gender detection with agricultural roles - Examples: "male farmer", "female rancher" ## ๐Ÿ“Š Performance Metrics **Current System Performance:** - **Processing Speed**: ~3 seconds per image - **Batch Capability**: 500+ images efficiently - **Quality Score**: 65.2/100 average - **Scalability**: 1000 images in ~50 minutes ## ๐ŸŒ Web UI Features ### Interactive Interface - **Drag & Drop**: Upload multiple images easily - **Real-time Processing**: See results as they're generated - **Quality Visualization**: Color-coded quality scores - **Demo Mode**: Test with sample agricultural images ### Visual Elements - **Green Theme**: Agricultural color scheme - **Responsive Design**: Works on desktop and mobile - **Progress Indicators**: Loading states and progress bars - **Error Handling**: Clear error messages and recovery ## ๐Ÿ”’ Error Handling ### Common Error Responses **400 Bad Request** ```json { "detail": "Invalid image format. Please upload JPG, PNG, or similar." } ``` **500 Internal Server Error** ```json { "detail": "AI system not initialized" } ``` **404 Not Found** ```json { "detail": "Sample images not found" } ``` ## ๐Ÿงช Testing the API ### Python Example ```python import requests # Test system status response = requests.get("http://localhost:8000/status") print(response.json()) # Analyze single image with open("farm_photo.jpg", "rb") as f: files = {"file": f} response = requests.post("http://localhost:8000/analyze/single", files=files) print(response.json()) # Run demo response = requests.get("http://localhost:8000/demo") print(response.json()) ``` ### JavaScript Example ```javascript // Analyze image with fetch API const formData = new FormData(); formData.append('file', imageFile); fetch('http://localhost:8000/analyze/single', { method: 'POST', body: formData }) .then(response => response.json()) .then(data => console.log(data)); ``` ## ๐Ÿš€ Production Deployment ### Docker Deployment ```dockerfile FROM python:3.10-slim WORKDIR /app COPY requirements.txt . RUN pip install -r requirements.txt COPY . . EXPOSE 8000 CMD ["uvicorn", "src.api.main:app", "--host", "0.0.0.0", "--port", "8000"] ``` ### Environment Variables ```bash # Optional configuration export MODEL_PATH="/path/to/custom/model" # Use custom trained model export MAX_UPLOAD_SIZE="10MB" # Limit upload size export BATCH_SIZE_LIMIT="50" # Limit batch processing ``` ## ๐Ÿ“ˆ Integration Examples ### Stock Photo Platform Integration ```python # Example integration for stock photo workflow import requests def process_new_photos(photo_directory): files = [] for photo in os.listdir(photo_directory): files.append(('files', open(os.path.join(photo_directory, photo), 'rb'))) response = requests.post("http://localhost:8000/analyze/batch", files=files) results = response.json() # Update database with AI-generated keywords for result in results['results']: update_photo_keywords(result['filename'], result['keywords']) ``` ### Quality Control Workflow ```python # Filter high-quality results def filter_high_quality_results(api_response): high_quality = [] for result in api_response['results']: if result['quality_score'] >= 70: high_quality.append(result) return high_quality ``` ## ๐ŸŽฏ Next Steps 1. **Start the UI**: `python3 start_ui.py` 2. **Test with Demo**: Click "Run Demo" button 3. **Upload Your Photos**: Drag and drop agricultural images 4. **Integrate API**: Use endpoints in your applications 5. **Scale Up**: Process your 30,000 photo dataset --- **Ready to demonstrate the system to your team!** ๐Ÿšœโœจ