Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import os | |
| from useful_functions import * | |
| import useful_functions | |
| from dotenv import load_dotenv | |
| load_dotenv() | |
| f_load_cancer_classifier() | |
| f_load_cnn_model() | |
| HF_TOKEN = os.getenv('HF_TOKEN') | |
| # hf_writer = gr.HuggingFaceDatasetSaver(HF_TOKEN, "mole-dataset", private=True) | |
| def image_classifier(file_path, age, sex, localization): | |
| if age == 0: | |
| age = 40 | |
| if sex == "": | |
| sex = "unknown" | |
| if localization == "": | |
| localization = "unknown" | |
| # file_path = file_path if file_path is not None else file_path_webcam | |
| preds = f_predict_cnn_with_tta(file_path) | |
| label = f_predict_cancer(preds, age, sex, localization) | |
| return (dict(zip(useful_functions.lesion_model.dls.vocab, preds)), | |
| label) | |
| input_img = gr.Image(tool="editor", type="filepath", source="upload") | |
| # input_webcam = gr.Image(tool="editor", type="filepath", source="webcam") | |
| input_age = gr.Number(label="age (optionnel)") | |
| input_sex = gr.Dropdown(label="sex (optionnel)", choices=["male", "female"]) | |
| input_localization = gr.Dropdown(label="localization (optionnel)", choices=["abdomen", "back", "chest", "ear", | |
| "face", "foot", "genital", "hand", | |
| "lower extremity", "neck", "scalp", "trunk", "upper extremity"]) | |
| output_lesion = gr.Label(label="Lesion detected") | |
| output_malign = gr.Label(label="Classification") | |
| list_files_examples = os.listdir("examples") | |
| # examples = [[os.path.join("examples", file), 0, "", ""] for file in list_files_examples if file.endswith("jpg")] | |
| examples = [] | |
| examples.append([os.path.join("examples", "PXL_20221103_153018529.jpg"), 40, "female", "back"]) | |
| examples.append([os.path.join("examples", "PXL_20221103_153129579.jpg"), 40, "male", "neck"]) | |
| examples.append([os.path.join("examples", "PXL_20221103_153137616.jpg"), 40, "male", "neck"]) | |
| examples.append([os.path.join("examples", "PXL_20221103_153217034.jpg"), 40, "male", "back"]) | |
| examples.append([os.path.join("examples", "PXL_20221103_153256612.jpg"), 40, "male", "upper extremity"]) | |
| examples.append([os.path.join("examples", "ISIC_0025402.jpg"), 70, "male", "lower extremity"]) | |
| demo = gr.Interface(title="Skin mole analyzer", | |
| description=r"""This is a side project I have been working on to practice working with images. | |
| The purpose is to classify skin lesions (Based on kaggle dataset Skin Cancer MNIST: HAM10000). | |
| The framework used is FastAI/pytorch and the model used is a pre-trained cnn (resnet152). | |
| I added an extra layer to use age, sex, localization and output of resnet152 to classify the lesion | |
| as suspicious or not (randomForest model). | |
| The lesions detected are the following: | |
| <ul> | |
| <li>Actinic keratoses and intraepithelial carcinoma / Bowen's disease (akiec)</li> | |
| <li>basal cell carcinoma (bcc)</li> | |
| <li>benign keratosis-like lesions (bkl)</li> | |
| <li>dermatofibroma (df)</li> | |
| <li>melanoma (mel)</li> | |
| <li>melanocytic nevi (nv)</li> | |
| <li>vascular lesions (vasc)</li> | |
| </ul> | |
| <b> This is in no case intended as a medical advice, just a pedagogical exercise.</b> <br /> | |
| <i>*Pictures should be relatively well centered on the mole to obtain the best results (cf examples). | |
| You can use the tools available in the right corner to crop optimally.</i> | |
| """, | |
| article="""[1] Noel Codella, Veronica Rotemberg, Philipp Tschandl, M. Emre Celebi, Stephen Dusza, David Gutman, | |
| Brian Helba, Aadi Kalloo, Konstantinos Liopyris, Michael Marchetti, Harald Kittler, Allan Halpern: | |
| "Skin Lesion Analysis Toward Melanoma Detection 2018: A Challenge Hosted by the International Skin Imaging Collaboration (ISIC)", | |
| 2018;"<a href="https://arxiv.org/abs/1902.03368">"https://arxiv.org/abs/1902.03368"</a><br /> | |
| [2] Tschandl, P., Rosendahl, C. & Kittler, H. The HAM10000 dataset, a large collection of multi-source dermatoscopic | |
| images of common pigmented skin lesions. Sci. Data 5, 180161 doi:10.1038/sdata.2018.161 (2018).""", | |
| fn=image_classifier, | |
| inputs= [input_img, | |
| input_age, | |
| input_sex, | |
| input_localization], | |
| outputs=[output_lesion, | |
| output_malign], | |
| examples=examples, | |
| allow_flagging="auto", | |
| flagging_options=list(useful_functions.lesion_model.dls.vocab) + ["other"], | |
| # flagging_callback=hf_writer | |
| ) | |
| demo.launch() | |