# 前言

之前的文章紹一個準確率非常高的語音識別框架,但那個只能識別即時的短音頻,如果想要識別一個非常長的音頻,幾十分鐘,甚至幾個小時,那之前的那個是做不到的所以就有了本文。本文介紹搭建一個長語音識別服務,可以把任意長度的音視頻到識別結果。而且識別結果中,可以包含每句話的開始時間和結束時間,可以用來做字幕等等。

視頻教程: 三行命令搭建語音識別服務,竟如此輕鬆識別幾個小時的音視頻!

啓動Docker服務

需要把整個文件夾上傳到服務器上,並在該目錄執行以下命令:

編譯Docker容器:

sudo docker build -t offline_asr .

修改權限:

sudo chmod +x run_server.sh

在項目根目錄執行啓動命令:

sudo docker run -p 10095:10095 -itd --privileged=true --name offline_asr -v $PWD/:/workspace/websocket offline_asr

重新啓動服務,如果之前因爲一些原因關閉了docker服務,可以執行下面命令重新啓動,需要開機自啓動的,把下面命令複製到開機自啓動腳本中/etc/rc.local

sudo docker start offline_asr

測試服務

使用上面服務之後,可以執行下面命令測試一下服務是否正常啓動可用。

python client.py --wav_path=test.wav

輸出結果如下,可以看到輸出的結果中,每句話都帶有開始和結束的時間戳,單位毫秒:

【../data/test.wav】結果: [{'text': '近幾年,', 'start': '710', 'end': '1569'}, {'text': '不但我用書給女兒壓歲,', 'start': '1569', 'end': '3550'}, {'text': '也勸說親朋不要給女兒壓歲錢而改送壓歲書。', 'start': '3550', 'end': '7935'}]

搭建HTTP服務

上面搭建的是websocket的服務,使用起來非常不方便,所以下面提供了一個Websockt轉http服務的程序,並且提供了網頁可以上傳音視頻獲取識別結果,啓動HTTP服務命令如下。

python server.py

訪問http://192.168.0.100:6060打開頁面,可以上傳WAV、MP3、MP4等多種格式,同時也支持錄製識別,返回的同樣是每句話都有時間戳。

{
  "result": {
    "text": "近幾年,不但我用書給女兒壓歲,也勸說親朋不要給女兒壓歲錢而改送壓歲書。",
    "sentences": [
      {
        "text": "近幾年,",
        "start": "710",
        "end": "1569"
      },
      {
        "text": "不但我用書給女兒壓歲,",
        "start": "1569",
        "end": "3550"
      },
      {
        "text": "也勸說親朋不要給女兒壓歲錢而改送壓歲書。",
        "start": "3550",
        "end": "7935"
      }
    ]
  },
  "code": 0
}

頁面截圖:

掃碼入知識星球,搜索【FunASR語音識別長音頻視頻服務】獲取源碼

![](/static/files/2024-01-07/308ae60d67a44afcb3bd15e0886f5e04.png)
小夜