# 前言
本文將介紹一個可以通過語音指令來控制坦克大戰遊戲的程序,用戶只需要添加幾個疾病區然後控制坦克進行向上、向下、向左、向右、開火、停止等操作。同時還支持指令微調、提高指令的準確率。

安裝項目環境

本項目開發換爲:
- Anaconda 3
- Windows 11
- Python 3.11
- Pytorch 2.1.0
- CUDA 12.1

  1. 安裝Pytorch,執行下面命令,如果已經安裝了其他版本,若能正常運行,請跳過。
conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia
  1. 安裝其他依賴包,執行下面命令,安裝完成之後,如果還缺失其他庫,請對應安裝。
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

啓動遊戲

  1. 運行main.py程序即可啓動遊戲,可以調整的參數有:sec_time爲錄製時間,單位秒;last_len爲上一部分的數據長度,單位秒;。

  2. 增加指令,需要在instruct.txt添加指令,然後再main.py添加你指令的處理函數。

日誌輸出:

支持指令:['向上', '向下', '向左', '向右', '停止', '開火']
請發出指令...
觸發指令:【向上】
觸發指令:【開火】
觸發指令:【開火】

遊戲頁面:

微調指令模型

微調指令模型的代碼在finetune目錄下,微調前切換到finetune目錄,具體的訓練過程看下面操作。

製作數據

運行record_data.py代碼,啓動錄音程序,默認錄製2秒鐘,建議錄製完成之後,再錄製1秒鐘的音頻,注意錄製1秒鐘時間非常短,按下回車之後要立馬開始說話。其實自定義數據可以參考生成的dataset目錄。

輸出日誌:

請輸入指令內容:向上
請輸入錄入次數:10
第1次錄音,按回車開始說話:
開始錄音......
錄音已結束!
第2次錄音,按回車開始說話:

生成訓練數據列表

運行generate_data_list.py代碼,生成訓練數據列表。

訓練模型

執行下面命令訓練模型,如果是Windows,需要把參數並接爲一行,並刪除\

funasr-train \
++model=../models/paraformer-zh \
++train_data_set_list=dataset/train.jsonl \
++valid_data_set_list=dataset/validation.jsonl \
++dataset_conf.batch_type="token" \
++dataset_conf.batch_size=10000 \
++train_conf.max_epoch=5 \
++train_conf.log_interval=1 
++train_conf.keep_nbest_models=5 \
++train_conf.avg_nbest_model=3 \
++output_dir="./outputs"

合併模型

運行merge_model.py代碼,將訓練好的模型合併成一個模型../models/paraformer-zh-finetune

掃碼入知識星球,搜索【語音指令控制坦克大戰】獲取源碼

![](/static/files/2023-12-17/b705bd53b641425ea38d05c9a7a014e0.png)

參考資料

遊戲的開發參考了TankWar

小夜