 文件系統(tǒng)與資源管理)
CanMV K210 不只是運(yùn)行一段臨時(shí)代碼開(kāi)發(fā)板內(nèi)部還有自己的文件系統(tǒng)。腳本、配置文件、圖片資源和 kmodel 模型文件都需要按照路徑規(guī)則保存和讀取。很多 K210 實(shí)驗(yàn)失敗并不是代碼邏輯錯(cuò)誤而是文件路徑寫(xiě)錯(cuò)、模型文件缺失、main.py自動(dòng)運(yùn)行舊程序或者資源沒(méi)有放到正確位置。本篇重點(diǎn)解決資源管理問(wèn)題。文章目錄理論基礎(chǔ)硬件設(shè)施軟件代碼擴(kuò)展應(yīng)用總結(jié)理論基礎(chǔ)實(shí)驗(yàn)原理CanMV K210 運(yùn)行程序時(shí)代碼文件和資源文件需要存放在開(kāi)發(fā)板能夠訪(fǎng)問(wèn)的位置。常見(jiàn)存儲(chǔ)位置包括開(kāi)發(fā)板內(nèi)部 Flash 和外部 Micro SD 卡。Flash 更適合保存基礎(chǔ)腳本和配置文件Micro SD 卡更適合保存較大的圖片、模型和實(shí)驗(yàn)資源。在 CanMV 中文件系統(tǒng)的作用類(lèi)似電腦中的項(xiàng)目目錄。代碼運(yùn)行時(shí)如果需要加載模型、讀取圖片、保存日志或檢查配置都需要通過(guò)文件路徑找到對(duì)應(yīng)資源。路徑寫(xiě)錯(cuò)、文件名不一致、文件沒(méi)有上傳成功都會(huì)導(dǎo)致程序運(yùn)行異常。CanMV 文件系統(tǒng)中經(jīng)常會(huì)看到main.py、config.json和freq.conf這類(lèi)文件。main.py通常用于上電自動(dòng)運(yùn)行開(kāi)發(fā)板啟動(dòng)后會(huì)優(yōu)先執(zhí)行其中的代碼。config.json多用于保存基礎(chǔ)配置freq.conf與運(yùn)行頻率或系統(tǒng)參數(shù)有關(guān)。后續(xù) AI 視覺(jué)實(shí)驗(yàn)還會(huì)接觸.kmodel模型文件。例如人臉檢測(cè)、YOLO 目標(biāo)檢測(cè)、MNIST 手寫(xiě)數(shù)字識(shí)別、口罩識(shí)別等項(xiàng)目都需要先把模型文件放到開(kāi)發(fā)板可以訪(fǎng)問(wèn)的位置再通過(guò)代碼加載模型。如果路徑不正確模型就無(wú)法正常運(yùn)行。硬件設(shè)施實(shí)驗(yàn)所需硬件本篇主要圍繞文件系統(tǒng)和資源管理展開(kāi)不需要外接復(fù)雜傳感器。只需要 CanMV K210 開(kāi)發(fā)板、Type-C 數(shù)據(jù)線(xiàn)和電腦即可完成基礎(chǔ)實(shí)驗(yàn)。如果需要驗(yàn)證 SD 卡資源管理可以額外準(zhǔn)備 Micro SD 卡。文件管理實(shí)驗(yàn)看起來(lái)不像 LED、蜂鳴器那樣有明顯硬件動(dòng)作但它是 AI 視覺(jué)課程的基礎(chǔ)。后續(xù)加載.kmodel、讀取測(cè)試圖片、保存識(shí)別結(jié)果都依賴(lài)文件系統(tǒng)。尤其是模型文件較大時(shí)使用 SD 卡會(huì)比全部放入 Flash 更方便。Type-C 數(shù)據(jù)線(xiàn)需要支持?jǐn)?shù)據(jù)傳輸不能只支持充電。如果 CanMV IDE 無(wú)法連接開(kāi)發(fā)板文件系統(tǒng)代碼也無(wú)法執(zhí)行。SD 卡插入后如果代碼無(wú)法讀取需要檢查卡槽方向、SD 卡格式和文件路徑。程序運(yùn)行后CanMV IDE 串口終端會(huì)打印開(kāi)發(fā)板文件列表。如果文件系統(tǒng)正常可以看到當(dāng)前目錄下的文件名稱(chēng)。若存在main.py、config.json或模型文件也會(huì)在輸出結(jié)果中顯示。軟件代碼實(shí)驗(yàn)所需軟件環(huán)境本篇需要使用 CanMV IDE 運(yùn)行 MicroPython 文件系統(tǒng)代碼。開(kāi)發(fā)板需要已經(jīng)燒錄 CanMV 固件并且電腦能夠正常識(shí)別串口。若需要管理 SD 卡資源還需要提前準(zhǔn)備好 SD 卡中的文件。文件系統(tǒng)實(shí)驗(yàn)中不建議直接刪除默認(rèn)文件。尤其是main.py、config.json、freq.conf這類(lèi)文件應(yīng)先查看、備份再?zèng)Q定是否修改。對(duì)于臨時(shí)測(cè)試可以新建一個(gè)測(cè)試文件再對(duì)測(cè)試文件進(jìn)行讀取和刪除。下面程序用于查看 CanMV K210 文件系統(tǒng)創(chuàng)建測(cè)試文件讀取文件內(nèi)容再刪除測(cè)試文件。它不會(huì)刪除默認(rèn)系統(tǒng)文件適合作為文件系統(tǒng)管理的入門(mén)實(shí)驗(yàn)。# CanMV K210 文件系統(tǒng) main.py config.json 與資源文件管理實(shí)驗(yàn)# 功能查看文件列表創(chuàng)建測(cè)試文件讀取文件內(nèi)容刪除測(cè)試文件importosimporttimeprint(CanMV K210 file system test start)# 查看當(dāng)前目錄文件print(\n[1] 當(dāng)前文件列表)try:filesos.listdir()print(files)exceptExceptionase:print(讀取文件列表失敗,e)# 創(chuàng)建一個(gè)測(cè)試文件test_filek210_test.txtprint(\n[2] 創(chuàng)建測(cè)試文件,test_file)try:withopen(test_file,w)asf:f.write(CanMV K210 file system test\n)f.write(This file is created by MicroPython.\n)print(測(cè)試文件創(chuàng)建成功)exceptExceptionase:print(測(cè)試文件創(chuàng)建失敗,e)# 再次查看文件列表print(\n[3] 創(chuàng)建后的文件列表)try:print(os.listdir())exceptExceptionase:print(讀取文件列表失敗,e)# 讀取測(cè)試文件內(nèi)容print(\n[4] 讀取測(cè)試文件內(nèi)容)try:withopen(test_file,r)asf:contentf.read()print(content)exceptExceptionase:print(讀取測(cè)試文件失敗,e)# 檢查常見(jiàn)默認(rèn)文件print(\n[5] 檢查常見(jiàn)文件)common_files[main.py,config.json,freq.conf]try:filesos.listdir()fornameincommon_files:ifnameinfiles:print(name,存在)else:print(name,未發(fā)現(xiàn))exceptExceptionase:print(檢查默認(rèn)文件失敗,e)# 刪除測(cè)試文件print(\n[6] 刪除測(cè)試文件,test_file)try:os.remove(test_file)print(測(cè)試文件刪除成功)exceptExceptionase:print(測(cè)試文件刪除失敗,e)# 最后查看文件列表print(\n[7] 刪除后的文件列表)try:print(os.listdir())exceptExceptionase:print(讀取文件列表失敗,e)print(\nCanMV K210 file system test finish)這段代碼圍繞os模塊和文件讀寫(xiě)操作展開(kāi)。os.listdir()用于查看當(dāng)前目錄文件open()用于創(chuàng)建、寫(xiě)入和讀取文件os.remove()用于刪除指定文件。實(shí)驗(yàn)只操作k210_test.txt不會(huì)影響默認(rèn)配置文件。擴(kuò)展應(yīng)用常見(jiàn)問(wèn)題文件系統(tǒng)相關(guān)問(wèn)題在 AI 視覺(jué)實(shí)驗(yàn)中非常常見(jiàn)。模型文件路徑寫(xiě)錯(cuò)、文件名大小寫(xiě)不一致、SD 卡沒(méi)有識(shí)別、main.py自動(dòng)運(yùn)行舊代碼都會(huì)讓程序表現(xiàn)為“代碼沒(méi)錯(cuò)但就是運(yùn)行不了”。這類(lèi)問(wèn)題需要先看文件列表再看路徑再看資源是否存在。擴(kuò)展實(shí)驗(yàn)掌握文件系統(tǒng)管理后可以繼續(xù)擴(kuò)展到資源檢測(cè)和項(xiàng)目啟動(dòng)管理。比如 AI 模型運(yùn)行前先檢查.kmodel是否存在LCD 顯示項(xiàng)目前先檢查字體文件是否存在項(xiàng)目部署前先確認(rèn)main.py中保存的是最新穩(wěn)定版本。對(duì)于課程項(xiàng)目來(lái)說(shuō)文件系統(tǒng)管理不只是輔助內(nèi)容而是后續(xù) AI 視覺(jué)實(shí)驗(yàn)的基礎(chǔ)能力。只要涉及模型文件、圖片資源、字體文件、配置參數(shù)和自動(dòng)運(yùn)行程序都需要先把文件路徑和資源位置處理清楚。總結(jié)本篇圍繞 CanMV K210 文件系統(tǒng)、main.py、config.json和資源文件管理進(jìn)行了梳理。掌握文件列表查看、文件讀寫(xiě)、測(cè)試文件刪除和默認(rèn)文件識(shí)別后后續(xù)實(shí)驗(yàn)會(huì)更穩(wěn)定。K210 的很多運(yùn)行異常都與文件路徑和資源缺失有關(guān)。完成本篇后后續(xù)加載 kmodel 模型、保存項(xiàng)目腳本、管理 SD 卡資源和部署 main.py 自動(dòng)運(yùn)行程序都會(huì)更清晰。