【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.pswp.cn/bicheng/92152.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/92152.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/92152.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

最長連續序列(每天刷力扣hot100系列)

目錄 題目介紹: 哈希表法: 復雜度分析: 思路分析: unordered_set 和 unordered_map的比較: 1. 核心區別 2. 使用場景 3. 在本題中的選擇 4. 性能對比 5. 成員函數差異 unordered_table.begin()函數是返回的鍵…

國標渠道研究:專業為渠道策略提供數據支持(渠道調研)

北京國標市場調查有限公司是一家專業的市場調查公司,(線上問卷調查)(第三方市場咨詢)(消費者調查研究)專注于為企業提供全方位的渠道研究服務。服務范圍包括渠道策略研究、渠道銷售數據分析和渠…

深入理解 C 語言中的拷貝函數

目錄1. C 語言中的主要拷貝函數2. strcpy:字符串拷貝函數簽名示例局限性3. strncpy:指定長度的字符串拷貝函數簽名示例局限性4. memcpy:通用內存拷貝函數簽名示例優勢局限性5. memmove:支持重疊內存拷貝函數簽名示例優勢局限性6. …

主數據變更流程

主數據(如客戶、供應商、產品等)的變更流程(新增、更新、停用等)是主數據管理(MDM)的核心環節,其設計需兼顧數據質量(準確性、一致性)、業務合規(審批權限、審…

VUE2 學習筆記 合集

???????VUE2 學習筆記1 VUE特點、開發者工具、入門Demo-CSDN博客 VUE2 學習筆記2 數據綁定、數據代理、MVVM_vue2的數據綁定-CSDN博客 VUE2 學習筆記3 v-on、事件修飾符、鍵盤事件_vue2組件 點擊事件-CSDN博客 VU2 學習筆記4 計算屬性、監視屬性-CSDN博客 VUE2 學習…

【motion】HumanML3D 的安裝1:環境搭建

https://github.com/EricGuo5513/HumanML3D/issues/10 (base) root@k8s-master-pfsrv:/home/zhangbin/perfwork/01_ai/15_HumanML3D# conda env create -f environment.yaml Retrieving notices: ...working... done Channels:- defaults Platform: linux-64 Collecting

Pig Cloud遇到websocket不能實現同一個用戶不同瀏覽器接受到廣播的消息解決方案

自定義SecuritySessionKeyGenerator類,為每個客戶端連接建立唯一的keypackage com.pig4cloud.plugin.websocket.custom;import com.pig4cloud.plugin.websocket.holder.SessionKeyGenerator; import org.springframework.web.socket.WebSocketSession;import java.util.UUID; p…

藍訊hifi添加自定義算法

總結 自己定義算法要添加在hifi工程里 hifi工程在wiki上可以下載,名字叫做project 在main.c里添加了自己的算法,算法的執行涉及到通道與effect_id 編譯hifi項目需要安裝 XtensaTool 與hifi4 configuration file 編譯成功后移植bin文件 通過hifi4_effect_audio_process調用hifi…

【軟考中級網絡工程師】知識點之 STP 協議,網絡的 “交通協管員”

目錄一、STP 協議初相識二、STP 協議登場,網絡環路難題迎刃而解2.1 網絡環路困境2.2 STP 協議閃亮登場三、STP 協議核心探秘:生成樹算法3.1 選舉根網橋3.2 確定根端口3.3 選定指定端口四、STP 協議端口狀態解析4.1 阻塞狀態4.2 監聽狀態4.3 學習狀態4.4 …

分布式網關技術 + BGP EVPN,解鎖真正的無縫漫游

無線漫游的核心挑戰與標準化協議支持在構建高性能無線網絡時,實現用戶終端(STA)在不同接入點(AP)之間平滑、快速的漫游是核心目標之一。我們的無線AP產品原生支持業界標準的802.11k/v/r協議(常稱為“快速漫…

廣東省省考備考(第六十七天8.5)——資料分析、數量(強化訓練)

資料分析 錯題解析解析今日題目正確率:87% 數量:數學運算 錯題解析解析解析解析標記題解析解析今日題目正確率:73%

FLAN-T5:大規模指令微調的統一語言模型框架

本文由「大千AI助手」原創發布,專注用真話講AI,回歸技術本質。拒絕神話或妖魔化。搜索「大千AI助手」關注我,一起撕掉過度包裝,學習真實的AI技術! 一、核心定義與原始論文 FLAN-T5是Google于2022年提出的指令微調&…

jenkins插件Active Choices的使用通過參數動態控制多選參數的選項

title: jenkins插件Active Choices的使用通過參數動態控制多選參數的選項 tags: - jenkins categories: - 學習語錄Jenkins Active Choices 插件:通過參數動態控制多選參數選項一、插件介紹Active Choices 插件(以前稱為 Uno Choice 插件)是…

Matplotlib(六)- 坐標軸定制

文章目錄一、坐標軸概述1. 坐標軸介紹2. 坐標軸相關屬性二、坐標軸1. axes() 方法介紹2. 示例:添加多個繪圖區域三、坐標軸的刻度1. 坐標軸的刻度介紹2. 刻度定位器和格式器2.1 刻度定位器2.2 刻度格式器2.3 示例:刻度定位和格式3. 刻度樣式3.1 tick_par…

【物聯網】基于樹莓派的物聯網開發【22】——樹莓派獲取傳感器數據實時存儲實戰

場景介紹 今天程序貓帶領大家如何實時獲取樹莓派傳感器溫濕度數據,并自動存儲到數據庫中。確保數據的持續性。 實現過程 硬件連接 樹莓派4b連接GPIO引腳與DHT11傳感器; 硬件只涉及樹莓派、DHT11傳感器。 DHT11的信號引腳連接樹莓派的GPIO17, DHT11的Vdd&…

Linux DNS緩存與Nginx DNS緩存運維文檔

一、Linux DNS緩存機制與配置 1. Linux DNS緩存原理 Linux系統中的DNS緩存主要通過以下幾種方式實現: ?** nscd(Name Service Caching Daemon)**?:系統級緩存服務,可緩存DNS解析、主機名解析等信息?dnsmasq?:輕量級DNS轉發器和…

Java開發時出現的問題---并發與資源管理深層問題

Java 并發模型基于 JVM 內存模型(JMM),資源管理涉及 IO、線程、鎖等關鍵組件。若對并發語義、資源生命周期理解不透徹,易引發死鎖、內存泄漏、數據錯亂等嚴重問題。1. 并發三大特性(可見性、原子性、有序性&#xff09…

從「同步」到「異步」:用 aiohttp 把 Python 網絡 I/O 榨到極致

目錄 一、寫在前面:為什么 IO 是瓶頸 二、同步模型:requests 的憂傷 三、線程池:用并發掩蓋阻塞 四、aiohttp:讓「等待」非阻塞 4.1 安裝與版本約定 4.2 異步客戶端:asyncio aiohttp 4.3 錯誤處理與超時 4.4 …

MySQL 在麒麟系統上部署使用 + DBeaver 遠程連接 + SQL 數據導入完整流程

🚀 MySQL 在麒麟系統上部署使用 DBeaver 遠程連接 SQL 數據導入完整流程適用于國產操作系統(如:麒麟 / 統信 / Ubuntu)和 MySQL 8.0。包含遠程配置、授權連接、SQL 導入、DBeaver連接配置等常見問題解決方案。📦 環境…

C語言-指針初級(指針定義、指針的作用、指針的計算、野指針、懸空指針、void類型指針)

本章概述思維導圖:C語言指針指針是C語言中最強大但也最容易混淆的特性之一。它提供了直接操作內存地址的能力,使得C語言具有高效性和靈活性。下面我將詳細介紹C語言指針的各個方面。指針定義指針的本質:指針是一個變量,其值為另一…