追寻者的目光 2022-12-18 18:51 采纳率: 100%
浏览 113
已结题

yolov5传入numpy矩阵视频流

问题遇到的现象和发生背景

最近接手一个项目,用yolov5和工业相机实现目标检测。
目前已经用python调用海康工业相机得到numpy数组类型的视频。
但是想要将这种格式的视频传入yolov5的detect.py就出现了问题。
yolov5目前支持的格式为:
1.mp4、avi等视频格式的文件;
2.RTSP、HTTP等视频流;
3.电脑自带相机以及其他免驱动相机;

所以,yolov5不支持传入numpy数组格式的视频

temp = np.asarray(data_buf)  #temp是工业相机得到的numpy视频流
temp = temp.reshape((img_h, img_w, img_c))
temp = cv2.cvtColor(temp, cv2.COLOR_BGR2RGB)
cv2.namedWindow("temp", cv2.WINDOW_NORMAL)
cv2.imshow('temp',temp)

我尝试将numpy数组转换成图片

import numpy as np
from PIL import Image

# 将numpy数组转换成图片
def array2img(arr):
    # 将numpy数组转换为PIL图片
    img = Image.fromarray(np.uint8(arr))
    # 显示图片
    img.show()

# 创建一个3x3的numpy数组
arr = np.array([[1,2,3],[4,5,6],[7,8,9]], dtype=np.uint8)
# 调用函数将numpy数组转换成图片
array2img(arr)

但是这种方法会保存图片,
对于实施检测来说,就会保存大量图片

实现目标:
将numpy视频流能传入yolov5

  • 写回答

3条回答 默认 最新

  • 爱晚乏客游 2022-12-19 02:05
    关注

    直接改一改就能用了,YOLOV5本身就是opencv格式读写的,opencv本身就是numpy格式的数据,只不过输入读取的不是而已,你可以直接将读取接口换成numpy就可以了
    具体可以修改这里面的东西,copy一份,然后将里面的imread读取换成直接复赋值numpy矩阵就可以了,但是后面的一些像自适应缩放啥的还是要的,或者你可以都不要这些,直接自己参考这个数据加载的方式自己实现一个,只要能保证返回的结果里面的值格式一致即可

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
    1人已打赏
  • 阿_旭 2022-12-18 21:30
    关注

    你这个为什么会保存图片呢?感觉不会另外保存呀,直接将Img返回应该就可以了吧

    
    import numpy as np
    from PIL import Image
    
    # 将numpy数组转换成图片
    def array2img(arr):
        # 将numpy数组转换为PIL图片
        img = Image.fromarray(np.uint8(arr))
        return img
    
    # 创建一个3x3的numpy数组
    arr = np.array([[1,2,3],[4,5,6],[7,8,9]], dtype=np.uint8)
    # 调用函数将numpy数组转换成图片
    array2img(arr)
    
    评论
  • yy64ll826 2022-12-19 09:48
    关注
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 1月2日
  • 已采纳回答 12月25日
  • 修改了问题 12月18日
  • 创建了问题 12月18日

悬赏问题

  • ¥15 关于网上一个easyx制作的见缝插针小游戏(c++)
  • ¥15 开地址法双散列函数处理碰撞
  • ¥15 想问一下这个是什么情况 虚拟机Linux打不开了
  • ¥15 联通光猫掉注册了怎么重新注册上去
  • ¥15 关于unity开发steamvr程序遇到的问题
  • ¥60 求tc downloader的下载方式
  • ¥15 华为 快捷方式 手电筒 接口
  • ¥15 Qt6.5支不支持Android13开发啊
  • ¥20 网络只能跑一半,应该如何设置
  • ¥20 Python调用百度开发者平台人脸识别接口