| # Pathora Colposcopy API Documentation | |
| ## Overview | |
| FastAPI backend for Pathora Colposcopy Assistant with AI model inference and LLM capabilities. | |
| ## Base URL | |
| - Local: `http://localhost:8000` | |
| - Production: `https://huggingface.co/spaces/ManalifeAI/Pathora_Colposcopy_Assistant` | |
| --- | |
| ## Endpoints | |
| ### Health Check | |
| **GET** `/health` | |
| Check API health status and verify AI models and LLM availability. | |
| **Response:** | |
| ```json | |
| { | |
| "status": "healthy", | |
| "service": "Pathora Colposcopy API", | |
| "ai_models": { | |
| "acetowhite_model": "loaded", | |
| "cervix_model": "loaded" | |
| }, | |
| "llm": { | |
| "gemini_available": true, | |
| "api_key_configured": true | |
| } | |
| } | |
| ``` | |
| --- | |
| ## AI Model Endpoints | |
| ### 1. Acetowhite Contour Detection | |
| **POST** `/api/infer-aw-contour` | |
| Detect acetowhite lesions and generate contour overlays. | |
| **Parameters:** | |
| - `file` (UploadFile): Image file | |
| - `conf_threshold` (float, optional): Confidence threshold (0.0-1.0, default: 0.4) | |
| **Response:** | |
| ```json | |
| { | |
| "status": "success", | |
| "message": "Inference completed successfully", | |
| "result_image": "base64_encoded_image", | |
| "contours": [ | |
| { | |
| "points": [[x1, y1], [x2, y2], ...], | |
| "area": 1234.5, | |
| "confidence": 0.85 | |
| } | |
| ], | |
| "detections": 2, | |
| "confidence_threshold": 0.4 | |
| } | |
| ``` | |
| ### 2. Cervix Bounding Box Detection | |
| **POST** `/api/infer-cervix-bbox` | |
| Detect cervix location and return bounding boxes. | |
| **Parameters:** | |
| - `file` (UploadFile): Image file | |
| - `conf_threshold` (float, optional): Confidence threshold (0.0-1.0, default: 0.4) | |
| **Response:** | |
| ```json | |
| { | |
| "status": "success", | |
| "message": "Cervix bounding box detection completed", | |
| "result_image": "base64_encoded_image", | |
| "bounding_boxes": [ | |
| { | |
| "x1": 100, | |
| "y1": 150, | |
| "x2": 400, | |
| "y2": 450, | |
| "confidence": 0.92, | |
| "class": "cervix" | |
| } | |
| ], | |
| "detections": 1, | |
| "frame_width": 1920, | |
| "frame_height": 1080, | |
| "confidence_threshold": 0.4 | |
| } | |
| ``` | |
| ### 3. Batch Image Inference | |
| **POST** `/api/batch-infer` | |
| Process multiple images for acetowhite detection in one request. | |
| **Parameters:** | |
| - `files` (List[UploadFile]): Multiple image files | |
| - `conf_threshold` (float, optional): Confidence threshold (default: 0.4) | |
| **Response:** | |
| ```json | |
| { | |
| "status": "completed", | |
| "total_files": 3, | |
| "results": [ | |
| { | |
| "filename": "image1.jpg", | |
| "status": "success", | |
| "result_image": "base64...", | |
| "contours": [...], | |
| "detections": 2 | |
| } | |
| ] | |
| } | |
| ``` | |
| ### 4. Single Frame Analysis | |
| **POST** `/infer/image` | |
| Analyze single image for cervix quality assessment. | |
| **Parameters:** | |
| - `file` (UploadFile): Image file | |
| **Response:** | |
| ```json | |
| { | |
| "status": "Excellent", | |
| "quality_percent": 95, | |
| "cervix_detected": true, | |
| "focus_score": 0.89, | |
| "brightness_score": 0.92 | |
| } | |
| ``` | |
| ### 5. Video Frame Analysis | |
| **POST** `/infer/video` | |
| Process video frames for quality assessment. | |
| **Parameters:** | |
| - `file` (UploadFile): Video file | |
| **Response:** | |
| ```json | |
| { | |
| "total_frames": 150, | |
| "results": [ | |
| { | |
| "frame": 0, | |
| "status": "Excellent", | |
| "quality_percent": 95 | |
| } | |
| ] | |
| } | |
| ``` | |
| --- | |
| ## LLM Endpoints | |
| ### 6. Chat with AI Assistant | |
| **POST** `/api/chat` | |
| Conversational AI endpoint for colposcopy guidance. | |
| **Request Body:** | |
| ```json | |
| { | |
| "message": "What are the signs of high-grade lesions?", | |
| "history": [ | |
| { | |
| "role": "user", | |
| "text": "Hello" | |
| }, | |
| { | |
| "role": "bot", | |
| "text": "Hello! I'm Pathora AI..." | |
| } | |
| ], | |
| "system_prompt": "Optional custom system prompt" | |
| } | |
| ``` | |
| **Response:** | |
| ```json | |
| { | |
| "status": "success", | |
| "response": "High-grade lesions typically show...", | |
| "model": "gemini-1.5-flash" | |
| } | |
| ``` | |
| ### 7. Generate Colposcopy Report | |
| **POST** `/api/generate-report` | |
| Generate comprehensive colposcopy report based on patient data and findings. | |
| **Request Body:** | |
| ```json | |
| { | |
| "patient_data": { | |
| "age": 35, | |
| "gravida": 2, | |
| "para": 2, | |
| "lmp": "2024-02-01", | |
| "indication": "Abnormal Pap smear" | |
| }, | |
| "exam_findings": { | |
| "native": { | |
| "cervix_visible": true, | |
| "transformation_zone": "Type 1" | |
| }, | |
| "acetic_acid": { | |
| "acetowhite_lesions": true, | |
| "location": "6-9 o'clock" | |
| }, | |
| "green_filter": { | |
| "vascular_patterns": "Punctation" | |
| }, | |
| "lugol": { | |
| "iodine_uptake": "Partial" | |
| } | |
| }, | |
| "images": [], | |
| "system_prompt": "Optional custom prompt" | |
| } | |
| ``` | |
| **Response:** | |
| ```json | |
| { | |
| "status": "success", | |
| "report": "COLPOSCOPY REPORT\n\nCLINICAL SUMMARY:\n...", | |
| "model": "gemini-1.5-flash" | |
| } | |
| ``` | |
| --- | |
| ## Environment Variables | |
| Required for LLM functionality: | |
| ```bash | |
| GEMINI_API_KEY=your_api_key_here | |
| VITE_GEMINI_API_KEY=your_api_key_here # For frontend compatibility | |
| ``` | |
| Get your API key from: https://makersuite.google.com/app/apikey | |
| --- | |
| ## Error Responses | |
| All endpoints return standardized error responses: | |
| ```json | |
| { | |
| "detail": "Error message description" | |
| } | |
| ``` | |
| **Common HTTP Status Codes:** | |
| - `400`: Bad Request (invalid file, parameters) | |
| - `500`: Internal Server Error (AI model error, processing failure) | |
| - `503`: Service Unavailable (LLM not configured, API key missing) | |
| --- | |
| ## Model Information | |
| ### AI Models | |
| - **Acetowhite Detection**: YOLO-based segmentation model (`AW_yolo.pt`) | |
| - **Cervix Detection**: YOLO-based object detection model (`cervix_yolo.pt`) | |
| ### LLM Model | |
| - **Gemini 1.5 Flash**: Google's generative AI for chat and report generation | |
| - Temperature: 0.4 (balanced between creativity and consistency) | |
| - Max Output Tokens: 2048 | |
| --- | |
| ## Usage Examples | |
| ### Python | |
| ```python | |
| import requests | |
| # AI Model Inference | |
| with open('image.jpg', 'rb') as f: | |
| response = requests.post( | |
| 'http://localhost:8000/api/infer-aw-contour', | |
| files={'file': f}, | |
| data={'conf_threshold': 0.5} | |
| ) | |
| result = response.json() | |
| # Chat | |
| response = requests.post( | |
| 'http://localhost:8000/api/chat', | |
| json={ | |
| 'message': 'What is Reid colposcopic index?', | |
| 'history': [] | |
| } | |
| ) | |
| chat_result = response.json() | |
| ``` | |
| ### JavaScript/TypeScript | |
| ```typescript | |
| // AI Model Inference | |
| const formData = new FormData(); | |
| formData.append('file', imageFile); | |
| formData.append('conf_threshold', '0.5'); | |
| const response = await fetch('/api/infer-aw-contour', { | |
| method: 'POST', | |
| body: formData | |
| }); | |
| const result = await response.json(); | |
| // Chat | |
| const chatResponse = await fetch('/api/chat', { | |
| method: 'POST', | |
| headers: { 'Content-Type': 'application/json' }, | |
| body: JSON.stringify({ | |
| message: 'Explain transformation zone types', | |
| history: [] | |
| }) | |
| }); | |
| const chatResult = await chatResponse.json(); | |
| ``` | |
| --- | |
| ## Development | |
| ### Running Locally | |
| ```bash | |
| # Install dependencies | |
| cd backend | |
| pip install -r requirements.txt | |
| # Set environment variables | |
| export GEMINI_API_KEY=your_key | |
| # Run server | |
| uvicorn backend.app:app --reload --host 0.0.0.0 --port 8000 | |
| ``` | |
| ### Building with Docker | |
| ```bash | |
| docker build -t pathora-colpo . | |
| docker run -p 7860:7860 -e GEMINI_API_KEY=your_key pathora-colpo | |
| ``` | |