Spaces:
Sleeping
Sleeping
| 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() | |