# 前言
本文將介紹一個可以通過語音指令來控制坦克大戰遊戲的程序,用戶只需要添加幾個疾病區然後控制坦克進行向上、向下、向左、向右、開火、停止等操作。同時還支持指令微調、提高指令的準確率。
安裝項目環境¶
本項目開發換爲:
- Anaconda 3
- Windows 11
- Python 3.11
- Pytorch 2.1.0
- CUDA 12.1
- 安裝Pytorch,執行下面命令,如果已經安裝了其他版本,若能正常運行,請跳過。
conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia
- 安裝其他依賴包,執行下面命令,安裝完成之後,如果還缺失其他庫,請對應安裝。
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
啓動遊戲¶
-
運行
main.py程序即可啓動遊戲,可以調整的參數有:sec_time爲錄製時間,單位秒;last_len爲上一部分的數據長度,單位秒;。 -
增加指令,需要在
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。
掃碼入知識星球,搜索【語音指令控制坦克大戰】獲取源碼¶

參考資料¶
遊戲的開發參考了TankWar。