Inspiration

Most skin-cancer AI is a black box. A person gets a score but can't see why. I wanted to see how far transparent, classical image processing could go, where every feature the tool uses is one you can see and question.

What it does

SkinLens takes a dermoscopy photo and walks through the full chain: hair removal, Otsu segmentation, and ABCD-style features (asymmetry, border compactness, color variation, relative diameter). It ends in a Low / Moderate / High feature-based risk band, never a cancer probability. If image quality is too poor, it refuses to score and flags the case "Unreliable" instead of guessing.

How we built it

Python, OpenCV, scikit-image and Streamlit. No deep learning. The pipeline is: preprocess and remove hair, segment the lesion, compute the ABCD-style features, combine them into a risk band, and show every step in the app. Unit tests pin the quality-gate warnings and the image-resize contract.

Challenges we ran into

Hair and lighting break segmentation, so a lot of work went into hair removal and quality gates. Some lesions simply segment badly, and the README documents those real failure cases.

Accomplishments that we're proud of

Honest evaluation. On 250 held-out ISIC images, segmentation reaches a mean Dice of 0.66 (median 0.77). The risk band's melanoma discrimination is modest (ROC-AUC 0.62 vs 0.5 for chance), and I report that as it is. The quality gate flags 35 of 250 images but catches only 24 of the 84 segmentation failures, and I say that openly too. The app also knows when not to answer.

What we learned

Classical methods are very explainable but have a real accuracy ceiling. Being upfront about limits matters more than a flashy number, especially in a health setting.

What's next for SkinLens

Better segmentation on hard cases, a larger and more varied evaluation, and a clearer explanation view for each feature. It stays a screening aid and educational prototype, not a diagnosis.

Built With

Share this project:

Updates

Submission history