This cookbook details how to deploy a localized gastroenterology video endoscopy analysis engine to detect colorectal polyps, segment adenomatous borders, and perform real-time NBI (Narrow Band Imaging) optical biopsy classification without cloud API dependence.
Colorectal cancer screening via colonoscopy relies on early detection and optical characterization of precancerous adenomatous polyps. In endoscopy suites and ambulatory surgery centers, real-time Computer-Aided Detection and Diagnosis (CADe/CADx) reduces adenoma miss rates (AMR) and assists in optical biopsy decisions (NICE / WASP criteria).
This engine enables:
[ Real-Time HD Colonoscopy / NBI Video Stream ]
│
▼
[ PolypNet-Kvasir-v1 ]
├── Specular Reflection Suppression
└── Real-Time Boundary Segmentation
│
▼
[ NICE-Classification-CLI ]
├── Microvascular Pattern Analysis
└── Adenoma vs. Hyperplastic Grading
│
▼
[ Structured Endoscopic Diagnostic Summary JSON ]
Ensure Python 3.10+, torch, torchvision, scikit-image, and OpenCV are installed:
pip install torch torchvision opencv-python-headless scikit-image numpy
Clone the offline model weights:
git clone https://github.com/OpenPHRorg/polypnet-kvasir-local.git
cd polypnet-kvasir-local
Suppress specular highlights (reflection glare from mucosal moisture) via adaptive thresholding and morphological inpainting:
import cv2
import numpy as np
def preprocess_endoscopy_frame(frame_path):
img = cv2.imread(frame_path)
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# Isolate specular glare reflections (high saturation/value specular spots)
v_channel = hsv[:, :, 2]
s_channel = hsv[:, :, 1]
glare_mask = (v_channel > 230) & (s_channel < 40)
# Inpaint specular highlight regions
glare_mask_uint8 = glare_mask.astype(np.uint8) * 255
clean_frame = cv2.inpaint(img, glare_mask_uint8, inpaintRadius=3, flags=cv2.INPAINT_TELEA)
return clean_frame
# Example preprocessing
prep_frame = preprocess_endoscopy_frame("sample_colonoscopy_nbi.jpg")
cv2.imwrite("clean_colonoscopy.jpg", prep_frame)
print("Endoscopic frame preprocessing completed.")
Execute polyp segmentation and NICE (NBI International Colorectal Endoscopic) classification:
import torch
def evaluate_polyp(clean_frame):
model = torch.hub.load('OpenPHRorg/polypnet-kvasir-local', 'polypnet_v1', pretrained=True)
model.eval()
tensor_input = torch.from_numpy(clean_frame).permute(2, 0, 1).unsqueeze(0).float() / 255.0
with torch.no_grad():
polyp_mask, nice_logits = model(tensor_input)
mask_binary = (torch.sigmoid(polyp_mask) > 0.5).numpy()[0, 0]
nice_class = torch.argmax(nice_logits, dim=1).item()
polyp_area_px = int(np.sum(mask_binary))
polyp_detected = polyp_area_px > 500
nice_categories = ["NICE Type 1 (Hyperplastic / Non-Neoplastic)", "NICE Type 2 (Adenoma / Precancerous)", "NICE Type 3 (Deep Submucosal Invasive Cancer)"]
return {
"polyp_detected": polyp_detected,
"polyp_surface_area_px": polyp_area_px,
"nbi_optical_biopsy_result": nice_categories[nice_class] if polyp_detected else "Normal Mucosa",
"action_recommendation": "Resect / Polypectomy" if nice_class >= 1 and polyp_detected else "Leave in situ / Observe",
"confidence": float(torch.softmax(nice_logits, dim=1)[0][nice_class].item()) if polyp_detected else 1.0
}
# Run assessment
result = evaluate_polyp(prep_frame)
print(f"Gastroenterology Endoscopic Summary: {result}")
This engine delivers instant, offline colonoscopic polyp CADe/CADx diagnostic summaries conforming to ESGE and ASGE clinical guidelines.