import cv2 import khandy import numpy as np import gradio as gr from PIL import Image from modelscope import snapshot_download from insectid import InsectDetector, InsectIdentifier MODEL_DIR = snapshot_download("MuGeminorum/insecta", cache_dir="./insectid/__pycache__") def infer(filename: str): if not filename: None, "请上传图片 Please upload a picture" detector = InsectDetector() identifier = InsectIdentifier() image = khandy.imread(filename) if image is None: return None if max(image.shape[:2]) > 1280: image = khandy.resize_image_long(image, 1280) image_for_draw = image.copy() image_height, image_width = image.shape[:2] boxes, confs, classes = detector.detect(image) text = "未知" for box, _, _ in zip(boxes, confs, classes): box = box.astype(np.int32) box_width = box[2] - box[0] + 1 box_height = box[3] - box[1] + 1 if box_width < 30 or box_height < 30: continue cropped = khandy.crop_or_pad(image, box[0], box[1], box[2], box[3]) results = identifier.identify(cropped) print(results[0]) prob = results[0]["probability"] if prob >= 0.10: text = "{} {}: {:.2f}%".format( results[0]["chinese_name"], results[0]["latin_name"], 100.0 * results[0]["probability"], ) position = [box[0] + 2, box[1] - 20] position[0] = min(max(position[0], 0), image_width) position[1] = min(max(position[1], 0), image_height) cv2.rectangle( image_for_draw, (box[0], box[1]), (box[2], box[3]), (0, 255, 0), 2, ) image_for_draw = khandy.draw_text( image_for_draw, text, position, font=f"{MODEL_DIR}/simsun.ttc", font_size=15, ) outxt = text.split(":")[0] if ":" in text else text return Image.fromarray(image_for_draw[:, :, ::-1], mode="RGB"), outxt if __name__ == "__main__": iface = gr.Interface( fn=infer, inputs=gr.Image(label="上传昆虫照片 Upload insect picture", type="filepath"), outputs=[ gr.Image(label="识别结果 Recognition result"), gr.Textbox(label="最可能的物种 Best match", show_copy_button=True), ], title="图像文件格式支持 PNG, JPG, JPEG 和 BMP, 且文件大小不超过 10M
Image file format support PNG, JPG, JPEG and BMP, and the file size does not exceed 10M.", examples=[ f"{MODEL_DIR}/examples/butterfly.jpg", f"{MODEL_DIR}/examples/beetle.jpg", ], allow_flagging="never", cache_examples=False, ) iface.launch()