JYU Blog

使用EdgeTpu應用在語音模型預測之簡單實例(六)-進行EdgeTpu模型預測
2019-07-20 16:00:00

GitHub:https://github.com/s123600g/asr_edgetpu_demo

經過(五) 使用 edgetpu_compiler 轉換 EdgeTpu 可識別 tflite模型,此階段使用EdgeTpu模型進行簡單預測。

此階段所使用程式為classify_ASR.pyclassification_engine.py,執行時需要搭配Google Coral USB Accelerator

classify_ASR.py為主要執行程式,調用classification_engine.py程式取得最後EdgeTpu模型預測結果,在將此結果進行分類標籤識別。

classification_engine.pyclassify_ASR.py調用分支程式,主要處理EdgeTpu模型在分類預測處理方面,此為參考官方範例中classify_image.py內所調用 edgetpu.classification.engine-ClassificationEngine()進行修改實作。

關於classify_image.py原碼可參考:
https://coral.googlesource.com/edgetpu/+/refs/heads/release-chef/edgetpu/demo/classify_image.py

關於edgetpu.basic.basic_engine說明可參考:
https://coral.withgoogle.com/docs/reference/edgetpu.basic.basic_engine/


程式執行

使用classify_ASR.py

需要先設置確認EdgeTpu模型來源

tf_model = "ASR_Model_edgetpu.tflite" # 模型名稱

tf_model_dir = "tflite_model" # 模型放置目錄名稱

確認預測資料來源,這裡只使用一筆語音特徵來源

這裡使用語音特徵為前面語音資料集處理階段,已經擷取轉換好語音特徵之文字檔。

存在位置在專案目錄內 tflite_model/validdata/down/0a2b400e_nohash_0.txt

不需要給予指定語音特徵文字檔名稱,如上面0a2b400e_nohash_0.txt完整檔案名稱,只要給予檔案存在位置到目錄名稱即可,會自動掃描抓取目錄內檔案。

valid_data_path = os.path.join(    
    os.getcwd(), # 自動判斷專案位置    
    "tflite_model", # 設置專案目錄內放置預測資料來源目錄之最外層    
    "validdata", # 設置專案目錄內放置預測資料來源目錄之內層
)

需要注意的是資料型態,在讀取預測語音特徵來源時,資料型態是float32。

因為轉換後EdgeTpu模型,在針對輸入的資料來源之型態上,要求為uint8型態給予模型,所以在讀取完語音特徵內容後,要將其資料型態轉換為uint8形式。

''' 轉換語音特徵向量為numpy array,並且將資料型態轉為 uint8格式 '''
valid_data = np.array(valid_data).astype('uint8')

模型執行分類預測處理,調用classification_engine.py內類別ClassificationEngine()

先將 ClassificationEngine() 類別進行物件實作,在類別 init() 有指定要求給予模型位置參數

def __init__(self, model_path, device_path=None)

在類別物件初始化實作時,只需要將模型位置給予model_path參數即可

engine = ClassificationEngine(model)

在執行engine.ClassifyWithASR_Feature(valid_data, top_k=3)進行模型預測處理,此方法最後會回傳模型預測之結果。

valid_data參數是給予上方轉換資料型態為uint8之語音特徵矩陣,top_k=3 預設固定為3,是指在模型推斷預測出來結果矩陣中,先找出3個可信度最大結果出在下去做篩選,最後,回傳篩選後結果。

get_score_list = engine.ClassifyWithASR_Feature(valid_data, top_k=3)

最後,從engine.ClassifyWithASR_Feature()方法回傳之結果中,取出結果矩陣內第一個位置數值,此為分類編號,在下去做分類標籤資料庫查詢編號所對應分類標籤,此為最後我們看到畫面之預測分類標籤名稱。

使用分類標籤資料庫為專案目錄內DB/class.db3

Config.py內關於SQLite3配置

SQLite_DB_DirectoryName = "DB" # 放置SQLite3 DB檔案目錄名稱
SQLite_name = "class.db3"  # SQLite3 DB檔案
db_TableName = 'audioclass'  # SQLite3 資料表名稱
column_ClassNum = 'ClassNum' # SQLite3 資料表欄位名稱
column_Classname = 'ClassName' # SQLite3 資料表欄位名稱


程式執行結果