Skip to content

Latest commit

Β 

History

History
466 lines (347 loc) Β· 8.16 KB

File metadata and controls

466 lines (347 loc) Β· 8.16 KB

ANTIGRAVITY API Documentation

Complete API reference for the ANTIGRAVITY pneumonia detection system.

πŸ“– Overview

The ANTIGRAVITY API is a RESTful service for pneumonia detection from chest X-ray images.

Base URL: http://localhost:8000

πŸ”— Endpoints

1. Health Check

Check if the server is running.

GET /health

Response:

{
  "status": "running",
  "service": "ANTIGRAVITY API"
}

Status Code: 200 OK


2. Root Information

Get basic API information.

GET /

Response:

{
  "name": "ANTIGRAVITY",
  "tagline": "AI-powered chest X-ray screening for pneumonia detection",
  "version": "1.0.0",
  "endpoints": {
    "health": "/health",
    "predict": "/api/predict",
    "docs": "/docs"
  }
}

Status Code: 200 OK


3. Predict Pneumonia

Submit chest X-ray images for pneumonia prediction.

POST /api/predict

Headers:

Content-Type: multipart/form-data

Request Body:

files: [file1, file2, ...]  (List of image files)

Supported Formats: JPG, JPEG, PNG

Constraints:

  • Maximum 10 files per request
  • Maximum 10 MB per file
  • Recommended: Clear chest X-ray images

Example Request (curl):

curl -X POST "http://localhost:8000/api/predict" \
  -F "files=@xray1.png" \
  -F "files=@xray2.png"

Example Response:

[
  {
    "filename": "xray1.png",
    "prediction": "Pneumonia",
    "confidence": 96.4,
    "probability_normal": 0.036,
    "probability_pneumonia": 0.964,
    "status": "success"
  },
  {
    "filename": "xray2.png",
    "prediction": "Normal",
    "confidence": 91.2,
    "probability_normal": 0.912,
    "probability_pneumonia": 0.088,
    "status": "success"
  }
]

Status Code: 200 OK

Error Response (400):

{
  "detail": "Invalid file type: document.pdf. Allowed: JPG, JPEG, PNG"
}

Error Response (413):

{
  "detail": "File too large: image.png. Maximum size: 10 MB"
}

Error Response (422):

{
  "detail": "Too many files. Maximum 10 files allowed."
}

Error Response (500):

{
  "error": "Internal server error",
  "details": "Error message here"
}

4. Prediction Configuration

Get prediction system configuration and constraints.

GET /api/predict/config

Response:

{
  "max_files": 10,
  "allowed_formats": ["jpg", "jpeg", "png"],
  "max_file_size_mb": 10,
  "predictions": {
    "classes": ["Normal", "Pneumonia"],
    "output_format": "confidence percentage (0-100)"
  },
  "preprocessing": {
    "image_width": 224,
    "image_height": 224,
    "channels": 1,
    "note": "Configure preprocessing parameters in utils/preprocess.py"
  }
}

Status Code: 200 OK


πŸ“Š Response Format

Prediction Object

Each prediction in the response contains:

Field Type Description
filename string Original uploaded filename
prediction string Prediction result: "Normal" or "Pneumonia"
confidence number Confidence percentage (0-100)
probability_normal number Probability of normal (0-1)
probability_pneumonia number Probability of pneumonia (0-1)
status string Status: "success" or "error"

Example Prediction

{
  "filename": "chest_xray_001.png",
  "prediction": "Pneumonia",
  "confidence": 96.4,
  "probability_normal": 0.036,
  "probability_pneumonia": 0.964,
  "status": "success"
}

⚠️ Error Handling

Error Status Codes

Status Meaning
200 Success
400 Bad Request (invalid input)
413 Payload Too Large
422 Validation Error
500 Internal Server Error

Common Errors

No Files Provided

{
  "detail": "No files provided"
}

Invalid File Type

{
  "detail": "Invalid file type: document.pdf. Allowed: JPG, JPEG, PNG"
}

File Too Large

{
  "detail": "File too large: image.png. Maximum size: 10 MB"
}

Too Many Files

{
  "detail": "Too many files. Maximum 10 files allowed."
}

Image Preprocessing Failed

{
  "detail": "Image preprocessing failed: Invalid image format"
}

Model Inference Failed

{
  "detail": "Prediction failed: Model not loaded"
}

πŸ” Security

Rate Limiting

Currently not implemented. Recommended for production.

CORS

All origins allowed. Configuration in main.py:

allow_origins=["*"],  # Restrict in production

File Validation

  • File type checking
  • File size validation
  • File count validation
  • Filename sanitization

πŸ“± Integration Examples

Python (requests)

import requests

files = [('files', open('xray1.png', 'rb')), 
         ('files', open('xray2.png', 'rb'))]

response = requests.post('http://localhost:8000/api/predict', files=files)
predictions = response.json()

for pred in predictions:
    print(f"{pred['filename']}: {pred['prediction']} ({pred['confidence']}%)")

JavaScript (fetch)

const formData = new FormData();
formData.append('files', file1);
formData.append('files', file2);

const response = await fetch('http://localhost:8000/api/predict', {
  method: 'POST',
  body: formData
});

const predictions = await response.json();
predictions.forEach(pred => {
  console.log(`${pred.filename}: ${pred.prediction} (${pred.confidence}%)`);
});

cURL

# Single file
curl -X POST "http://localhost:8000/api/predict" \
  -F "files=@xray1.png"

# Multiple files
curl -X POST "http://localhost:8000/api/predict" \
  -F "files=@xray1.png" \
  -F "files=@xray2.png" \
  -F "files=@xray3.png"

React/TypeScript

const submitPrediction = async (files: File[]) => {
  const formData = new FormData();
  files.forEach(file => formData.append('files', file));

  const response = await fetch('http://localhost:8000/api/predict', {
    method: 'POST',
    body: formData,
  });

  if (!response.ok) {
    throw new Error('Prediction failed');
  }

  return response.json();
};

πŸ§ͺ Testing

Test with Swagger UI

Visit: http://localhost:8000/docs

Test with ReDoc

Visit: http://localhost:8000/redoc

Command Line Test

# Test health
curl http://localhost:8000/health

# Test with sample image
curl -X POST "http://localhost:8000/api/predict" \
  -F "files=@sample_xray.png" | python -m json.tool

πŸ“Š Performance

Typical Response Times

  • Single image: 1-3 seconds
  • 5 images: 2-5 seconds
  • 10 images: 3-8 seconds

(Varies based on your model and hardware)

Optimization Tips

  1. Process maximum images in batch (10)
  2. Avoid sending 1-2 images repeatedly
  3. Use appropriate image quality
  4. Ensure sufficient server resources

πŸ”„ Versioning

Current Version: 1.0.0

Future versions may include:

  • Rate limiting
  • Authentication
  • Async processing
  • Results caching
  • Confidence thresholds
  • Region of interest analysis

⚠️ Medical Disclaimer

IMPORTANT: This API returns AI predictions that must be:

  • Used only as a screening aid
  • Reviewed by qualified healthcare professionals
  • Never used as sole diagnostic tool
  • Documented in patient records

Results are not a substitute for professional medical diagnosis.


πŸ“ž Support

For API issues or questions:

  1. Check error message details
  2. Review this documentation
  3. Check server logs
  4. Verify model is properly loaded

πŸš€ Advanced Usage

Batch Processing Script

import requests
import os
from pathlib import Path

def predict_directory(image_dir, output_file='results.json'):
    """Predict all images in a directory"""
    images = list(Path(image_dir).glob('*.png')) + \
             list(Path(image_dir).glob('*.jpg'))
    
    for i in range(0, len(images), 10):
        batch = images[i:i+10]
        files = [('files', open(img, 'rb')) for img in batch]
        
        response = requests.post('http://localhost:8000/api/predict', 
                                files=files)
        predictions = response.json()
        
        # Process predictions...
        for pred in predictions:
            print(f"{pred['filename']}: {pred['prediction']}")

Last Updated: 2024 API Version: 1.0.0