前面使用NanoLLM的vision.video功能来分析视频或摄像头画面,是一种非常轻便的方法,但是互动性不足,主要是演示视频处理的能力。 为了让大家更进一步感受到NonoLLM库的强大,本文要使用一个集成多模态大模型并加上浏览器互动界面的nano_llm.agents.video_query智能体,不仅可以显示输入源的相关信息,还能动态调整输出token的数量,如下截屏的Max Tokens所示:
输入源可以是以H264/H265编码的多种格式档,也支持摄像头输入。输出部分就直接将识别的内容在浏览器中的画面上显示,最后还能结合前面的nanodb数据库项目,提供RAG检索的功能,适用性非常之高。 目前nano_llm.agents.video_query智能体两个比较明显不足的地方:
不过瑕不掩瑜,这个智能体还是能让我们非常轻松地执行强大的功能。现在我们依旧使用Efficient-Large-Model/VILA1.5-3b多模态大模型来进行演示。首先还是要先执行以下指令,进入Nano_LLM的容器中: $ jetson-containers run $(autotag nano_llm) 然后在容器中执行以下命令,就能运行这项功能: $ python3 -m nano_llm.agents.video_query --api=mlc \ --model Efficient-Large-Model/VILA1.5-3b \ --max-context-len 256 \ --max-new-tokens 32 \ --video-input /data/sample_720p.mp4 \ --video-output webrtc://@:8554/output 前端推荐使用Google的Chrome浏览器,因为使用了WebRTC功能,开启之前请关闭chrome://flags/#enable-webrtc-hide-local-ips-with-mdns选项,然后开启浏览器输入https://127.0.0.1:8050,就能看到下面的画面:
除了右边“Streaming”设定中可以调整“MaxTokens”值之外,在下方也有个对下拉式的对话框,里面提供9条预设的prompts可以直接选择,当然我们也可以直接在框框里面输入自己的prompt进行互动。 如果我们将“--video-input”后面改成“/dev/video0”的话,就能将输入源直接换成接在设备上的USB摄像头。完整指令如下: $ python3 -m nano_llm.agents.video_query --api=mlc \ --model Efficient-Large-Model/VILA1.5-3b \ --max-context-len 256 \ --max-new-tokens 32 \ --video-input /dev/video0 \ --video-output webrtc://@:8554/output 现在画面就变成摄像头所抓取的内容。
但这样就已经满足了吗?还不够的,nano_llm.agents.video_query智能体还能集成前面nanodb的数据查找的功能,让我们将能力扩展到与现有图片进行比对,快速找出符合度高于要求的图片。 例如,我们在前面的nanodb项目中,使用/data/my_dataset/training2017数据集创建矢量数据库,存放在/data/my_dataset/nanodb下的config.json、vectors.bin与metadata.json三个档中,如果需要结合尽量,只要在前面指令中添加最后一行即可,下面列出完整指令: $ python3 -m nano_llm.agents.video_query --api=mlc \ --model Efficient-Large-Model/VILA1.5-3b \ --max-context-len 256 \ --max-new-tokens 32 \ --video-input /datra/sample_720p.mp4 \ --video-output webrtc://@:8554/output \ --nanodb /data/my_dataset/nanodb 项目执行之后,刷新浏览器,就能看到如下图的内容:
现在右边会根据我们提供的prompt,结合多模态大语言模型去识别出对应的描述,然后从nanodb中找出符合度够高的图片,显示在右方栏位上,原本的“Streaming”功能就被挤到下面去了。 同样的,如果我们将输入源改成USB摄像头的话,完整指令如下: $ python3 -m nano_llm.agents.video_query --api=mlc \ --model Efficient-Large-Model/VILA1.5-3b \ --max-context-len 256 \ --max-new-tokens 32 \ --video-input /dev/video0 \ --video-output webrtc://@:8554/output \ --nanodb /data/my_dataset/nanodb 就能看到乳下方截屏的内容:
如果在手上拿起一个orange时,右边跳动显示的内容中也会出现水果类的图片,不过这个显示的跳动很快,也会出现其他描述内容相关的图片。 如何,这个nano_llm.agents.video_query智能体很有意思吧!