【HZ-T536开发板免费体验】Cangjie Magic调用视觉语言大模型(VLM)真香,是不是可以没有YOLO和OCR了?
目录
引言
编写视觉语言大模型(VLM)程序
交叉编译Cangjie Magic到T536开发板
对cjpm.toml文件的修改
stdx库的配置
拷贝libsecurec.so到cangjie的库文件中
开始交叉编译
部署到开发板
拷贝所需要的库文件
安装curl
运行程序
结束语
本文首发于:【新提醒】【HZ-T536开发板免费体验】3 - Cangjie Magic调用视觉语言大模型(VLM)真香,是不是可以没有YOLO和OCR了? - 北京合众恒跃科技有限公司 - 电子技术论坛 - 广受欢迎的专业电子论坛!
感谢电子发烧友和合众恒跃提供的试用机会。
引言
上次我们已经实现了交叉编译仓颉编程语言的程序在开发板上运行。今天我们会交叉编译Cangjie Magic程序到开发板上。Cangjie Magic是一个基于仓颉编程语言构建的 LLM Agent 开发框架,其主要特点包括:Agent DSL、支持 MCP 协议,支持模块化调用,支持任务智能规划。Cangjie Agent DSL 是一个用于定义和管理 Agent 的专用语言。它允许开发人员通过结构化的系统提示词、工具和各类协作策略来增强 Agent 的功能。
今天我们就尝试在开发板上利用质谱AI的视觉语言模型(VLM)模型来进行图像识别。我们的目标就是类似前几天测试Milk-V Duo S所做的识别车牌号,我们会看到VLM做这个工作简直易如反掌。
编写视觉语言大模型(VLM)程序
视觉语言大模型(VLM)已经成为智能系统的关键基石。随着真实世界的智能任务越来越复杂,VLM模型也亟需在基本的多模态感知之外, 逐渐增强复杂任务中的推理能力,提升自身的准确性、全面性和智能化程度,使得复杂问题解决、长上下文理解、多模态智能体等智能任务成为可能。智谱AI推出新版VLM开源模型 GLM-4.1V-9B-Thinking ,引入思考范式,通过课程采样强化学习 RLCS(Reinforcement Learning with Curriculum Sampling)全面提升模型能力, 达到 10B 参数级别的视觉语言模型的最强性能,在18个榜单任务中持平甚至超过8倍参数量的 Qwen-2.5-VL-72B。 同步开源基座模型 GLM-4.1V-9B-Base。我们采用的就是其免费版本:glm-4.1v-thinking-flash
。
有关Cangjie Magic的安装和创建工程参考官方文档即可:Install Cangjie Magic
在Cangjie Magic中调用质谱AI的视觉模型非常简单,使用下面的程序即可。
package vlm
import magic.dsl.*
import magic.prelude.*
import magic.config.Config@agent[model: "zhipuai:glm-4.1v-thinking-flash"]
class VLMAssistant {@prompt( "以JSON格式给出所找到对象")
}main() {let agent = VLMAssistant()let result = agent.chat(AgentRequest("公交车的车次和车牌号", image: "https://i1.hdslb.com/bfs/archive/d01ed6e71e53e1aa2ab3676770647ced764bf196.jpg"))println(result.content)
}
加入工程目录的名字是vlm,只要执行下面的命令就可以测试程序:
cjpm run --name vlm
交叉编译Cangjie Magic到T536开发板
目前Cangjie Magic 主要是在x86、鸿蒙、苹果电脑等几个平台进行开发和测试,缺少对嵌入式开发板的测试。本文主要讨论AARCH64的Linux平台,这个也是目前在嵌入式开发板中最多的平台之一。
我们使用的是交叉编译,虽然T536开发板的能力很强,本地编译也可以,但是程序编写还是电脑比较方便。构建仓颉语言的交叉编译环境请参考我的上一篇博文。
对cjpm.toml文件的修改
如果是交叉编译,需要在cjpm.toml中加入-B选项以指定启动文件的位置:
[target.aarch64-unknown-linux-gnu]
compile-option = "-B /usr/aarch64-linux-gnu/lib/ -B /usr/lib/gcc-cross/aarch64-linux-gnu/11 --cfg \"ohos=false\""
上面的路径有可能因为操作系统的不同而不同。
一共有两个cjpm.toml要修改,一个是CangjieMagic目录下的,另一个是vlm目录下的。
stdx库的配置
Cangjie Magic是依赖stdx库的,虽然在安装的时候,安装脚本会自动安装本机的stdx库,但是交叉编译所需要的aarch64版本还需要手工下载。
访问stdx库的主页,点击右侧的“发行版”,找到最新的版本,在其中现在aarch64的文件(例如cangjie-stdx-linux-aarch64-1.0.1.1.zip)。
在CangjieMagic\libs目录下建立一个cangjie-stdx-linux-aarch64-1.0.1.1目录,然后解压下载的zip文件。
在CangjieMagic目录下的cjpm.toml加入如下语句:
[target.aarch64-unknown-linux-gnu.bin-dependencies]path-option = ["./libs/cangjie-stdx-linux-aarch64-1.0.1.1/linux_aarch64_llvm/dynamic/stdx"]
拷贝libsecurec.so到cangjie的库文件中
仓颉语言的库文件里面不知道为什么少了一个动态库libsecurec.so,没有这个文件在前面我们交叉编译的时候只好使用--static选项,不过交叉编译Cangjie Magic的时候无法使用这个选项,所以需要将stdx中的libsecurec.so拷贝到D:\cangjie\runtime\lib\linux_aarch64_llvm目录中。这点很重要,否则会产生错误。
开始交叉编译
执行下面的语句就可以开始交叉编译了:
cjpm build `--target aarch64-unknown-linux-gnu`
几分钟之后,整个工程就编译完成了。
部署到开发板
拷贝所需要的库文件
编译后需要将canjie/runtime目录下aarch64的所有so文件、CangjieMagic\libs\cangjie-stdx-linux-aarch64-1.0.1.1\linux_aarch64_llvm\dynamic\stdx下的所有so文件和vlm\target\aarch64-unknown-linux-gnu\release\magic目录下的所有so文件都打包拷贝到开发板上的cangjielib目录下。
然后使用下面的命令设置好所需要的库文件路径:
export LD_LIBRARY_PATH=./cangjielib可以看一下所有库文件的大小:
root@ubuntu:~# du -sh cangjielib/
47M cangjielib/
所有库文件的大小是47M字节,还是比较小的,当然有进一步裁减的余地。
安装curl
Cangjie Magic默认是调用curl来执行大模型推理工作的,而开发板默认是没有curl程序的,需要安装程序。如果找不到该程序,我们的vlm程序会报告下面的错误:
2025-08-01T13:12:46.004227006Z ERROR VLMAssistant: ProcessException: Created process failed, errMessage: "No such file or directory".
An exception has occurred:
Exception: Fail to get chat model responseat magic.core.agent.AgentExecutionException::init(std.core::String)(/mnt/d/CangjieMagic/src/core/agent/agent_executor_exception.cj:8)at magic.agent_executor.react.ReactTask::handleStep(magic.agent_executor.react::ReactStep)(/mnt/d/CangjieMagic/src/agent_executor/react/react_task.cj:74)at magic.agent_executor.react.ReactTask::runOnce()(/mnt/d/CangjieMagic/src/agent_executor/react/react_task.cj:114)at magic.agent_executor.react.ReactExecutor::run(magic.core.agent::Agent, magic.core.agent::AgentRequest)(/mnt/d/CangjieMagic/src/agent_executor/react/react_executor.cj:25)at magic.agent.base.AbsAgent::chat(magic.core.agent::AgentRequest)(/mnt/d/CangjieMagic/src/agent/base/abs_agent.cj:37)at vlm.main()(/mnt/d/test/vlm/src/main.cj:18)
安装curl程序很简单,只需要执行下面命令:
apt update
apt install curl
如果不想安装curl,还有一个办法就是让Cangjie Magic使用仓颉语言的http库,需要在编译时加上curl=false
选项。
运行程序
将vlm可执行文件拷贝到开发板上,并设置好可执行权限。
运行程序前还需要配置环境变量ZHIPU_API_KEY,设置其为质谱AI的API Key。
做好了所有准备工作就可以直接运行程序了,我们采用的测试图片是这样的。
程序执行结果:
root@ubuntu:~# ./vlm
{"busInfo": {"routeNumber": "26", "busId": "26-03", "licensePlate": "鄂B·5C805"}}
效果相当不错!
结束语
从今天测试看,VLM 发展得非常快,可以部分替代 YOLO 和 OCR 的工作,我们可以在开发板上利用它进行拍摄的图片的分析,从而可以得到更丰富的环境信息。
使用Cangjie Magic编写大语言模型调用程序相当简单,确实是一个人工智能利器。当然如果仅仅想完成大语言模型调用,也可以直接调用质谱AI提供的API接口,我们只所以费很大力气完成Cangjie Magic的交叉编译,是为了实现智能代理(AI Agent)。这个问题留待下次介绍。