Spaces:
Sleeping
Sleeping
File size: 1,583 Bytes
251db0d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
import streamlit as st
from PIL import Image
import torchvision.transforms as T
from torchvision.models.detection import fasterrcnn_resnet50_fpn
import torch
# 载入一个预训练的 Faster R-CNN 模型
model = fasterrcnn_resnet50_fpn(pretrained=True)
model.eval()
# 设置图片转换
transform = T.Compose([
T.ToTensor(),
])
def detect_objects(image):
# 转换图片并添加批次维度
img_tensor = transform(image).unsqueeze(0)
with torch.no_grad():
predictions = model(img_tensor)
# 返回预测结果
return predictions[0]
def main():
st.title("物体识别与距离估计")
file_uploader = st.file_uploader("上传图片", type=["png", "jpg", "jpeg"])
if file_uploader is not None:
image = Image.open(file_uploader)
st.image(image, caption="上传的图片", use_column_width=True)
# 运行物体识别
predictions = detect_objects(image)
# 显示结果
for i, (box, score, label) in enumerate(zip(predictions['boxes'], predictions['scores'], predictions['labels'])):
if score > 0.5: # 筛选置信度大于 0.5 的预测结果
st.write(f"物体 {i + 1}: 类别 {label}, 置信度 {score:.2f}")
# 简单的距离估计:基于物体的大小
area = (box[2] - box[0]) * (box[3] - box[1])
distance = 2000 / area.sqrt() # 假设计算,不是真实世界的精确测量
st.write(f"估计距离: {distance:.2f} 米")
if __name__ == "__main__":
main()
|