如果你的音箱連結了ChatGPT,會有怎樣的體驗?
今天推薦一個可以學習新技術的開源項目!軟硬體都開源了!幹貨滿滿!且不難!
工程描述
作者做了一個智能AI音箱。
主要就是将音箱連接配接ChatGPT,與之對話,充當語音助手。
還能借助ChatGPT函數調用功能,控制實體裝置。
版本說明
智能AI音箱有了兩個版本,以下是版本對比:
- Linux版:功能上限高,獨立性更強。
- ESP32版:小巧,成本低。
第一版可以通過軟體更新達到第二版的所有效果!
那麼問題就來了,要如何實作“智能對話”效果呢?
教程下滑可見!
兩個版本的教程小編都放在這裡了。
其中Linux版相對簡單,ESP32版價格更低,可以根據需求參考學習。
Linux版
章節導航:硬體部分(4張設計圖+設計原理)、代碼倉庫(3步搞定克隆)、修改WebUI(4步搞定UI修改)
一、硬體部分
音頻原理圖
接口原理圖
電源原理圖
PCB圖
PCB由一個基本的linux派和語言擴充模版組成。
荔枝派Zero的擴充版,理論上,通過修改PCB,可以支援絕大多數的派。
選擇荔枝派主要是因為其尺寸迷你,價格性能也不錯。
擴充子產品提供了基本的麥克風輸入和功放,同時提供锂電池充放電系統,達到便攜的目的。
二、代碼倉庫
Linux版代碼用的是免費的百度智能雲語音api。
開源代碼倉庫入口
https://oshwhub.com/kjpig/esp32-chat-meow
第一步
克隆本項目到OrangePi (使用Unbuntu20.04系統為例),并安裝依賴。
git clone https://github.com/meowkj/chat-meow.git && cd chat-meow
安裝必備依賴:
apt-get update -y && RUN apt-get install -y python3-dev portaudio19-dev python3-pyaudio pip install Flask openai PyAudio PyYAML requests
或者使用準備好的Docker鏡像(測試):
docker pull kjqaq/chatmeow
第二步:擷取百度和openai的key
擷取百度雲KEY,需要有短文字識别,語音合成權限。
百度官方文檔位址:
- 語音識别:http://ai.baidu.com/docs#/ASR-API/top
- 語音合成:http://ai.baidu.com/docs#/TTS-API/top
openai apikey 檢視連結:
https://platform.openai.com/account/api-keys
根目錄下建立key.yml檔案,按照如下格式填入:
BAIDU_KEY:
- "4E1BG9lTnlSeIf1NQFlrxxxx" # 填寫網頁上申請的appkey
- "544ca4657ba8002e3dea3ac2f5fxxxxx" # 填寫網頁上申請的APP SECRET
- "123456PYTHON" # 填寫一個CUID 隻是用來區分不同應用 随意填寫
OPENAI_API_KEY: "sk-xxxxxxxxxxxxxxxxxxxxx" # openai的apikey
第三步:運作
在根目錄下使用自己的python環境
python3 mian.py
使用docker提供的環境(測試)
docker run --itd -v .:/chat --privileged -itd kjqaq/chatmeow
可能的問題
荔枝派Zero的音頻預設不會打開,需要像電腦調音量一樣打開音量。
三、修改WebUI(可選)
Linux版代碼目前帶了一個網頁UI可以調整一些參數,也能動态顯示GPT傳回的參數。
UI編譯好了,已經放在Flask伺服器中,如果要修改UI的話可以這樣做:
第一步:環境準備
安裝NodeJS,最新穩定版即可。
使用pnmp作為包管理器。
使用Vue3架構簡單快速建構了一下頁面。
第二步:克隆代碼倉庫
git clone https://github.com/ChatMeow/chat-meow-ui.git cd chat-meow-ui
第三步:安裝依賴
pnpm install
編譯并啟動支援熱重載的測試伺服器:
pnpm run serve
第四步:編譯為生産準備的檔案
pnpm run build
編譯好得到dist目錄裡面的檔案。
放入chat-mewo/meow/web,其中:
- html檔案放入templates檔案夾中
- js/css檔案放入static檔案夾中對應的js/css目錄中
ESP32版
章節導航:硬體部分(9張設計圖+設計原理)、ESP32版服務端代碼倉庫(Python版,4步搞定)、ESP32端代碼倉庫(ESP-IDF版,4步搞定)
一、硬體部分
ESP32原理圖
POWER原理圖
CODEC原理圖
ADC原理圖
MIC_PA原理圖
Others原理圖
PCB圖
ESP32語音闆子使用嘉立創SMT工藝,比我自己焊接的好太多了,可惜沒用上彩色絲印。
PCB實物圖&彩色絲印3D預覽圖
ESP32版結構流程圖
這個版本由于ESP32性能不足,需要一個服務端處理語音資料。故分為兩個部分:
一個是服務端,一個是邊緣裝置(ESP32)。
服務端需要完成計算量較大的語言語音轉文字和語言合成工序,同時也要和ChatGPT進行通訊。
邊緣裝置(ESP32)需要做的事情很簡單,捕捉語音傳給服務端,同時從服務端下載下傳合成好的語音再輸出。
目前PCB基本相容ESP32-LyraT-Mini開發版,代碼使用ADF庫的話隻需修改按鈕定義。
未來會設計更加迷你的PCB闆子。
二、ESP32版服務端代碼倉庫(Python)
代碼倉庫有兩個,一個服務端的代碼由Python驅動,一個是ESP32端由ESP-ADF驅動。
開源倉庫入口
https://oshwhub.com/kjpig/esp32-chat-meow
值得一提的是,pyopenjtalk庫似乎隻能在Python3.10上安裝成功,此庫隻影響日語生成。
第一步:環境安裝
克隆本項目:
git clone https://github.com/ChatMeow/chat-meow-vits.git cd chat-mewo-vits
安裝環境(推薦使用虛拟環境):
pip install -r requirements.txt
如果不存在配置檔案的話,第一次運作會生成配置檔案:
python server.py
第二步:配置參數
需要先配置OpenAI登入資訊,在檔案openai.ini中。
配置access_token:
①這是實際用于身份驗證的内容喵,可以在https://chat.openai.com/api/auth/session找到
②2周後失效
③推薦的身份驗證方法
④如果您登入到https://chat.openai.com/,然後轉到https://chat.openai.com/api/auth/session,就可以找到
或者配置email(郵箱) password(密碼)字段:
隻需配置access_token(推薦)或者是email&password, 如果都配置了,優先使用access_token。
你需要準備一個Vits模型檔案,測試用模型可以在Release處下載下傳,僅供參考。
模型檔案(*.pth config.json)放入根目錄model(可改)檔案夾裡面,同時需要在config.ini中填入對應的檔案名稱。
第三步:啟動測試伺服器
python main.py
第四步:開始測試伺服器
①開始運作後,将啟動預設端口8000的伺服器
②/upload接口支援POST方法,和ESP32配置項目Server URL to send data對應
③完成tts,vits後在static目錄生成out.wav檔案,和ESP32配置項目Server FILE URL to play voice對應
即将支援
- 一個網頁界面來配置參數
- 支援RockChinQ大佬的free-one-api接口
三、ESP32端代碼倉庫(ESP-IDF)
第一步:環境安裝
這裡使用的是 ESP-IDF v4.4,理論上支援ESP-IDF v5。
①參考ESP-IDF程式設計指南安裝ESP-IDF環境
②參考 樂鑫音頻應用開發指南安裝ESP-ADF環境(如果已配置好VSCode+ESP-IDF插件環境,在vscode指令面闆 -> ESP-IDF:安裝ESP-ADF 可以直接安裝ESP-ADF)
克隆代碼倉庫:
git clone https://github.com/ChatMeow/chat-meow-esp32.git cd chat-meow-esp32
第二步:配置參數
需要先配置 Wi-Fi 連接配接資訊,通過運作 menuconfig > Example Configuration 填寫 Wi-Fi SSID 和Wi-Fi Password。
menuconfig > Example Configuration > (myssid) WiFi SSID > (myssid) WiFi Password
其次需要選擇伺服器位址, ,預設情況下192.168.8.5:8000需要修改為自己的伺服器位址。
menuconfig > Example Configuration > Server URL to send data > Server FILE URL to play voice
第三步:編譯和下載下傳
請先編譯版本并燒錄到開發闆上,然後運作 monitor 工具來檢視序列槽輸出(替換 PORT 為端口名稱):
idf.py build
idf.py -p PORT flash monitor
第四步:開始
- 開始運作後,将主動連接配接 Wi-Fi 熱點
- 檢測是否按下REC(ESP32-LyraT-Mini)按鍵,如果使用喵闆則需要修改按鍵參數
- 從麥克風讀取語音上傳到伺服器
- 從伺服器播放伺服器生成好的語言
- 循環-->>>>
即将支援
- 靜默狀态識别自動識别是否講話,讀取語音開始循環
- 通過ChatGPT函數調用功能傳回參數,接口對外輸出資訊,控制其他實體裝置
- 更多具體的軟體說明可參考代碼倉庫裡的README内容
關于Vits
借助vits可以合成你喜歡角色的語音模型,測試模型使用原神納西妲語音訓練,僅供測試使用。
參考資料:
[1]https://oshwhub.com/kjpig/esp32-chat-meow
— 完 —
嘉立創EDA·頭條号
關注我,看一手優質開源項目