今天為大家?guī)淼氖莵碜詣?chuàng)作者X同學(xué)的作品:助盲環(huán)境感知裝置. 這個裝置主要利用Grove Vision AI V2-Camera module識別環(huán)境中的物體,并利用XIAO ESP32S3和樹莓派進(jìn)行語音輸出,結(jié)合了物體檢測和文本轉(zhuǎn)語音技術(shù),以向視障人士提供環(huán)境信息。
故事背景
視障人士在感知環(huán)境和進(jìn)行導(dǎo)航時面臨困難,導(dǎo)致他們的行動能力受到限制。通過這個項目,我將展示如何利用人工智能和計算機視覺技術(shù)來應(yīng)對這一挑戰(zhàn)。實施該項目后,盲人可以在一定程度上減少對周圍環(huán)境和他人的依賴。
該項目結(jié)合了物體檢測和文本轉(zhuǎn)語音技術(shù),以向視障人士提供環(huán)境信息。用戶可以通過耳機收聽轉(zhuǎn)化后的語音,從而更好地理解周圍的世界。
材料清單
硬件
Seeed Studio XIAO ESP32S3 Sense
Rasberry Pi 1 Model B+
樹莓派外殼
Grove -Vision Al Module V2
OV5647-69.1 FOV Camera module for Raspberry Pi 3B+4B
應(yīng)用軟件
SenseCraft AI
Arduino IDE
使用SenseCraft AI開發(fā)物體檢測模型
我使用 SenseCraft AI 來訓(xùn)練物體檢測模型。SenseCraft AI 是進(jìn)行模型訓(xùn)練和模型部署的領(lǐng)先開發(fā)平臺。
要啟動一個項目,您需要在 SenseCraft AI 輸入您的賬戶(或創(chuàng)建一個免費賬戶)。然后就可以使用平臺上提供的模型或者創(chuàng)建自己的模型了,這十分便捷。
在 SenseCraft AI 中,您可以上傳現(xiàn)有的數(shù)據(jù),也可以使用連接設(shè)備記錄新數(shù)據(jù)。在我的項目中,我準(zhǔn)備了一個數(shù)據(jù)集,其中包括一些常見物品,如椅子、桌子和路上的行人。數(shù)據(jù)集中包含的物品越多,模型就越有效。數(shù)據(jù)集的大小也很重要。我們能拍攝到的特定物體的圖像越多,準(zhǔn)確度就越高。
我在最初的項目中上傳了 3 個物體的 312 張圖片。以后我會上傳更多對象的更多圖像,調(diào)高模型的準(zhǔn)確度。
將物品鑒別模型上傳到Grove Vision AI
打開SenseCraft平臺:Home - SenseCraft AI
打開SenseCraft主頁,找到模型訓(xùn)練選項,點擊進(jìn)入
在模型訓(xùn)練界面首先選擇分類識別類型,然后在”2”處選擇設(shè)備Grove -Vision Al Module V2 點擊連接,接著按照具體需求是否添加類別,并為分類命名
接著在第二步處選擇設(shè)備Grove -Vision Al Module V2,點擊開始訓(xùn)練,高級設(shè)置按需設(shè)置,否則默認(rèn)即可,訓(xùn)練完畢后即可選擇設(shè)備Grove -Vision Al Module V2進(jìn)行模型部署。等待部署完成,我們在頁面右側(cè)即可觀察到,通過攝像頭對準(zhǔn)物品,效果預(yù)覽內(nèi)的物體置信度也會實時改變。此步實現(xiàn)及說明模型部署成功。
使用XIAO ESP32S3通過串口輸出識別物體
將XIAO ESP32S3與 上傳好模型的Grove -Vision Al Module V2連接。以下是輸出識別物體序號的完整程序,請為 XIAO ESP32 系列編譯并上傳此程序
#includeSSCMA AI; void setup() { AI.begin(); Serial.begin(600); } void loop() { if (!AI.invoke()) { Serial.println("invoke success"); Serial.printf("perf: prepocess=%d, inference=%d, postprocess=%d ", AI.perf().prepocess, AI.perf().inference, AI.perf().postprocess); for (int i = 0; i < AI.boxes().size(); i++) { Serial.printf( "box %d: x=%d, y=%d, w=%d, h=%d, score=%d, target=%d ", i, AI.boxes()[i].x, AI.boxes()[i].y, AI.boxes()[i].w, AI.boxes()[i].h, AI.boxes()[i].score, AI.boxes()[i].target); } for (int i = 0; i < AI.classes().size(); i++) { Serial.printf("class %d: target=%d, score=%d ", i, AI.classes()[i].target, AI.classes()[i].score); delay(2000); } for (int i = 0; i < AI.points().size(); i++)0 { Serial.printf("point %d: x=%d, y=%d, z=%d, score=%d, target=%d ", i, AI.points()[i].x, AI.points()[i].y, AI.points()[i].z, AI.points()[i].score, AI.points()[i].target); } } }
輸出結(jié)果:
當(dāng)我將攝像頭對準(zhǔn)人時,串口輸出target1代表識別到人
當(dāng)我將攝像頭對準(zhǔn)桌子時,串口輸出target2代表識別到桌子
當(dāng)我將攝像頭對準(zhǔn)椅子時,串口輸出target0代表識別到椅子
配置樹莓派
XIAO ESP32S3 Sense搭配Grove -Vision Al Module V2 可檢測周圍環(huán)境中的物體,并返回物體的名稱和位置。Raspberry Pi 用于通過 UART 接收物體名稱和位置,并將文本轉(zhuǎn)換為語音。在這里使用的是 Raspberry Pi 4 B,性能令人滿意。在 Raspberry Pi 上安裝操作系統(tǒng)后,我配置了音頻控制系統(tǒng),并將音量設(shè)置為 100%。
sudo raspi-config
然后,我在 Pi 上安裝了免費的軟件包 Festival。Festival 由英國語音技術(shù)研究中心編寫,為構(gòu)建語音合成系統(tǒng)提供了一個框架。它通過多種應(yīng)用程序接口提供完整的文本到語音功能:從 shell 層、通過命令解釋器、作為 C++ 庫、從 Java 和 Emacs 編輯器界面。
使用以下命令安裝 festival:
sudo apt-get install -y libasound2-plugins festival
安裝festival后,連接了一個有線耳機,并使用以下音頻進(jìn)行了測試
echo "Hello World!" | festival --tts
然后,在 Raspberry Pi 上安裝了 python 串行模塊。
通過一根 USB-C 電纜將 XIAO ESP32S3 Sense 與 Raspberry Pi 連接起來。
為樹莓派編寫代碼
在編寫代碼之前,我們需要知道 XIAO Sense 板的串口號。
連接好 XIAO Sense 板并將其插入 Raspberry Pi 后,我們可以在終端運行以下命令。
dmesg | grep tty
結(jié)果是:
現(xiàn)在我們知道串行端口號了。是時候編寫代碼了。我為 Raspberry Pi 編寫了以下代碼,將接收到的文本轉(zhuǎn)換為語音
#!/usr/bin/env python # 這行指定腳本使用的解釋器(Python) import time import serial import os # 設(shè)置串口連接的參數(shù),用于與設(shè)備進(jìn)行通信 ser = serial.Serial( port='/dev/ttyACM1', # 指定設(shè)備連接的端口。 baudrate = 115200, # 設(shè)置串口通信的波特率 parity=serial.PARITY_NONE, # 不使用奇偶校驗位 stopbits=serial.STOPBITS_ONE, # 使用一個停止位 bytesize=serial.EIGHTBITS, # 每個字節(jié)有8位數(shù)據(jù)位 timeout=1 # 設(shè)置讀取串口時的超時時間為1秒 ) # 進(jìn)入一個無限循環(huán),不斷讀取串口數(shù)據(jù) while True: receive_msg=ser.readline() # 從串口讀取一行數(shù)據(jù) print(receive_msg) # 打印接收到的數(shù)據(jù) # 如果接收到的數(shù)據(jù)中包含“basin”的字樣,則執(zhí)行以下操作: if b'basin' in receive_msg.lower(): os.system('echo "basin in front" | festival --tts')# 使用festival語音合成引擎朗讀提示信息。 # 如果接收到的數(shù)據(jù)中包含“1”的字樣,則執(zhí)行以下操作: if b'1' in receive_msg.lower(): os.system('echo "people in front" | festival --tts') # 如果接收到的數(shù)據(jù)中包含“0”的字樣,則執(zhí)行以下操作: if b'0' in receive_msg.lower(): os.system('echo "chair in front" | festival --tts') # 如果接收到的數(shù)據(jù)中包含“2”的字樣,則執(zhí)行以下操作: if b'2' in receive_msg.lower(): os.system('echo " table in front" | festival --tts') //以此類推
測試結(jié)果:
腳本設(shè)置開機自動啟動
bashrc 配置
修改 .bashrc 文件。
sudo nano /home/pi/.bashrc在 /home/pi/.bashrc 文件的末尾添加啟動命令文本。
echo Running at boot sudo python /home/pi/sample.py
上面的 echo 命令用于顯示 .bashrc 文件中的腳本已經(jīng)開始運行。
Bash RC 配置程序會在樹莓派啟動時自動運行。.bashrc 文件中的命令在運行時會打開一個新的終端窗口。
但是當(dāng)我在配置好以上內(nèi)容時,出現(xiàn)如下報錯:
解決辦法:
對我來說,我必須添加創(chuàng)建文件 /etc/asound.conf
并在此文件中并添加此內(nèi)容:
pcm.!default { type asym playback.pcm { type plug slave.pcm "hw:2,0" } }
這樣在樹莓派連接電源開機時,此程序就會自動運行啦!
外殼組裝
基于Seeed樹莓派基礎(chǔ)外殼,通過打孔將XIAO ESP32S3與Grove V2安裝在殼子外部。
-
計算機
+關(guān)注
關(guān)注
19文章
7494瀏覽量
87952 -
耳機
+關(guān)注
關(guān)注
28文章
3009瀏覽量
81464 -
AI
+關(guān)注
關(guān)注
87文章
30891瀏覽量
269083 -
樹莓派
+關(guān)注
關(guān)注
116文章
1707瀏覽量
105631
原文標(biāo)題:創(chuàng)客項目秀|基于Grove Vision AI V2和XIAO ESP32S3的助盲環(huán)境感知裝置
文章出處:【微信號:ChaiHuoMakerSpace,微信公眾號:柴火創(chuàng)客空間】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論