吉祥猴378 2024-07-25 17:51 采纳率: 95.8%
浏览 1
已结题

哪位大姥,知道yolov5屏幕识别如何对相应模型上出现边框

device = torch.device("cuda")
model = torch.hub.load('F:\yolov5-7.0', 'custom', 'F:\yolov5-7.0/runs/train/exp4/weights/best.pt source='local')
model = model.to(device)
if name == 'main'
moni
"left":
"top":
"width"
"height":
cv2.namedWindow('SF_TRT', cv2.WND_PROP_VISIBLE)
while True
img = scr.grab(monitor)

    img = np.array(img) 
    img = cv2.cvtColor(img, cv2.COLOR_BGRA2BGR)  

    results = model(img)


    k = cv2.waitKey(1)
  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-07-25 17:51
    关注

    引自免费微信小程序:皆我百晓生

    要实现YOLOv5在屏幕上显示并识别特定对象(例如:边框),您需要执行以下步骤:

    1. 加载预训练的YOLOv5模型。
    2. 为模型指定一个输入输出窗口。
    3. 在主循环中更新图像,并运行模型进行预测。

    以下是Python代码示例:

    import cv2
    from PIL import Image
    import numpy as np
    import os
    import torch
    from torchvision.models.detection.faster_rcnn import FastRCNNPredictor
    from models.common import DetectMultiBackend
    from utils.datasets import LoadImages, LoadStreams
    from utils.general import (LOGGER, check_img_size, non_max_suppression, scale_coords,
                                xyxy2xywh)
    from utils.plots import Annotator, colors
    from utils.torch_utils import select_device, time_synchronized
    
    
    # 配置YOLOv5模型
    device = torch.device("cuda")
    model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True)
    model.eval()
    model.to(device).eval()
    
    # 指定输入输出窗口
    window_name = 'YOLOv5'
    cv2.namedWindow(window_name, cv2.WND_PROP_VISIBLE)
    
    # 创建一个视频流对象
    cap = cv2.VideoCapture(r'path_to_your_video_file.mp4') # 更改为您的视频文件路径
    
    while cap.isOpened():
        ret, frame = cap.read()
    
        if not ret:
            break
        
        # 使用YOLOv5模型进行预测
        results = model(frame)
        
        # 更新图像
        img = results.render()
        
        # 将结果转换回PIL格式
        pil_img = Image.fromarray(np.uint8(img))
        
        # 从PIL图片读取像素值
        pixel_values = np.array(pil_img)
        
        # 转换为numpy数组以便处理
        pixel_values = np.ascontiguousarray(pixel_values.transpose((1, 2, 0)))
        
        # 转换为PyTorch张量
        tensor = torch.from_numpy(pixel_values).to(device)
        
        # 进行预测
        with torch.no_grad():
            outputs = model([tensor])[0]
            
        # 获取检测框坐标信息
        boxes = outputs['boxes'].cpu().numpy()
        scores = outputs['scores'].cpu().numpy()
        classes = outputs['labels'].cpu().numpy()
        
        # 对于每个框,计算其宽度、高度
        widths = boxes[:, 2] - boxes[:, 0] + 1
        heights = boxes[:, 3] - boxes[:, 1] + 1
        
        # 计算总面积
        total_area = widths * heights
        
        # 选择得分最高的框
        max_scores = scores.max(axis=1)
        selected_boxes = boxes[max_scores > 0.5, :].astype(int)
        
        # 对所有选定框应用非极大抑制
        result_boxes = scale_coords(results.image_shape[:2], selected_boxes, img.shape[:2]).round()
        
        # 将筛选后的框绘制到原始图像上
        for box in result_boxes:
            x, y, w, h = box.astype(int)
            cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
            cv2.putText(frame, f'{classes[y, x]} {max_scores[y, x]:.2f}', (x, y-10), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 255, 0), 2)
        
        # 显示最终结果
        cv2.imshow(window_name, frame)
        
        # 检查是否按下Esc键退出程序
        key = cv2.waitKey(1)
        if key == 27: # Esc键
            break
            
    # 清理资源
    cap.release()
    cv2.destroyAllWindows()
    

    这段代码首先加载了预训练的YOLOv5模型,然后创建了一个视频流对象。当视频流中的帧被读取时,它会使用YOLOv5模型对每一帧进行预测。对于每一个框,它将计算其宽度、高度,以及与图像大小的比例。然后,根据这些信息,它将筛选出最高得分的框,并将其应用于非极大抑制算法。最后,它将在原图像上绘制筛选出的框,并显示给用户。

    请注意,这个例子是基于YOLOv5的,如果您使用的是其他版本的YOLOv5,可能需要调整一些设置。此外,确保安装了必要的库(opencv-python, Pillow, torchvision, pyyaml 等)。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 8月2日
  • 已采纳回答 7月25日
  • 创建了问题 7月25日

悬赏问题

  • ¥20 有偿:在ubuntu上安装arduino以及其常用库文件。
  • ¥15 请问用arcgis处理一些数据和图形,通常里面有一个根据点划泰森多边形的命令,直接划的弊端是只能执行一个完整的边界,但是我们有时候会用到需要在有很多边界内利用点来执行划泰森多边形的命令
  • ¥30 在wave2foam中执行setWaveField时遇到了如下的浮点异常问题,请问该如何解决呢?
  • ¥20 看图片)删除这个自动化录屏脚本就一直报错找不到脚本文件,如何解决?(相关搜索:bat文件)
  • ¥750 关于一道数论方面的问题,求解答!(关键词-数学方法)
  • ¥200 csgo2的viewmatrix值是否还有别的获取方式
  • ¥15 Stable Diffusion,用Ebsynth utility在视频选帧图重绘,第一步报错,蒙版和帧图没法生成,怎么处理啊
  • ¥15 请把下列每一行代码完整地读懂并注释出来
  • ¥15 pycharm运行main文件,显示没有conda环境
  • ¥15 寻找公式识别开发,自动识别整页文档、图像公式的软件