一、介绍
将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展示端查看视频流和渲染结果。