# Build a multimodal retail restocking assistant on Armv9 with MNN

## In this learning path

- [Introduction](https://learn.arm.com/learning-paths/cross-platform/multimodel_mnn_v9/)
- [Run multimodal inference with MNN on Armv9](https://learn.arm.com/learning-paths/cross-platform/multimodel_mnn_v9/1_mnn_v9/)
- [Build MNN and prepare an Omni model on Armv9](https://learn.arm.com/learning-paths/cross-platform/multimodel_mnn_v9/2_mnn_build/)
- [Validate text-only inference with an Omni model on Armv9](https://learn.arm.com/learning-paths/cross-platform/multimodel_mnn_v9/3_mnn_text_baseline/)
- [Run a vision retail shelf audit with MNN Omni](https://learn.arm.com/learning-paths/cross-platform/multimodel_mnn_v9/4_mnn_vision/)
- [Convert spoken restock notes into structured tickets with MNN Omni](https://learn.arm.com/learning-paths/cross-platform/multimodel_mnn_v9/5_mnn_vision_audio/)
- [Build a single-shot multimodal restock ticket with MNN Omni](https://learn.arm.com/learning-paths/cross-platform/multimodel_mnn_v9/6_mnn_restock_ticket/)
- [Next Steps](https://learn.arm.com/learning-paths/cross-platform/multimodel_mnn_v9/_next-steps/)

## About this Learning Path

|  |  |
| --- | --- |
| Skill level: | Advanced |
| Reading time: | 1 hr 30 min |
| Last updated: | 03 Aug 2026 |

|  |  |
| --- | --- |
| Author: | Odin Shen , Arm<br>[GitHub](https://github.com/odincodeshen)<br>[LinkedIn](https://linkedin.com/in/odin-shen-lmshen) |
| Arm IP: | [Cortex-A](https://support.arm.com/?tab=compute-ip&Product%20Type=Application%20Processors) |
| Tags: | [ML](https://learn.arm.com/tag/ml) [Linux](https://learn.arm.com/tag/linux) [CMake](https://learn.arm.com/tag/cmake) [CPP](https://learn.arm.com/tag/cpp) [Bash](https://learn.arm.com/tag/bash) |

### Who is this for?
This Learning Path is for developers and engineers who want to run multimodal image, audio, and text models on Armv9 Linux systems using MNN as a portable, CPU-first inference runtime. It is aimed at readers who are comfortable building software from source and want a reproducible on-device workflow without quantization or heterogeneous scheduling.

### What will you learn?
After completing this Learning Path, you'll be able to perform the following tasks:
- Build MNN natively on an Armv9 Linux system for multimodal inference
- Verify a CPU-only Omni model workflow with text, vision, and audio prompts
- Create a reproducible multimodal application flow that combines image and audio inputs into an actionable restock ticket

### Prerequisites
Before starting, you'll need the following prerequisites:
- An Armv9 Linux device with at least 32 GB of available disk space, for example a Radxa Orion O6
- Familiarity with the Linux command line, Git, and building C++ projects with CMake
- Internet access to download source code, model assets, and sample data

### Summary
You’ll build MNN natively on Armv9 Linux, prepare a prebuilt Omni multimodal model, and validate a CPU-only inference workflow. You’ll compile MNN and use `llm_demo` to establish a text-only baseline. Then, you’ll add a vision shelf audit that identifies the sparsest priority zone, and handle unclear images with `NOT_SURE`. Finally, you’ll convert an audio prompt into a reproducible, semicolon-separated restock ticket.

### Frequently asked questions

**How do I know the MNN build worked and the Omni model is ready?**
Use the `llm_demo` binary to load the prebuilt Omni MNN model package. If the package loads without errors and a simple prompt produces tokens, continue to the next steps.

**What should I look for in the text-only baseline output?**
The baseline produces a predictable response with visible token generation. Record the output so you can compare behavior after adding vision and audio inputs.

**What output should the vision shelf audit produce?**
The audit estimates coverage for the top, middle, and bottom shelf levels. It identifies the sparsest priority zone and gives a short reason. If the image is unclear, it returns `NOT_SURE`.

**Do I need a GPU or cloud service to run these demos on Armv9?**
No. The workflow uses a native CPU-only MNN build, and the vision reasoning runs locally without cloud round trips.

**What does the audio-to-ticket result look like and how is it used?**
The result is a single-line, semicolon-separated ticket for predictable parsing and consistent terminal display. Combine it with the vision audit’s priority zone to create an actionable restock ticket.
