Spaces:
Running
on
Zero
Running
on
Zero
import gradio as gr | |
from ultralytics import YOLO | |
from fastapi import FastAPI | |
from PIL import Image | |
import torch | |
import spaces | |
import numpy as np | |
app = FastAPI() | |
device = 'cuda' if torch.cuda.is_available() else 'cpu' | |
model = YOLO('NailongKiller.yolo11n.pt').to(device) | |
def predict(img): | |
# 将输入图像转换为PIL Image对象 | |
input_image = Image.fromarray(img) | |
original_size = input_image.size | |
# 计算填充尺寸 | |
max_size = max(original_size) | |
pad_w = max_size - original_size[0] | |
pad_h = max_size - original_size[1] | |
# 创建方形画布并保持宽高比 | |
padded_img = Image.new('RGB', (max_size, max_size), (114, 114, 114)) # 使用灰色填充 | |
padded_img.paste(input_image, (pad_w//2, pad_h//2)) | |
# 转换为numpy数组并进行预测 | |
img_array = np.array(padded_img) | |
# 进行预测 | |
results = model.predict( | |
img_array, | |
conf=0.30, # 置信度阈值 | |
iou=0.45, # IOU阈值 | |
max_det=20 # 最大检测数量 | |
) | |
# 获取预测结果 | |
result_img = results[0].plot() | |
# 裁剪回原始尺寸 | |
if pad_w > 0 or pad_h > 0: | |
result_img = result_img[pad_h//2:pad_h//2 + original_size[1], | |
pad_w//2:pad_w//2 + original_size[0]] | |
return result_img | |
demo = gr.Interface( | |
fn=predict, | |
inputs=gr.Image(label="输入图片"), | |
outputs=gr.Image(label="检测结果", type="numpy"), | |
title="🐉 奶龙杀手 (NailongKiller)", | |
description="上传图片来检测奶龙 | Upload an image to detect Nailong", | |
examples=[["example1.jpg"]], | |
cache_examples=True | |
) | |
if __name__ == "__main__": | |
demo.launch(server_name="0.0.0.0", server_port=7860) |