yahboom
HomeLearn
Solution
Blog
Online Store
About Us
EN/中文
Jetson AGX Thor📖
1.Get started
  • 01.Learning Route
  • 02.Getting Started Quickly
2.Jetson basic course
  • 01.Jetson board introduction
  • 02.Flashing a Pure Jetson System via SDK
  • 03.Flashing a Pure Jetson System via USB Drive
  • 04.Flashing the Jetson Bootloader using L4T
  • 05.Replacing the SSD
  • 06.Install Jetpack environment
  • 07.Backup SSD system
  • 08.Restore factory image system
  • 09.SSD expansion
  • 10.SSD Speed Test
3.Basic setting course
  • 01.Basic knowledge
  • 02.Network configuration
  • 03.SSH remote login
  • 04.VNC remote control
  • 05.Remote file transfer
  • 06.Jtop tool
  • 07.Exchange space expansion
  • 08.Use VSCode
  • 09.Use VMware
  • 10.Change screen resolution
  • 11.Virtual Desktop
  • 12.Set root user password
  • 13.Configure sudo passwordless operation
  • 14.Managing custom services
  • 15.View system version information
4.OpenCV basic course
  • 01.Image reading
  • 02.Image saving
  • 03.Image modification
  • 04.Image scaling
  • 05.Image cropping
  • 06.Image translation
  • 07.Image mirroring
  • 08.Image grayscale conversion
  • 09.Image binarization
  • 10.Image edge detection
  • 11.Add line segments
  • 12.Add rectangles
  • 13.Add circular shape
  • 14.Add ellipses
  • 15.Add polygons
  • 16.Add Text
5.Vision basic course
  • 01.USB camera preview
  • 02.Use Jupyter Lab
  • 03.Use JetCam
6.Vision advanced course
01.Environment construction
  • 01.TensorFlow
  • 02.PyTorch
  • 03.Torchvision
  • 04.Torchaudio
02.DeepStream development
  • 01.DeepStream environment
  • 02.Four types of detection(traffic)
03.YOLO26 development
  • 01.YOLO Environment Setup
  • 02.CLI Usage
  • 03.Object Detection
  • 04.Instance Segmentation
  • 05.Pose Estimation
  • 06.Image Classification
  • 07.Oriented Bounding Boxes Object Detection
  • 08.Model Conversion
  • 09.Dataset Annotation
  • 10.Model Training_Conversion
  • 11.Model Prediction
04.Mediapipe development
  • 01.Mediapipe environment
  • 02.Hand detection
  • 03.Face detection
  • 04.Face effects
  • 05.3D object recognition
  • 06.Virtual brush
  • 07.Gesture recognition
  • 08.Finger control
  • 09.Posture estimation
  • 10.Face mask
  • 11.Overall detection
  • 12.Green scene removal(Human)
05.QR code recognition
  • 01.Barcode Recognition
  • 02.QR Code Recognition
  • 03.Machine Code Recognition
  • 04.Handwritten Digit Recognition
7.Docker basic course
  • 01.Docker introduction
  • 02.Docker installation
  • 03.Docker command
  • 04.Docker usage
  • 05.Docker interaction
8.ROS2-jazzy
1.ROS2 basic course
  • 1.Introduction to ROS2
  • 2.ROS2 install Jazzy
  • 3.ROS2 development environment
  • 4.ROS2 workspace
  • 5.ROS2 function package
  • 6.ROS2 node
  • 7.ROS2 topic communication
  • 8.ROS2 service communication
  • 9.ROS2 action communication
  • 10.ROS2 custom interface message
  • 11.ROS2 parameter service case
  • 12.ROS2 meta-function package
  • 13.ROS2 distributed communication
  • 14.ROS2 DDS
  • 15.ROS2 time related API
  • 16.ROS2 common command tools
  • 17.ROS2 rviz2 use
  • 18.ROS2 rqt toolbox
  • 19.ROS2 Launch startup file configuration
  • 20.ROS2 recording and playback tool
  • 21.ROS2 URDF model
  • 22.ROS2 Gazebo simulation platform
  • 23.ROS2 TF2 coordinate transformation
2.ROS2 vision course
  • 01.Camera preview (USB)
  • 02.Camera calibration (USB)
  • 03.AR vision (USB)
9.Offline AI model course
Offline large model (Text Interaction)
  • 1.Al large model environment deployment
  • 2.Install large model dialogue platform
  • 3.Meta Al Llama3.2 model
  • 4.Alibaba Cloud Qwen3 model
  • 5.Microsoft Phi-4-mini model
  • 6.DeepSeek DeepSeek-R1 model
  • 7.Alibaba Cloud Qwen2.5v visual multimodal large model
  • 8.Google Gemma3 visual multimodal large model
  • 9.Lava visual multimodal large model
  • 10.MiniCPM-V visual multimodal large model
  • 11.Multimodal visual understand application
  • 12.Multimodal text image application
  • 13.Multimodal video analysis application
  • 14.Multi module visual position application
  • 15.Multimodal table scanning application
  • 16.Multimodal autonomous agent application
Offline large model (Voice Interaction)
  • 0.Voice interaction hardware connection (ReadMe)
  • 1.Offline speech to text (ASR)
  • 2.Offline text to speech (TTS)
  • 3.AI large model voice interaction
  • 4.Multimodal visual understand speech interaction
  • 5.Multimodal text and graphics application
  • 6.Multimodal video analysis application
  • 7.Multi module visual position application
  • 8.Multimodal table scanning application
  • 9.Multimodal autonomous proxy application
  • 10.AI large model offline voice assistant
10.Online AI model course
Online large model (Text Interaction)
  • 1.OpenRouter large model API aggregation platform
  • 2.Multimodal Video Analysis Applications
  • 3.Multimodal visual localization application
  • 4.Multimodal table scanning application
  • 5.Multimodal autonomous proxy application
Online large model (Voice Interaction)
  • 0.Voice interaction hardware connection (ReadMe)
  • 1.Online speech to text (ASR)
  • 2.Online text to speech (TTS)
  • 3.AI large model voice interaction
  • 4.Multimodal visual understand speech interaction
  • 5.Multi module visual position application
  • 6.Multimodal table scanning application
  • 7.Multimodal autonomous proxy application
  • 8.AI large model offline voice assistant
11.Generative AI Applications
12.OpenClaw Advanced Development
  • 00.OpenClaw Quick Start on Jetson Platform
  • 01.OpenClaw Installation
  • 02.OpenClaw Online Platform Deployment
  • 03.OpenClaw Local Model Deployment
  • 04.OpenClaw TUI Interaction
  • 05.OpenClaw WebChat Interaction
  • 06.OpenClaw Tools Introduction
  • 07.OpenClawGate Gateway User Manual
  • 08.OpenClaw Features Overview
  • 09.OpenClawClawHub Introduction (Skill Installation)
  • 10. OpenClaw Switching Models
  • 11.OpenClaw Application - File Management
  • 12.OpenClaw Application - Camera
  • 13.OpenClaw Application - Browser Control
  • 14.OpenClaw Application - Script Execution
  • 15.OpenClaw Application - AI Programming
  • 16.OpenClaw Application - Dedicated AI Assistant
  • 17.OpenClaw WhatsApp Plugin Application
  • 18.OpenClaw Voice Assistant
Download
  • Code
  • SystemFile
  • VM_File
  • Tools
  • Jetson boot files
Download ZIP

Welcome to Jetson AGX Thor repository

13.Multimodal video analysis application

Multimodal Video Analysis Application

Multimodal Video Analysis Application1. Concept Introduction1.1 What is "Video Analysis"?1.2 Implementation Principles2. Code AnalysisKey Code1. Tool Layer Entry (largemodel/utils/tools_manager.py)2. Model Interface Layer and Frame Extraction (largemodel/utils/large_model_interface.py)Code Analysis3. Practical Operations3.1 Configuring the Offline Large Model3.1.1 Configuring the LLM Platform (yahboom.yaml)3.1.2 Configuring the Model Interface (large_model_interface.yaml)3.2 Starting and Testing the Feature (Text Input Mode)4. Common Problems and SolutionsProblem 1: Error message "Video file not found" or "Unable to extract keyframes from video."Problem 2: Analyzing a long video is time-consuming.


1. Concept Introduction

1.1 What is "Video Analysis"?

In the largemodel project, the multimodal video analysis feature enables a robot to process a video and summarize its core content, describe key events, or answer specific questions about the video in natural language. This allows the robot to leap from understanding only static images to understanding the dynamic and temporal world.

The core tool for this feature is **analyze_video`. When a user provides a video file and asks a question (such as "Summarize what this video says"), the system invokes this tool to process and analyze the video and return a textual response from the AI.

1.2 Implementation Principles

The core challenge of offline video analysis lies in how to efficiently process video data containing hundreds or thousands of frames. A popular implementation principle is as follows:

  1. Keyframe Extraction: First, the system does not process every frame of the video. Instead, it extracts the most representative keyframes through algorithms (such as scene boundary detection or fixed-time sampling). This significantly reduces the amount of data required for processing.
  2. Image Encoding: Each extracted keyframe is fed into a visual encoder, similar to visual understanding applications, and converted into a digital vector containing image information.
  3. Temporal Information Fusion: This is the most significant difference from single-image understanding. The model needs to understand the temporal order between these keyframes. Typically, a recurrent neural network (RNN) or Transformer model is used to fuse the vectors of all keyframes to form a "memory" vector that represents the dynamic content of the entire video.
  4. Question-Answering and Generation: The user's text question is encoded and then cross-modally fused with this "memory" vector. Finally, the language model generates a summary of the entire video or an answer to a specific question based on this fused information.

Simply put, it condenses a video into a few key images and their sequence, allowing users to understand the entire story like reading a comic strip and answer related questions.


2. Code Analysis

Key Code

1. Tool Layer Entry (largemodel/utils/tools_manager.py)

The analyze_video function in this file defines the tool's execution flow.

# From largemodel/utils/tools_manager.py
class ToolsManager:
    # ...
    def analyze_video(self, args):
        """
        Analyze video file and provide content description.
        分析视频文件并提供内容描述。
        
        :param args: Arguments containing video path.
        :return: Dictionary with video description and path.
        """
        self.node.get_logger().info(f"Executing analyze_video() tool with args: {args}")
        try:
            video_path = args.get("video_path")
            # ... (智能路径回退机制)
            
            if video_path and os.path.exists(video_path):
                # ... (构建Prompt)
                
                # Use a fully isolated, one-time context for video analysis to ensure a plain text description. / 使用完全隔离的一次性上下文进行视频分析,以确保获得纯文本描述。
                simple_context = [{
                    "role": "system",
                    "content": "You are a video description assistant. ..."
                }]
                
                result = self.node.model_client.infer_with_video(video_path, prompt, message=simple_context)
                
                # ... (处理结果)
                return {
                    "description": description,
                    "video_path": video_path
                }
            # ... (错误处理)

2. Model Interface Layer and Frame Extraction (largemodel/utils/large_model_interface.py)

The functions in this file are responsible for processing video files and passing them to the underlying model.

​x
# From largemodel/utils/large_model_interface.py
​
class model_interface:
    # ...
    def infer_with_video(self, video_path, text=None, message=None):
        """Unified video inference interface. / 统一的视频推理接口。"""
        # ... (准备消息)
        try:
            # 根据 self.llm_platform 决定调用哪个具体实现
            if self.llm_platform == 'ollama':
                response_content = self.ollama_infer(self.messages, video_path=video_path)
            # ... (其他在线平台的逻辑)
        # ...
        return {'response': response_content, 'messages': self.messages.copy()}
​
    def _extract_video_frames(self, video_path, max_frames=5):
        """Extract keyframes from a video for analysis. / 从视频中提取关键帧用于分析。"""
        try:
            import cv2
            # ... (视频读取和帧间隔计算)
            while extracted_count < max_frames:
                # ... (循环读取视频帧)
                if frame_count % frame_interval == 0:
                    # ... (将帧保存为临时图片)
                    frame_base64 = self.encode_file_to_base64(temp_path)
                    frame_images.append(frame_base64)
            # ...
            return frame_images
        # ... (异常处理)

Code Analysis

The implementation of video analysis is more complex than image analysis. It requires a key preprocessing step at the model interface layer: frame extraction.

  1. Tools Layer (tools_manager.py):
  • The analyze_video function is the entry point for video analysis. Its responsibilities are clear: accept a video file path and construct a prompt to request a description of the video content.
  • It initiates the analysis process by calling the self.node.model_client.infer_with_video method. Like the visual understanding tool, it is completely agnostic about the underlying model details and only handles passing the "video file" and "analysis instructions."
  1. Model Interface Layer (large_model_interface.py):
  • The infer_with_video function is the scheduler that connects the upper-level tools with the underlying model. It dispatches tasks to the corresponding implementation functions based on the platform configuration (self.llm_platform).
  • Unlike processing single images, processing videos requires an additional step. The _extract_video_frames method demonstrates the general logic for implementing this step: it uses the cv2 library to read the video and extract several keyframes (by default, five).
  • Each extracted frame is treated as a separate image and typically encoded as a Base64 string.
  • Ultimately, a request containing multiple frame image data and analysis instructions is sent to the main model. The model performs a comprehensive analysis of these consecutive images to generate a description of the entire video content.
  • This "video-to-multiple-images" preprocessing is completely encapsulated in the model interface layer and is transparent to the tool layer.

In summary, the general process of video analysis is: ToolsManager initiates an analysis request -> model_interface intercepts the request and calls _extract_video_frames to decompose the video file into multiple keyframe images -> model_interface sends these images, along with analysis instructions, to the corresponding model platform according to the configuration -> the model returns a comprehensive description of the video -> the results are finally returned to ToolsManager. This design ensures the stability and versatility of upper-layer applications.

3. Practical Operations

3.1 Configuring the Offline Large Model

3.1.1 Configuring the LLM Platform (yahboom.yaml)

This file determines which large model platform the model_service node loads as its primary language model.

  1. Open the file in the terminal:

    xxxxxxxxxx
    vim ~/yahboom_ws/src/largemodel/config/yahboom.yaml
  2. Modify/confirm llm_platform:

    xxxxxxxxxx
    model_service:                          #模型服务器节点参数 Model server node parameters
      ros__parameters:
        language: 'en'                      #大模型接口语言 Large Model Interface Language
        useolinetts: False                   #文字模式下此项无效,可忽略 This item is invalid in text mode and can be ignored
    ​
        # 大模型配置 Large model configuration
        llm_platform: 'ollama'              # 关键: 确保这里是 'ollama' Key: Make sure it's 'ollama'
        regional_setting : "international" 

3.1.2 Configuring the Model Interface (large_model_interface.yaml)

This file defines which visual model to use when the ollama platform is selected.

  1. Open the file in a terminal.
xxxxxxxxxx
vim ~/yahboom_ws/src/largemodel/config/large_model_interface.yaml
  1. Find the configuration related to ollama
xxxxxxxxxx
#.....
## 离线大模型 (Offline Large Language Models)
# Ollama Configuration
ollama_host: "http://localhost:11434"  # Ollama server address
ollama_model: "llava"            # Key: Change this to the multimodal model you downloaded, such as "llava"
#.....

Note: Please ensure that the model specified in the configuration parameters (e.g., llava) can handle multimodal input.

If you have modified any configuration files, please run the following command to compile the ROS workspace for the configuration to take effect.

xxxxxxxxxx
cd ~/yahboom_ws
colcon build

3.2 Starting and Testing the Feature (Text Input Mode)

  1. Prepare video files:

    Place a video file to test in the following path: /home/jetson/yahboom_ws/src/largemodel/resources_file/analyze_video

    Then name the video test_video.mp4

  2. Start the largemodel main program (in text mode):

    Open a terminal and run the following command:

    xxxxxxxxxx
    ros2 launch largemodel largemodel_control.launch.py text_chat_mode:=true
  3. Send text command: Open another terminal again and run the following command,

    xxxxxxxxxx
    ros2 run text_chat text_chat

    Then start typing text: "Analyze this video."

  4. Observation results: In the first terminal running the main program, you will see log output showing that the system received the command, called the analyze_video tool, extracted the keyframes, and finally printed out the AI's summary of the video content.


4. Common Problems and Solutions

Problem 1: Error message "Video file not found" or "Unable to extract keyframes from video."

Solution:

  1. Check the path: Ensure you have placed the video file in the specified path, named it test_video.mp4, and have read permissions.
  2. Video Format/Encoding: Ensure the video file is not corrupted and is in .mp4 format.

Problem 2: Analyzing a long video is time-consuming.

Solution:

  1. Use a lighter model: If hardware resources are limited, switch to a video understanding model with fewer parameters.
Multimodal text image application
Multi module visual position application

COMPANY

  • About us
  • Team Style
  • Blog

LEARNING & EXPLORATION

  • Tutorials
  • Edge AI hardware
  • Educational robots
  • Embedded intelligent hardware

WHERE TO BUY

  • Yahboom Online Store
  • Amazon
  • Alibaba
  • AliExpress
  • Mercado

TECHNOLOGY SUPPORT

  • Email: support@yahboom.com

BE A DISTRIBUTOR

  • Email: sales@yahboom.com
QR Code
QR Code

Copyright © 2017-2026 Yahboom. All Rights Reserved.

EN/中文