当前位置: 首页 > news >正文

【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)。
 

image.png


在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。

做好了所有准备工作就可以直接运行程序了,我们采用的测试图片是这样的。

d01ed6e71e53e1aa2ab3676770647ced764bf196.jpg

程序执行结果:

root@ubuntu:~# ./vlm
{"busInfo": {"routeNumber": "26", "busId": "26-03", "licensePlate": "鄂B·5C805"}}

效果相当不错!

结束语

从今天测试看,VLM 发展得非常快,可以部分替代 YOLO 和 OCR 的工作,我们可以在开发板上利用它进行拍摄的图片的分析,从而可以得到更丰富的环境信息。

使用Cangjie Magic编写大语言模型调用程序相当简单,确实是一个人工智能利器。当然如果仅仅想完成大语言模型调用,也可以直接调用质谱AI提供的API接口,我们只所以费很大力气完成Cangjie Magic的交叉编译,是为了实现智能代理(AI Agent)。这个问题留待下次介绍。

http://www.dtcms.com/a/314229.html

相关文章:

  • 通用 PDF 文件流 OCR 到文本 API 接口
  • 使用 Aspose.OCR 将图像文本转换为可编辑文本
  • 基础14-Java集合框架:掌握List、Set和Map的使用
  • 十字滑台:精密制造的“心脏“如何跳动?
  • 耘瞳科技国产化点云处理软件,开启智能化三维测量新时代
  • [机器学习]01-构建简单的贝叶斯分类器
  • 抓包相关知识学习
  • 项目复盘:Arena Of Furnace
  • vtkSSAAPass代码解析
  • [自动化Adapt] 回放策略 | AI模型驱动程序
  • Python异常捕获全指南
  • 智慧泵房赋能二次供水互联网化:物联网驱动下的全场景解决方案
  • Solidity全局变量与安全实践指南
  • Linux 文件与目录属性管理总结
  • 设备能力指标(CP/CPK)
  • C盘空间清理
  • JVM学习日记(十六)Day16——性能监控与调优(三)
  • AgxOrin平台JetPack5.x版本fix multi-cam race condition 补丁
  • 【Conda】常用指令操作
  • 机器学习——决策树(DecisionTree)+ 过采样 + 交叉验证 案例:电信客户流失数据
  • VAE学习笔记
  • Linux 网络深度剖析:传输层协议 UDP/TCP 原理详解
  • 【STM32】GPIO的输入输出
  • 正点原子STM32MP257开发板移植ubuntu24.04根文件系统(带桌面版)
  • Android的UI View是如何最终绘制成一帧显示在手机屏幕上?
  • Android Espresso 测试框架深度解析:从入门到精通
  • imx6ull-驱动开发篇8——设备树常用 OF 操作函数
  • 力扣热题100——哈希表
  • 大模型×垂直领域:预算、时间、空间三重夹击下的生存法则
  • 基于ensp的防火墙安全策略及认证策略综合实验