Skip to main content

A Python package for processing medical X-ray images and AI-based diagnosis

Project description

AFG_Gumball Module Documentation

Overview

The AFG_Gumball module is a Python package designed for medical image processing and AI-assisted diagnosis, specifically for X-ray images. The module provides tools for X-ray image preprocessing, pathology detection, body part segmentation, and AI-assisted medical diagnosis using the Gemini AI backend. The module is divided into two submodules: xray_processing for image processing tasks and medical_ai for AI-based patient interaction and diagnosis functions.

Module Structure

project/
├── AFG_Gumball/
│ ├── __init__.py
│ ├── __init__.pyi
│ ├── xray_processing/
│ │ ├── __init__.py
│ │ ├── image_loader.py
│ │ ├── gradcam.py
│ │ ├── segmentation.py
│ │ ├── model_utils.py
│ │ └── enums.py
│ ├── medical_ai/
│ │ ├── __init__.py
│ │ ├── gemini_client.py
│ │ ├── patient_ai.py
│ │ ├── doctor_diagnostic_ai.py
│ │ ├── doctor_enhance_ai.py
│ │ └── xray_analysis_expert_ai.py
  • xray_processing: Handles X-ray image loading, preprocessing, pathology detection with Grad-CAM heatmaps, and body part segmentation.
  • medical_ai: Provides AI-based functions for patient interaction, medical record creation, diagnosis validation, and advanced X-ray image analysis using the Gemini AI API.

Installation

Requirements

  • Python 3.8 or higher
  • Required libraries:
pip install torch torchvision numpy matplotlib scikit-image pillow python-dotenv google-generativeai>=0.8.0 torchxrayvision
  • A valid Gemini API key stored in the .env file named GEMINI_API_KEY.

Setup

  1. Download or copy the AFG_Gumball module to your project directory.

  2. Make sure the directory structure matches the structure above.

  3. Create a .env file in the project root directory with the Gemini API key:

GEMINI_API_KEY=your_api_key_here
  1. Install the dependent libraries:
pip install -r requirements.txt

(Create a requirements.txt file with the above libraries if needed.) 5. Run the scripts in the package context to ensure relative imports work:

python -m project.your_script

Instructions

1. Submodule xray_processing

This submodule provides tools for X-ray image processing, including loading, pathology detection, Grad-CAM heatmap generation, and body part segmentation.

Main Components

  • Import:
from AFG_Gumball.xray_processing import load_xray_image, process_xray_image, compute_gradcam, get_body_part_segment, BodyPart
  • Functions:

  • load_xray_image(image_input: Union[str, bytes]) -> torch.Tensor: Load and preprocess X-ray images from file path or bytes data. Return tensor of size [1, 512, 512].

  • process_xray_image(img_path: str) -> Tuple[List[Tuple[str, float]], List[Dict[str, Any]]]: Process X-ray images to detect pathologies (probability > 0.5) and create Grad-CAM heatmaps. Returns a tuple containing a list of pathologies and a list of heatmap dictionaries.

  • compute_gradcam(model: torch.nn.Module, img_tensor: torch.Tensor, target_class_idx: int) -> np.ndarray: Generates a Grad-CAM heatmap for a given pathology. Returns a combined image array.

  • get_body_part_segment(image: torch.Tensor, part: BodyPart) -> torch.Tensor: Segments a given body part from an X-ray image using the PSPNet model. Returns a tensor of size [512, 512].

  • Enum:

  • BodyPart: Enum for body parts (e.g. LEFT_LUNG, HEART, SPINE).

Example

from AFG_Gumball.xray_processing import load_xray_image, process_xray_image, get_body_part_segment, BodyPart

# Load and preprocess X-ray images
image_tensor = load_xray_image("path/to/xray.jpg")

# Process images to detect pathologies
pathologies, gradcam_images = process_xray_image("path/to/xray.jpg")
for pathology, prob in pathologies:
print(f"Pathology: {pathology}, Probability: {prob:.2f}")

# Heart segmentation
heart_segment = get_body_part_segment(image_tensor, BodyPart.HEART)
print(heart_segment.shape) # torch.Size([512, 512])

2. Submodule medical_ai

This submodule provides AI-based patient diagnostic and interaction tools, using the Gemini AI API for natural language processing and image analysis.

Main Components

  • Import:
from AFG_Gumball.medical_ai import GeminiAI, PatientAI, DoctorDiagnosticAI, DoctorEnhanceAI, XrayAnalysisExpertAI
  • Classes:
  • GeminiAI: Manages interactions with the Gemini AI API, including file uploads and content creation.
  • PatientAI: Provides patient-friendly answers and diagnoses based on X-rays and symptoms.
  • DoctorDiagnosticAI: Generates medical records, treatment suggestions, and inferences from symptoms for professional purposes.
  • DoctorEnhanceAI: Improves medical records and validates diagnoses.
  • XrayAnalysisExpertAI: Analyzes original X-ray images and symptoms, returning JSON results with diagnosis and abnormal areas.

Example: Load and analyze X-ray images

from AFG_Gumball.medical_ai import PatientAI, XrayAnalysisExpertAI

# Load X-ray images
image_path = "path/to/xray.jpg"

# Patient-friendly diagnosis
patient_ai = PatientAI()
with open(image_path, "rb") as f:
image_bytes = f.read()
diagnosis, heatmaps = patient_ai.diagnose_images(
image_bytes_list=[image_bytes],
symptoms="Prolonged cough",
include_symptoms=True,
include_xray_image=True
)
print(f"Diagnosis: {diagnosis}")

# In-depth analysis
expert_ai = XrayAnalysisExpertAI()
result = expert_ai.analyze_xray(
image_paths=[image_path],
symptoms="Prolonged cough"
)
print(f"Analysis result: {result}")

Note when upload image

  • Image format: X-ray images must be in JPEG format.
  • How ​​to upload images:
  • For PatientAI.diagnose_images:
with open("path/to/xray.jpg", "rb") as f:
image_bytes = f.read()

The image_bytes data is passed in as a list ([image_bytes]).

  • For DoctorDiagnosticAI.create_medical_record and XrayAnalysisExpertAI.analyze_xray:
image_paths = ["path/to/xray.jpg"]
  • Upload images to Gemini AI:
  • Use the file upload method to upload images first:
import google.generativeai as genai
genai.configure(api_key="your_api_key")
response = genai.upload_file("path/to/xray.jpg", mime_type="image/jpeg")
file_uri = response.uri
  • Pass the URI to generate_content with the correct structure:
contents = [
{
"role": "user",
"parts": [
{"file_data": {"file_uri": file_uri, "mime_type": "image/jpeg"}},
{"text": "X-ray image analysis."}
]
}
]
model = genai.GenerativeModel("gemini-2.0-flash")
response = model.generate_content(contents)
  • Multiple image processing: Methods that support image lists, up to 5 images.

3. Combining Submodules

The medical_ai submodule integrates with xray_processing to create comprehensive workflows. For example, PatientAI and DoctorDiagnosticAI use process_xray_image to analyze X-ray images before generating diagnoses or medical records.

Workflow example

from AFG_Gumball.medical_ai import PatientAI, DoctorDiagnosticAI
from AFG_Gumball.xray_processing import process_xray_image

# X-ray image processing
pathologies, gradcam_images = process_xray_image("path/to/xray.jpg")

# Create medical record
doctor_ai = DoctorDiagnosticAI()
record = doctor_ai.create_medical_record(
patient_info="Male, 50 years old",
symptoms="Prolonged cough, shortness of breath",
image_paths=["path/to/xray.jpg"],
include_xray_image=True
)
print(f"Medical record: {record}")

Note

  • Gemini API Key: Make sure GEMINI_API_KEY is set in .env file to use the functions of medical_ai.

  • Image format: X-ray images must be in JPEG format for processing in PatientAI and XrayAnalysisExpertAI. Use PIL to check and convert formats if necessary:

from PIL import Image
img = Image.open("path/to/xray.png").convert("L")
img.save("xray.jpg", format="JPEG")
  • Library version: Make sure to use google-generativeai>=0.8.0 to support file uploads and format contents with role.

  • Contents format: Each element in contents must have a role (user or model) and parts containing a list of text or file_data. For example:

contents = [{"role": "user", "parts": [{"text": "Prompt"}]}]
  • Relative imports: Run the script in the package context (e.g. python -m project.your_script) to avoid import errors.
  • Error handling: All functions and methods include input checks and provide detailed error messages for invalid input.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

afg_gumball-0.1.1.tar.gz (83.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

afg_gumball-0.1.1-py3-none-any.whl (98.0 kB view details)

Uploaded Python 3

File details

Details for the file afg_gumball-0.1.1.tar.gz.

File metadata

  • Download URL: afg_gumball-0.1.1.tar.gz
  • Upload date:
  • Size: 83.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for afg_gumball-0.1.1.tar.gz
Algorithm Hash digest
SHA256 ff06505c9099b545b2325a35f78af0032f0857c33ff74e8783a099e05d622789
MD5 e788581005a508b4c55ad3b2f354e8ac
BLAKE2b-256 9112c2051110e58210f91b310de80dafb0ca24d766a6bf91e19d7fc5da79665b

See more details on using hashes here.

File details

Details for the file afg_gumball-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: afg_gumball-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 98.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for afg_gumball-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 661ccd310ccfe4faa2e6f7806f9db11304daf4a605636074281bdc7ac3d217e7
MD5 8bfa8c75fbbdaa856a345e3fad45ab9f
BLAKE2b-256 d683991ae6e84de73e4a7fe73b3f52572388bdf57898a8e5557482f3bb6b7505

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page