This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 在 python 代码中使用 gstreamer 和 OpenCV 从 IMX 219读取视频或源

Guru**** 2317430 points
Other Parts Discussed in Thread: TDA4VM
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1270814/reading-video-or-feed-from-imx-219-using-gstreamer-and-opencv-in-a-python-code

主题中讨论的其他器件:TDA4VM

我使用的是带有 SOC j721e 的 TDA4VM 电路板。 我的 SDK 版本为09_00_00_00。 我浏览了 SDK 的文档、但根据该文档、Model Zoo 使用两条管线、一条用于模型输入、另一条用于显示结果。 我想使用一个流水线、使用 TI 插件在电路板上测试我编译的模型。 您能帮助我吗? 我想使用 OpenCV 从 gstreamer 流水线获取源。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Sourabh:

    您能否分享您正在使用哪个 SDK?

    谢谢!

    Fabiana Jaimes

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Fabiana、您好!

    我在 TDA4VM Jacinto 上使用用于边缘 AI 应用的 Linux SDK。 以下是我将遵循的文档:

    https://software-dl.ti.com/jacinto7/esd/processor-sdk-linux-edgeai/TDA4VM/09_00_00/exports/edgeai_docs/common/sdk_overview.html

    我可以通过进行一些更改来为 CV2运行流水线。 流水线如下所示:

    GST_pipeline ='filesrc location=/opt/edgeai-test-data/videos/video0_1280_768.h264! h264parse! v4l2h264dec capture-IO-mode=5! tiovxmemalloc pool-size=12! capsfilter caps="video/x-raw、format=(string) NV12;"! 视频转换! video/x-raw,format=(string)BGR! 附加接收器最大缓冲区=2下降=真'

    我当时想用 tdicolconvert 代替 vibeoconvert,但似乎 NV12到 BGR 不受支持(支持 RGB)。

    您能帮助我解决 imx219的流水线问题吗?  
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Sourabh:

    我建议查看我们针对 imx219的 GStreamer 流水线示例: https://software-dl.ti.com/jacinto7/esd/processor-sdk-linux-edgeai/TDA4VM/09_00_00/exports/edgeai_docs/common/edgeai_dataflows.html#id2 

    我还建议查看后处理模块、因为它使用 OpenCV。

    您更正的是、tiovxcolorconvert 当前不支持 BGR、因此您必须在特定用例中将 RGB 转换为 BGR。 我将提交一个 BGR 支持要求申请。

    谢谢!

    Fabiana Jaimes

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Fabiana、您好!

    我正在使用您为 IMX 219摄像机共享的链接中的管道。 我一直在关注该文档、因为它在 OpenCV 中使用了 gstreamer 流水线。 从该链接只有我可以运行 gstreamer 流水线、以在 CV2中读取 h264视频。 但对于 IMX 219流水线、它会发生故障。 以下是文档中的管道、它提供2个流、一个用于模型、另一个用于绘制预测结果


    v4l2src device=/dev/video-rpi-cam0 IO-mode=5像素-宽高比=队列泄漏=2capsfilter caps="视频/x-Bayer、width=(int) 1920、height=(int) 1080、format=(string) rggb;"tiovxisp dcc-isp-file=/opt/imaging/imx219/linear/dcc_viss.bin sensor-name=sensor_Sony_IMX219_rpi ! capsfilter caps="video/x-raw、format=(string) NV12;"tiovxmultiscaler 名称= SPLIT_01 SPLIT_01。
    排队capsfilter caps="video/x-raw、width=(int) 1280、height=(int) 720;"tiovxdlcolorconvert out-pool-size=4capsfilter caps="video/x-raw、format=(string) rgb;"appsink max-buffers=2 drop=True name=sen_0 split_01
    。 排队capsfilter caps="video/x-raw、width=(int) 1168、height=(int) 748;"tiovxmultiscale 目标=1capsfilter caps="video/x-raw、width=(int) 416、height=(int) 416;"tiovxdlpreproc out-pool-size=4 data-type=3 tensor-format=1capsfilter caps="应用/x-tensor-tiovx;"! appsink max-buffers=2 drop=True name=pre_0 


    我进行了修改、因为我只需要一个流来在电路板上测试我的编译模型。 编辑后的管道如下所示:

    v4l2src device=/dev/video-rpi-cam0 IO-mode=5像素-宽高比=无! capsfilter caps="视频/x-Bayer、width=(int) 1920、height=(int) 1080、format=(string) rggb;"! tiovxisp dcc-isp-file=/opt/imaging/imx219/linear/dcc_viss.bin sensor-name=sensor_Sony_IMX219_rpi ! capsfilter caps="video/x-raw、format=(string) NV12;"! tiovxmultiscaler!\
    capsfilter caps="video/x-raw、width=(int) 1280、height=(int) 720;"! 视频转换! capsfilter caps="video/x-raw、format=(string) bGR;"! 附加接收器最大缓冲区=2下降= True

    该错误是关于 ISP、我认为以下是错误消息

    0:00:00.273941699 1598    0x370c2860错误              tiovxisp gsttiovxisp.c:879:gst_tiovx_isp_read_2a_config_file: 无法打开2A 配置文件:(null)
    0:00:00.273975626 1598    0x370c2860错误              tiovxisp gsttiovxisp.c:1123:gst_tiovx_isp_init_module: 无法读取2a 配置文件
    0:00:00.273994578 1598    0x370c2860错误             tiovxmiso gsttiovxmiso.c:1215:gst_tiovx_miso_modules_init: 子类初始化模块失败

    请告诉我,如果我丢失了一些东西或犯了一些小错误。

    提前感谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Sourabh:

    启动时是否检测到 imx219摄像头? 您能否在使用 imx219作为输入的情况下运行简单的 OOB 演示?

    谢谢!

    Fabiana Jaimes

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Fabiana、您好!

    是的、会检测到我的 IMX219摄像头。 此外、我可以使用它来运行 TI 提供的 edgeai-GST-demos。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Sourabh:

    下面是一个 IMX219示例流:  

    gst-launch-1.0 v4l2src device=/dev/video-rpi-cam0! video/x-bayer,宽度=1920,高度=1080,格式=rggb! tiovxisp sink_0::device=/dev/v4l-subdev2 dcc-isp-file=/opt/imaging/imx219/dcc_viss.bin \ 
    Sink_0::DCC-2a-file=/opt/imaging/imx219/dcc_2a.bin sensor-name=sensor_Sony_IMX219_RPI! video/x-raw、format=NV12、width=1920、height=1080! kmsink sync=false

    我希望这对您有所帮助。

    谢谢!

    Fabiana Jaimes

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Fabiana、您好!

    您共享的管线无法正常工作。 以下是错误消息。

    应用程序:初始化...!!!
    内存:初始化...!!!
    MEM:已初始化 DMA 堆(FD=6)!!!
    内存:初始化...完成!!
    IPC:初始化...!!!
    IPC:初始化...完成!!!
    remote_service: init ...!!!
    remote_service: init……done!!!
      140.633889s:GTC 频率= 200 MHz
    应用程序:初始化...完成!!
      140.633962 s: vx_zone_init:Enabled
      140.633971 s: vx_zone_error:Enabled
      140.633980 s: vx_zone_warning:已启用
      140.634743 s: vx_zone_init:[tivxInitLocal:130]初始化已完成!!
      140.635181 s: vx_zone_init:[tivxHostInitLocal:96]已针对主机完成初始化!!
    正在将管道设置为暂停...
    错误:来自元素/GstPipeline:pipeline0/GstKMSSink:kmssink0:无法打开 DRM 模块(NULL)
    其他调试信息:
    ../gst-plugins-bad-1.20.6/sys/kmssink.c (850):GST_kms_sink_start ():/GstPipein:MSSine0/GstKpipelink:kmssink0:
    原因:没有此类文件或目录(2)
    错误:管道不想预先填充。
    错误:来自元素/GstPipeline:pipeline0/GstKMSSink:kmssink0:Gstreamer 错误:状态更改失败、一些元素无法发布正确的错误消息、其中包含失败的原因。
    其他调试信息:
    ../gstreamer-1.20.6/libs/gst/base/gstbasesink.c (5878):GST_base_sink_change_state ():/GstPipeline:pipeline0/GstKMSSink:kmssink0:
    启动失败
    错误:管道不想预先填充。
    无法将管道设置为暂停。
    正在将管道设置为空...
    正在释放管道...
      140.915418 s: vx_zone_error:[vxGetStatus:700]参考为 NULL
      140.915438 s: vx_zone_init:[tivxHostDeInitLocal:110]已针对主机完成初始化!!
      140.919816 s: vx_zone_init:[tivxDeInitLocal:193]取消初始化已完成!!!
    应用程序: Deinit ..!!
    remote_service: Deinit……!!!
    remote_service: deinit……完成!!
    IPC: Deinit...!!
    IPC: DeInit ...完成!
    内存:Deinit…!!!
    DDR_SHARED_MEM:分配:0个分配、共0字节
    DDR_SHARED_MEM:free's:0 free's of 0 bytes
    DDR_SHARED_MEM:open 的:0个 字节的分配
    Mem: Deinit...完成!!
    应用程序: Deinit ...完成!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    感谢您的提问。 研究这一问题的专家目前在办公室外工作一 周。 因此、对您的查询做出响应会有延迟。 请耐心等待。

    谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Praveen:

    感谢您的答复。 等待专家提供解决方案。

    此致、
    Sourabh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Sourabh、

    感谢您的理解。 专家本周回来、必须能够回复您的问题。

    谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Sourabh:

    运行流水线时、是否有显示屏连接到电路板?

    谢谢!

    Fabiana Jaimes

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Fabiana、您好!

    是的、我有一个显示器连接到该板上。 我使用示例 IMX219配置文件(它会选择输入流、模型和输出 Steam)通过 edgeai_gst_apps python 脚本来运行文档中提供的演示(我们在之前的对话中讨论过)。 我的目标是使用 OpenCV 运行 gstreamer 流水线、以便我可以使用 IMX219尝试我的自定义模型。 我可以使用 OpenCV 为 h264视频运行 gstreamer 流水线(在示例视频中提供)。 我在以前的答复中已经分享了这两个问题。  

    谢谢!
    Sourabh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Sourabh:

    查看我发送的流水线并使用最新的 SDK 进行测试后、我看到一些路径和命名约定发生了变化。 请尝试运行此流水线、让我知道它是如何为您效劳的:

    gst-launch-1.0 v4l2src device=/dev/video-rpi-cam0 io-mode=5 ! queue leaky=2 ! video/x-bayer, width=1920, height=1080, format=rggb ! tiovxisp sensor-name=SENSOR_SONY_IMX219_RPI dcc-isp-file=/opt/imaging/imx219/linear/dcc_viss.bin format-msb=7 sink_0::dcc-2a-file=/opt/imaging/imx219/linear/dcc_2a.bin sink_0::device=/dev/v4l-rpi-subdev0 ! video/x-raw,format=NV12, width=1920, height=1080 ! queue ! kmssink driver-name=tidss sync=false

    谢谢!

    Fabiana Jaimes

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Fabiana、您好!

    上述共享管道的工作方式。 我可以在显示屏上看到实时流媒体。 现在、我将尝试使用 CV2消耗相同的流水线。 都将在相同情况下更新您的信息。

    谢谢!

    Sourabh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Fabiana、您好!

    我修改了您共享的流水线、以便我可以使用 CV2使用自定义模型。 以下是可以在 python CV2中使用的工作流水线。

    GST_pipeline ='v4l2src device=/dev/video-rpi-cam0 IO-mode=5! 排队! video/x-bayer,宽度=1920,高度=1080,格式=rggb! tiovxisp sensor-name=sensor_Sony_IMX219_RPI DCC-ISP-file=/opt/imaging/imx219/linear/dcc_viss.bin 格式-MSB=7 sink_0::DCC-2a-file=/opt/imaging/imx219/linear/dcc_2a.bin sink_0::device=/dev/v4l-rpi-subdev0! \
       video/x-raw、format=NV12、width=1920、height=1080!  tiovxdlcolorconvert! video/x-raw,format=rgb! 视频转换! video/x-raw,format=bGR! 排队! 附加接收器'

    感谢您的支持、非常感谢!

    此致、
    Sourabh