吉祥猴378 2024-07-03 17:43 采纳率: 95.8%
浏览 3
已结题

哪位大姥,知道yolov5模型训练完了,如果用mss库对屏幕进行适时识别,如何截图然后将图片传入适时监控中

 if __name__ =='__main__':
scr=mss.mss()
monitor={
    "left":0,
    "top": 0,
    "width": 2560,
    "height": 1440}
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)
    cv2.imshow("SF_TRT",img)
    k=cv2.waitKey(1)
    if k % 256 == 27:
        cv2.destroyALLWINDOWS()  
 
   
 

    
        
  • 写回答

2条回答 默认 最新

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

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

    你的问题主要是关于如何在屏幕适时识别中使用YOLOv5模型进行目标检测,并将截图传入该模型进行识别。这需要结合屏幕截图、YOLOv5模型预测和图像处理等多个步骤。以下是一个基本的实现思路:

    首先,你需要确保已经训练好了YOLOv5模型,并且已经安装了必要的库,如mss(用于屏幕截图)、cv2(用于图像处理)以及YOLOv5的Python库(例如yolov5ultralytics)。下面是一个结合了屏幕截图和YOLOv5目标检测的示例代码:

    import cv2
    import numpy as np
    import mss
    import yolov5  # 假设你已经安装了yolov5的Python库
    
    # YOLOv5模型配置参数
    weights_path = 'yolov5_model_weights.pt'  # YOLOv5模型权重路径
    conf_thres = 0.5  # 检测置信度阈值
    nms_thres = 0.5  # 非极大值抑制阈值
    model = yolov5.models.Detection(weights_path)  # 创建YOLOv5模型实例
    
    if __name__ == '__main__':
        scr = mss.mss()  # 创建屏幕截图对象
        monitor = {  # 定义屏幕的坐标范围,根据你的需要进行调整
            "left": 0, "top": 0, "width": 2560, "height": 1440
        }
        cv2.namedWindow('SF_TRT', cv2.WND_PROP_VISIBLE)  # 创建显示窗口
        cv2.createTrackbar('Confidence Threshold', 'SF_TRT', conf_thres * 100, 100)  # 创建置信度滑动条(可选)
        cv2.createTrackbar('NMS Threshold', 'SF_TRT', nms_thres * 100, 100)  # 创建NMS滑动条(可选)
        while True:  # 持续截图并进行目标检测
            img = scr.grab(monitor)  # 进行屏幕截图
            img = np.array(img)  # 将图像转换为numpy数组格式,以适应YOLOv5模型的需求
            img = cv2.cvtColor(img, cv2.COLOR_BGRA2BGR)  # 将图像颜色空间转换为BGR格式(如果使用的是BGR模型的话)
            results = model(img)  # 使用YOLOv5模型进行目标检测,得到检测结果列表(边界框等)
            labels = ['detection']  # 假设这里只是进行通用检测任务,需要换成具体的类别标签数组
            boxes = results[results[:,4]>conf_thres].astype(int)  # 根据置信度阈值过滤检测结果,得到最终的边界框坐标数组
            detections = []  # 存储检测结果的数据结构(如果需要自定义,可添加其他信息)
            for i in range(len(boxes)):  # 对每个检测到的对象进行处理(如绘制边界框等)
                bbox = boxes[i][i].astype(int)  # 获取当前检测框坐标数组,[top, left, width, height]格式(具体取决于YOLO输出格式)
                detections.append([bbox, labels])  # 添加检测结果信息到detections列表中(假设每个检测结果仅对应一个类别标签)            cv2.rectangle(img, (bbox[0], bbox[1]), (bbox[0]+bbox[2], bbox[1]+bbox[3]), (0, 255, 0), 3)  # 在原图上绘制检测到的边界框(示例操作)cv2.imshow("SF_TRT", img)  # 显示图像,注意在循环中需要调用一次cv2退出循环的条件可以是检测到特定的按键或者事件等k = cv2.waitKey(1) if k % 256 == 27: # 如果按下ESC键退出循环cv2.destroyAllWindows()cv2.waitKey() # 防止程序直接退出,等待用户操作在上面的代码中,我们创建了一个无限循环来持续截取屏幕并进行目标检测,将检测到的边界框显示在屏幕上如果需要的话,可以修改代码以适应你的具体需求(例如保存检测结果到文件等)注意:YOLOv5模型的输出格式和参数可能会因版本不同而有所差异,请确保使用的YOLOv5模型和上面的代码相匹配,并按照具体情况进行相应的调整代码完成后进行测试,以确保正确工作如果遇到任何问题或错误提示,请随时提问以便调整和改进代码的帮助和支持
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 7月12日
  • 已采纳回答 7月4日
  • 创建了问题 7月3日

悬赏问题

  • ¥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 寻找公式识别开发,自动识别整页文档、图像公式的软件