文章

顯示從 5月, 2020 起發佈的文章

Visual Studio 2019 遠端連接到 Raspberry Pi 的執行與除錯

圖片
[準備工作] 在 Raspberry Pi 系統:         1. 安裝 openssh-server , g++ , gdb , gdbserver           2. 開啟 ssh 服務,sudo service ssh start 在 Visual Studio 系統:         1. Visual Studio Installer 先安裝 " Linux C++ 開發元件 "         2. 新建一個 Raspberry 專案         3. 設定遠端偵錯電腦,如下圖。 圖一:遠端偵錯配置 [編譯專案]        從 Visual Studio 2019 編譯樹莓派的 Linux 專案,程式碼只是點亮一顆 LED 燈,還有控制 I2C 介面的 LCD 模組。用 VS 2019 編譯後,結果如下圖所示,產生的 out 執行檔被傳送到樹莓派的工作目錄上。 圖二:編譯後的結果 [遠端執行]        此時準備從 Visual Studio 2019 執行樹莓派的 Linux 程式,如果要中斷程式的話,在執行前必須先設定好中斷點。好了,開始執行後,列印的結果如下圖,顯示在 "Linux 主控台視窗" 。 # 小尺寸 TFT LCD 顯示控制 (以 Arduino 和 Raspberry Pi 為例) # 中文語音合成+語音辨識 以百度的AI開放平台 in Python 開發 # Raspberry Pi 樹莓派的入門筆記 # Raspberry Pi 樹莓派的 I/O 介面開發 in C

[筆記] Android Studio 遇到 Gradle 的問題

圖片
        每次升級Android Studio後,總會遇到原本的項目無法成功編譯 (升級前是正常),發現在網路上也有其他人遇上同樣的問題,這次就將問題記下來以免未來又忘了。 1. Gradle 與 Gradle Plugin 是兩個不同東西,下圖一:         Gradle :是開發過程中的工具,對所有程式碼的編譯與封裝,可以看成是一個 MakeFile 或是 Visual Studio 當中的 project solution。         Gradle Plugin :是一個 Android Studio 裡面的插件,這插件是為了整合Gradle工具,然而插件的版本並不與 Gradle 版本相同,所以圖一可以選擇插件的版本,也可以選擇 Gradle 工具的版本。 圖一:Gradle 與 Gradle Plugin 2. 編譯出現 "Process unexpectedly exit"         這個問題主要是插件版本所造成的,其實與 Gradle 版本不相關 (我上下的版本號都改來改去,後來才發現插件問題)。解決的方式,我們要調整圖一中的 Gradle Plugin 版本, 往下降低 並找到適合的版本,直到能夠成功編譯的版本。 圖二:編譯時所發生的問題 3. Android Studio 編譯         調整過版本後,先 sync Gradle,這時會檢查編譯封裝的自動化內容,檢查過程很快,如果沒問題,就可以進行編譯。在編譯前,最好先clean project,然後再 make app 或者 make module,確保編譯的內容很乾淨。如果沒有先做 clean 的動作,有時編譯過程會出現異常。

[應用] 雲運算之語音辨識 (Speech To Text)

圖片
語音辨識架構         隨著雲端運算的技術越來越成熟,各家平台提供語音方面的服務,應用開發者只要連上雲端並將語音上傳,便能取得想要的服務。為了研究如何連上各家平台的服務,筆者設計一個 Proxy 服務,如圖一所示。目前,我們實際使用過的平台有:阿里雲 、 百度 、 科大訊飛 、 雲知聲,每個雲端平台提供服務的連線驗證方式都不一樣,而且雲運算的語音辨識參數也不盡相同,所以設計一個 Proxy Service 將連線驗證與各項參數做成一個統一開放的介面。Proxy 服務讓其他程式 、 工具 、 或人機介面透過網路方式連到這個服務上,並上傳語音,之後返回辨識結果。過程中,各平台的驗證以及 SDK 的整合均由這個 proxy 處理掉了。 圖一:語音辨識的 Proxy 服務 設計流程         圖二是Proxy Service 內部架構的方塊圖。服務裡有一個 TCP listening 一直等待著其他程式連線,一旦有 TCP 連線,便創建一個新 thread,專門處理這一路連線的通道。由此可知,Proxy 服務可以同時處理多個語音通道,互相獨立運算。另外,圖下方所示,這個服務的底層就是整合多家平台的 SDK,調用他們的 SDK 連上雲端獲得服務。這些 SDK 函數主要功能是封裝 WebSocket 通訊協定,方便開發者調用。當然,我們也可以根據平台的技術文件自行設計一套 WebSocket app 連線雲端,參考 [1][2] ,既然平台有提供 SDK,最好是使用 SDK 來開發,這可避免不相容的問題。         Proxy 服務的核心是提供一個統一開放介面 SRChannel,並可以設定相關參數,如:VAD 、s ilence偵測 、 silence 長度...等。設計一個存放語音的 queue,並穩定地上傳到雲端。從雲端返回的事件或結果,再傳給對應的程式。 圖二:Proxy 服務的內部方塊圖 實現展示         這裡,我們設計一個音檔轉換工具,透過 Proxy