X3开发板接入usb camera

一、介绍

将camera接入到开发板的方式传统的是通过MIPI,但是这种方式不具有通用性,如果用户更换camera,需要重新适配camera。

本教程介绍了将通用的标准USB Camera设备接入到地平线的X3生态开发板的方法,免去了不同型号camera适配带来的开发成本。地平线X3处理器处理从usb camera采集到视频后做智能分析后,通过web展示渲染结果。

二、方案设计

方案整体流程如下图所示

通用的camera设备通过USB接口连接到地平线X3生态开发板,经过智能分析后,X3开发板将视频和智能检测结果通过以太网输出到PC的web端,实现视频的获取、处理和实时渲染展示。

说明:

支持主流的USB Camera设备,地平线开发使用的设备型号参考链接https://item.m.jd.com/product/100012273330.html?wxa_abtest=o&ad_od=share&utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=CopyURL

三、教程

0. Prerequisite

您需要了解地平线AI-Express应用开发中间件,熟悉Linux平台下的代码编译、部署。

1. 环境准备

1.1 硬件环境

本方案可以部署、运行在地平线X3-Dev开发板上。

1.2 软件环境

本方案基于地平线AI-Express应用开发中间件进行开发。

1.3 编译环境

您可以使用Docker镜像,其中内置了部分工具包。如果您不使用Docker镜像,则需要安装如下的交叉编译工具。

2. 开发教程

本教程将介绍利用XProto基于USB Camera搭建一个完整的智能应用。

本方案使用到了XProto中的VioPlugin, SmartPlugin, 和WebSocketPlugin。

3种plugin的详细说明:https://developer.horizon.ai/forum/id=5efab48f38ca27ba028078dd(2.3节)

VioPlugin的的输入源分为两类,实时视频和本地图片回灌,两种模式使用的vio配置不同。对于USB Camera,虽然输入是实时视频,但是vio的配置使用的是回灌配置。原因为USB Camera作为输入在vio plugin内部的处理类似于回灌,具体流程为:

VioPlugin内部需要将USB Camera输出的视频流/图片经过转码后回灌送到金字塔,类似于本地图片回灌流程。USB Camera输出的视频流无法像MIPI接口的Camera直接将视频流送到金字塔。

从USB Camera获取视频流/图片的流程:

USB Camera连接到X3开发板后会自动加载驱动,对应的设备符为/dev/video8。

一般USB Camera支持输出的视频格式包括H264和H265,输出的图片格式为YUY2,MJPEG等,具体需要查看使用的Camera设备。本示例设置的输出格式是YUY格式的图片,分辨率为1920*1080。

四、运行方式

1、在ai-express-release包中运行“bash build.sh x3 && bash deploy.sh”进行编译和打包,命令成功执行后会生成deploy部署包。

2、将USB Camera设备接入X3开发板的USB接口。

3、在板子上运行deploy包内的run.sh脚本,“sh run.sh face x3dev usb_cam”,开始从camera读取视频流并做智能分析。

4、通过浏览器访问开发板IP,web展示端查看视频流和渲染结果。

如果想用720p的usb摄像头,需要修改哪些文件

(vioproduce.cpp:381): send stream to decoder fail

[ERROR][MM][src/vdi/linux/vdi_osal.c:173] [ERROR][1466.59846][26686:26752][TASK] It’s not allowd to do this operation. Please check the task state 6.

[ERROR][video/src/hb_vdec.c:663] [1466.598548]HB_VDEC_SendStream[663] E: [HB_VDEC] HB_VDEC_SendStream:663 Failed VeChn = 0 s32Ret = -269024256-

x3的开发板, sh run.sh face x3dev usb_cam-
use摄像头, 跑的demo报的错误, 这个怎么解决,是摄像头有特殊要求么?-

重点是ai-express如何下载安装呢???没找到下载链接

有没有写好的脚本借鉴一下?

usb camera接入x3开发板,设备名字可以通过如下方式获取:

ls -all /sys/class/video4linux/

在里面可以看到video0 → ../../devices/platform/soc/b2000000.usb/xhci-hcd.0.auto/usb1/1-1/1-1.3/1-1.3:1.0/video4linux/video0 ,则表示/dev/video0为接入的usb camera设备。

默认配置的是/dev/video8

若与实际的设备名字不一样,则可以修改部署包中的配置文件: configs/vio_config.json.x3dev.hg。

该配置文件有一项:usb_dev_name, 设置正确即可

文档中提到的脚本都是在AI Express版本包中,详细说明https://developer.horizon.ai/forum/id=5f03daae2ab6590143c165d8

还有功能正在开发,最近会发布出来

最近aiexpress版本有更新,再试试这个 https://github.com/HorizonRobotics-Platform/AI-EXPRESS

提示页面找不到,有新的链接吗?

root@x3dvbx3-hynix1G-2666:/userdata/deploy# uname -a

Linux x3dvbx3-hynix1G-2666 4.14.74 #56 SMP PREEMPT Fri Sep 11 15:51:48 +08 2020 aarch64 GNU/Linux

commit 154d01fab280651d50c7fa504fb322bf28658a43

Merge: 804eb55 fa730f0

Author: qingpeng.liu 68099345+horizonrobotics-sailor@users.noreply.github.com

Date: Mon Oct 19 22:23:45 2020 +0800

Merge pull request #1 from horizonrobotics-sailor/master

2.6.0 release

看了下已经是最新的release包了,以上是x3 和 express版本信息,

换个了摄像头还是有错误信息,x3的板子还需要做什么操作才能跑气来demo?

日志:

##function camera_show_format succeed

##function camera_set_params in

V4L2: Setting format to: MJPG 1920x1080

##function camera_set_params succeed

##function camera_start_streaming in

/dev/video8: 4 buffers requested.

/dev/video8: buffer 0 mapped at address 0x7f2f02b000.

/dev/video8: buffer 1 mapped at address 0x7f2ec36000.

/dev/video8: buffer 2 mapped at address 0x7f2e841000.

/dev/video8: buffer 3 mapped at address 0x7f2e44c000.

##function streaming_loop in

##function camera_start_streaming succeed

[ERROR][MM][src/vdi/linux/vdi_osal.c:173] [ERROR][462.85078][10811:10861][JPUAPIFUNC] hit end of stream

[ERROR][MM][src/vdi/linux/vdi_osal.c:173] [ERROR][462.85098][10811:10861][JPGDecoder] JPU_DecGetInitialInfo failed. ret(0x1)

[ERROR][MM][src/vdi/linux/vdi_osal.c:173] [ERROR][462.85102][10811:10861][COMPONENT] Component jpg_decoder will be terminated.

[ERROR][video/src/hb_vdec.c:663] [462.852240]HB_VDEC_SendStream[663] E: [HB_VDEC] HB_VDEC_SendStream:663 Failed VeChn = 0 s32Ret = -269024256

(vioproduce.cpp:381): send stream to decoder fail

[ERROR][MM][src/vdi/linux/vdi_osal.c:173] [ERROR][462.85341][10811:10880][TASK] It’s not allowd to do this operation. Please check the task state 6.

[ERROR][video/src/hb_vdec.c:663] [462.853506]HB_VDEC_SendStream[663] E: [HB_VDEC] HB_VDEC_SendStream:663 Failed VeChn = 0 s32Ret = -269024256

请问,你的问题解决了吗?我的X3开发板,遇到的问题跟你一模一样,通过公司商务联系了地平线的技术支持,感觉太不给力了。

您可以参考一下这个帖子 https://developer.horizon.ai/forumDetail/136488103547258461

您用的是什么摄像头?

按照这个帖子的步骤操作过,也是不行的,摄像头是你们推荐的链接买的

重新刷一下官方的镜像包,开发板自带的镜像不行

好的,我试试看

请问一下这个问题解决没有,我也遇到类似问题:

root@x3dvbx3-hynix1G-2666:/userdata/xjz/deploy# ls -all /sys/class/video4linux/

drwxr-xr-x 2 root root 0 Jan 1 08:09 .

drwxr-xr-x 56 root root 0 Jan 1 08:00 ..

lrwxrwxrwx 1 root root 0 Jan 1 08:09 v4l-subdev0 → ../../devices/platform/soc/b3000000.isp/video4linux/v4l-subdev0

lrwxrwxrwx 1 root root 0 Jan 1 08:09 v4l-subdev1 → ../../devices/platform/soc/b3000000.isp/video4linux/v4l-subdev1

lrwxrwxrwx 1 root root 0 Jan 1 08:09 v4l-subdev2 → ../../devices/platform/soc/b3000000.isp/video4linux/v4l-subdev2

lrwxrwxrwx 1 root root 0 Jan 1 08:09 v4l-subdev3 → ../../devices/platform/soc/b3000000.isp/video4linux/v4l-subdev3

lrwxrwxrwx 1 root root 0 Jan 1 08:09 v4l-subdev4 → ../../devices/platform/soc/b3000000.isp/video4linux/v4l-subdev4

lrwxrwxrwx 1 root root 0 Jan 1 08:09 video0 → ../../devices/platform/soc/b2000000.usb/xhci-hcd.0.auto/usb1/1-1/1-1.1/1-1.1:1.0/video4linux/video0

lrwxrwxrwx 1 root root 0 Jan 1 08:09 video1 → ../../devices/platform/soc/b2000000.usb/xhci-hcd.0.auto/usb1/1-1/1-1.1/1-1.1:1.0/video4linux/video1

##function camera_show_format succeed

##function camera_set_params in

V4L2: Setting format to: MJPG 1920x1080

##function camera_set_params succeed

##function camera_start_streaming in

/dev/video0: 4 buffers requested.

/dev/video0: buffer 0 mapped at address 0x7f57913000.

/dev/video0: buffer 1 mapped at address 0x7f5751e000.

/dev/video0: buffer 2 mapped at address 0x7f57129000.

/dev/video0: buffer 3 mapped at address 0x7f56d34000.

##function streaming_loop in

##function camera_start_streaming succeed

[ERROR][MM][src/vdi/linux/vdi_osal.c:173] [ERROR][924.58412][18435:18497][JPUAPIFUNC] hit end of stream

[ERROR][MM][src/vdi/linux/vdi_osal.c:173] [ERROR][924.58430][18435:18497][JPGDecoder] JPU_DecGetInitialInfo failed. ret(0x1)

[ERROR][MM][src/vdi/linux/vdi_osal.c:173] [ERROR][924.58433][18435:18497][COMPONENT] Component jpg_decoder will be terminated.

[ERROR][MM][src/vdi/linux/vdi_osal.c:173] [ERROR][924.59993][18435:18528][TASK] It’s not allowd to do this operation. Please check the task state 6.

[ERROR][video/src/hb_vdec.c:663] [924.600118]HB_VDEC_SendStream[663] E: [HB_VDEC] HB_VDEC_SendStream:663 Failed VeChn = 0 s32Ret = -269024256

(vioproduce.cpp:432): send stream to decoder fail

[ERROR][MM][src/vdi/linux/vdi_osal.c:173] [ERROR][924.63267][18435:18528][TASK] It’s not allowd to do this operation. Please check the task state 6.

[ERROR][video/src/hb_vdec.c:663] [924.632754]HB_VDEC_SendStream[663] E: [HB_VDEC] HB_VDEC_SendStream:663 Failed VeChn = 0 s32Ret = -269024256

(vioproduce.cpp:432): send stream to decoder fail

[ERROR][vps/hb_vps_api.c:1413] [924.643885]HB_VPS_GetChnFrame[1413] E: VPS error get chn6 frame timeout