import os import json from mmpretrain import ImageClassificationInferencer import torch import gradio as gr config = 'convnext-v2-tiny_32xb32_in1k-384px.py' checkpoint = 'ConvNeXt_v2-v2_ep90.pth' inferencer = ImageClassificationInferencer(model=config, pretrained=checkpoint, device= "cuda" if torch.cuda.is_available() else "cpu") def single_image_classifier(image): inf_result = inferencer(image)[0] label = inf_result['pred_class'] score = inf_result['pred_score'] if label == "not_western": another_label = "western" another_score = 1 - score else: another_label = "not_western" another_score = 1 - score return {label : score,another_label:another_score} def batch_process(path,is_pred_score): result={} try: for root, dirs, files in os.walk(path): for file in files: if file.lower().endswith(('.png', '.jpg','jpeg')): inf_result = inferencer(os.path.join(root, file))[0] print(result,os.path.join(root, file)) if is_pred_score == True: result[os.path.join(root, file)]= [{'pred_class' : inf_result['pred_class']},{'pred_score' : inf_result['pred_score']}] else: result[os.path.join(root, file)]= [{'pred_class' : inf_result['pred_class']}] with open(path+ "/" + "predict_result.json", "w") as file: json.dump(result, file, ensure_ascii=False,indent=2) return "sucess" except: return "failed" with gr.Blocks() as demo: gr.Markdown("# Western anime images classification") gr.Markdown("A classification using mmpretrain trained to classify western images based on ConvNeXtV2-tiny.Used for classifying anime images based on whether they are in the Western style.\n\n" "The inference script: https://huggingface.co/TLME/western-classification" ) with gr.Tab("Single image"): input_img = gr.Image(source='upload') output_label =gr.Label(label="Predict result") examples_imgs = ["./testimg2/1.jpg","./testimg2/2.jpg","./testimg2/3.jpg","./testimg2/4.jpg","./testimg/1.jpg","./testimg/2.jpg","./testimg/3.jpg","./testimg/4.jpg"] button = gr.Button("Submit",variant="primary") button.click(single_image_classifier,inputs= input_img,outputs= output_label) gr.Examples(examples= examples_imgs ,inputs = input_img , outputs= output_label,fn=single_image_classifier) with gr.Tab("Batch process"): with gr.Row(label ='Input path'): with gr.Column(): input_path = gr.Textbox(label="input your images folder") is_pred_score = gr.Checkbox(value = True, label="Output pred_score") output_msg = gr.Textbox(label="Message") buttom =gr.Button("Process",variant="primary") buttom.click(batch_process, inputs= [input_path,is_pred_score] , outputs=output_msg) if __name__ == "__main__": demo.queue(concurrency_count=4) demo.launch()