前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >在Jetson上玩转大模型Day15:NanoLLM开发平台(4):视觉分析助手

在Jetson上玩转大模型Day15:NanoLLM开发平台(4):视觉分析助手

原创
作者头像
GPUS Lady
修改2024-11-26 21:32:27
修改2024-11-26 21:32:27
2560
举报

我们前面应用NanoLLM开发平台,已经很轻松地创造出语音对话助手、多模态识别等应用,本篇文章要更进一步调用NanoLLM的视频相关API,搭配合适的大语言模型,来对视频档或摄像头获取的内容进行动态分析功能。

这里我们将模型换成同样支持多模态的Efficient-Large-Model/VILA1.5-3b,并且前后使用3个API来进行测试,大家可以相互比较一下,并且后续自行调整出最适合应用场景的内容。

如果想用自己的USB摄像头进行测试,请在进入容器之前就先将摄像头插到设备上,然后再执行以下指令进入NanoLLM容器:

$ jetson-containers run $(autotag nano_llm)

进入容器之后,可以先执行以下指令去检查是否检测到摄像头:

$ ls /dev/video*

如果有看到反应,就表示在容器内已经找到摄像头了。

现在我们还是先从简单的nano_llm.chat聊天功能以及图片/视频内容识别开始。这些需要提供两个prompt给nano_llm.chat,系统会从第一个prompt去分析所需要识别的档路径,第二个提示词才是我们所要问的问题。现在我们先尝试用中文提示词:

$ python3 -m nano_llm.chat --api=mlc \

--model Efficient-Large-Model/VILA1.5-3b \

--prompt '/data/images/path.jpg' \

--prompt '请问图中提供什么信息?'

下面是 /data/images/path.jpg 的内容:

系统最终所提供的回应(不一定完全一样):

这里可以看出,在终端模式下显示中文的能力不完整,因此会出现乱码。其次系统会识别我们prompt的语种,并用相同语种来做回应,还挺智能的。

现在我们将第二个promt改成“What information in the picture ?”,跑出来的结果如下截屏,回答的非常正确:“1.黄色标志,黑色字体,写着“禁止出口私家路”。图2:一条两边都是草的弯弯曲曲的路。”

如果我们要对视频进行分析的话,这里的底层会用到项目作者早期的jetson-utils里的videoSource与videoOutput两组库,输入视频支持H264/H265编码的MP4/MKV/AVI/ FLV等格式,输出部分还支持RTP/RTSP/WebRTC等网络视频协议,分别透过“--video-input”与“--video-output”两个参数进行传递。

在nano_llm.vision.video、nano_llm.agents.video_query这些工具里面,都调用了这些库。

现在使用nano_llm.vision.video这个工具,简单读入视频并根据提示词进行分析,再将分析结果并入视频中,然后输出到指定视频中,我们就可以在输出结果中查看结果。

请输入以下指令试试看:

$ python3 -m nano_llm.vision.video \

--model Efficient-Large-Model/VILA1.5-3b \

--max-images 8 \

--max-new-tokens 48 \

--video-input /data/sample_720p.mp4 \

--video-output /data/sample_output.mp4 \

--prompt 'What changes occurred in the video?'

输入的/data/sample_720p.mp4是一段在公路上拍摄的车流与行人视频,识别厚度视频存放在/data/sample_output.mp4。下图是截取其中一张在视频上嵌入“提示词回应”的截图:

现在我们可以将“--video-input”参数指向“/dev/video0”去调用摄像头,但是输出指向一个文件时,由于应用的结束得用“Ctrl-C”的去中断,导致视频储存不完整而无法打开,那我们就没办法去检查执行的结果了。

推荐的办法,就是查看摄像头结果时,将结果透过RTP协议输出到指定电脑中,然后在电脑里用gst-launch来接收结果。

现在我们在Jetson Orin的容器里面执行以下指令:

$ python3 -m nano_llm.vision.video \

--model Efficient-Large-Model/VILA1.5-3b \

--max-images 8 \

--max-new-tokens 48 \

--video-input /dev/video0 \

--video-output rtp://<IP_OF_TARGET>:1234 \

--prompt 'What are in his hand?'

开始执行之后,在目标的Linux电脑上执行以下指令:

$ gst-launch-1.0 udpsrc port=1234 \

caps="application/x-rtp, media=(string)video, \

clock-rate=(int)90000, encoding-name=(string)H264, payload=(int)96" \

! rtph264depay ! decodebin ! videoconvert ! autovideosink

然后就会在Linux电脑上看到以下的显示:

这样就能解决在摄像头里进行实时识别的问题。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档