| # 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 |
| ``` |
|
|