讓我們通過機器學習嘗試語音識別服務,最終成為GA Try Cloud Speech API!

大家都知道google正在提供名為Cloud Speech API的服務嗎?Cloud Speech API是一種使用Google的語音識別技術將語音轉換為文本的服務。此外,通過使用Web和Android上的語音搜索時的數據和最新的深度學習技術,每天改進語音識別技術,並且每天都提高Cloud Speech API的準確性。

雖然它是這樣的Cloud Speech API,但自去年夏天宣布以來,它一直作為測試版運行。然而,谷歌宣布它於4月17日終於成為GA(普遍可用)。

Cloud Speech API現已普遍推出
https://cloudplatform.googleblog.com/2017/04/Cloud-Speech-API-is-now-generally-available.html

此外,上面還有一篇博文,但這次是成為GA

  • 提高較長聲音的轉換準確度
  • 比傳統的批處理快約3倍
  • WAV,OPUS,Speex支持

似乎有一個延伸。

如果您只想嘗試準確性,可以 直接從https://cloud.google.com/speech/頁面進行嘗試。

本文介紹了Cloud Speech API的主要特性和用法,它剛剛成為GA。

目錄

  • Cloud Speech API功能
    • Cloud Speech API類型
    • API限制
    • 關於電話的Cloud Speech API成本
  • 提前準備
    • 創建項目
    • 啟用API和獲取Service Account
  • 試試Cloud Speech API
    • REST API
    • 使用Cloud Speech API時需要注意的事項
  • Cloud Speech API摘要

Cloud Speech API功能

Cloud Speech API是一種使用Google語音識別技術的API。它將來自本地或Google Cloud Storage的音頻數據文件作為輸入,並將數據轉換為文本。

Cloud Speech API類型

Cloud Speech API大致分為兩種類型:REST和RPC。
此外,在每個API中準備了同步API和異步API,並且除了RPC版本之外,還準備了流API。

API限制

截至2017年4月20日,API調用具有以下限制。

  • 每秒5次,每天250,000次通話限​​制
  • 語音處理每200秒最多5000秒
  • 480小時/天的語音數據處理
  • 流媒體和同步呼叫的最長處理時間為1分鐘
  • 當異步調用超過80分鐘的語音數據時,可以僅處理當前GCS上編碼的數據和“LINEAR16”格式
  • 使用單詞提示功能時,每個100個字符(總共最多10,000個字符)中只能指定500個短語。

※參考使用限制
https://cloud.google.com/speech/limits

關於電話的Cloud Speech API成本

Cloud Speech API的成本是轉換請求中處理的數據文件的音頻持續時間的費用(而不是處理時間)。從測試版發布之日起,2016年8月將收取以下費用。

每月使用每15秒充電一次
0到60分鐘免費
61到1,000,000分鐘$ 0.006

正如您在上表中所看到的,到目前為止,每月可以進行一百萬分鐘的音頻處理。免費長達60分鐘,然後每15秒花費0.006美元。約3分鐘約8日元(1美元計算為110日元),那麼它與電話費相似嗎?

此外,此費用是從智能手機,平板電腦或PC上的應用程序使用時的費用。如果你想使用的嵌入式設備(汽車或電視機,揚聲器),或者如果每百萬以上的零件在使用這裡是如此,有必要進行詢問有關從額外使用審批和費用的詳細信息。

※參考Google Cloud Speech API使用費
https://cloud.google.https://cloud.google.com/speech/pricingcom/speech/pricing

提前準備

讓我們實際使用Cloud Speech API。

創建項目

要試用Cloud Speech API,您需要在Google Cloud Platform上創建一個項目。
請參閱以下有關如何創建項目的文章。

為初學者介紹GCP項目

為初學者介紹GCP項目

啟用API和獲取服務帳戶

創建項目後,您需要啟動Cloud Speech API並獲取服務帳戶才能運行API。 從API Manager-> Library中選擇“Google Cloud Speech API”。 單擊“啟用”以激活API。如果它變為“Deactivate”就可以了。 接下來,獲取服務帳戶 API管理器→從身份驗證信息單擊屏幕右下角的“管理服務帳戶”。 點擊屏幕頂部的“創建服務帳戶”。 輸入服務帳戶名稱的任何名稱。系統會自動輸入服務帳戶ID。(可以根據需要進行更改) 選中“提供新密鑰”,選擇JSON作為密鑰類型,然後單擊“創建”按鈕。

然後,將下載json文件,因此請將文件保存在任何地方。稍後運行程序時,您將使用此json文件。

提前要求的準備工作已經結束。

試試Cloud Speech API

從這裡開始,我們將準備語音數據並使用Cloud Speech API。

這次,我將介紹如何同步/異步調用REST API。

REST API

REST API-同步 –

首先,嘗試同步調用REST API。

準備15秒的語音數據以在本地讀取以下文本,然後執行API。

日本最大的數字創作博覽會,將於8月29日在幕張國際展覽中心舉辦,屆時將有200家參展商和30,000場聚會數字創作2007年開幕

實際數據可以從以下網址下載:
https://drive.google.com/file/d/0B38gOETu8BCnN0RReGRKVVFMTDg/view?usp=sharing

#!/usr/bin/env python
# [START import_libraries]import argparse

import base64

import json
from googleapiclient import discovery

import httplib2

from oauth2client.client import GoogleCredentials
# [END import_libraries]
# [START authenticating]
DISCOVERY_URL = ('https://{api}.googleapis.com/$discovery/rest ' 'version={apiVersion}')
# Application default credentials provided by env variable
# GOOGLE_APPLICATION_CREDENTIALS
def get_speech_service():
credentials = GoogleCredentials.get_application_default().create_scoped( ['https://www.googleapis.com/auth/cloud-platform'])
http = httplib2.Http()
credentials.authorize(http)
return discovery.build(
'speech', 'v1beta1', http=http, discoveryServiceUrl=DISCOVERY_URL)
# [END authenticating]
def main(speech_file):
"""Transcribe the given audio file.
Args:
speech_file: the name of the audio file.
"""
# [START construct_request]
with open(speech_file, 'rb') as speech:
# Base64 encode the binary audio file for inclusion in the JSON
# request.
speech_content = base64.b64encode(speech.read())
service = get_speech_service()
# 必須根據要處理的視頻更改此部件的參數
service_request = service.speech().syncrecognize(
body={
'config': {
# There are a bunch of config options you can specify. See
# https://goo.gl/EPjAup for the full list.
'encoding': 'FLAC', # 視頻格式
'sampleRate': 16000, #サンプリングレート      # See https://goo.gl/DPeVFW for a list of supported languages.
'languageCode': 'ja-JA', # どの言語で変換するか },
'audio': {
'content': speech_content.decode('UTF-8')
}
})
# [END construct_request]
# [START send_request]
response = service_request.execute()
for alt in response['results']:
for t in alt['alternatives']:
transcription = t['transcript']
print(transcription)
# [END send_request]
# [START run_application]
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument(
'speech_file', help='Full path of audio file to be recognized')
args = parser.parse_args()
main(args.speech_file)
# [END run_application]

從命令行運行程序 〜/ sample.flac顯示音頻文件的位置。當您自己嘗試時,請將其替換為您自己的環境。 如果執行它,您將收到錯誤並顯示堆棧跟踪。這表示您尚未獲准為項目執行Cloud Speech API。

為了消除此錯誤,您需要使用在3-2中創建的服務帳戶傳遞身份驗證,如https://cloud.google.com/speech/docs/common/auth#authenticating_with_application_default_credentials中所示

如上所述,您可以通過在名為GOOGLE_APPLICATION_CREDENTIALS的環境變量中指定3-2中獲取的json文件來執行API。從現在開始,我們將繼續假設在運行Cloud Speech API時已經設置了上述設置。

如果再次運行該程序,則可以看到 FLAC音頻數據已轉換為文本。

順便說一下,我花了大約5秒的時間來返回我這次試過的約15秒的語音數據的處理結果。(因為我之前嘗試使用測試版時大約需要15秒,所以我可以看到3次性能提升,如上所述!)

REST API~異步~

接下來,嘗試異步調用REST API。

該計劃如下。

#!/usr/bin/env python

# [START import_libraries]import argparse
import base64
import json
import time

from googleapiclient import discovery
import httplib2
from oauth2client.client import GoogleCredentials
# [END import_libraries]

# [START authenticating]

# Application default credentials provided by env variable
# GOOGLE_APPLICATION_CREDENTIALS

def get_speech_service():
credentials = GoogleCredentials.get_application_default().create_scoped( ['https://www.googleapis.com/auth/cloud-platform'])
http = httplib2.Http()
credentials.authorize(http)
return discovery.build('speech', 'v1beta1', http=http)
# [END authenticating]
def main(speech_file):
"""Transcribe the given audio file asynchronously.
Args:
speech_file: the name of the audio file.
"""
# [START construct_request]
with open(speech_file, 'rb') as speech:
# Base64 encode the binary audio file for inclusion in the request.
speech_content = base64.b64encode(speech.read())
service = get_speech_service()
//從syncrecognize調用asyncrecognize的方法
service_request = service.speech().asyncrecognize(
body={
'config': {
# There are a bunch of config options you can specify. See
# https://goo.gl/EPjAup for the full list.
'encoding': 'FLAC', # raw 16-bit signed LE samples
'sampleRate': 16000, # 16 khz
# See https://goo.gl/DPeVFW for a list of supported languages.
'languageCode': 'ja-JA', # a BCP-47 language tag
},
'audio': {
'content': speech_content.decode('UTF-8')
}
})
# [END construct_request]
# [START send_request]
response = service_request.execute()
# [END send_request]
name = response['name']
print(name)
# Construct a GetOperation request.
 //繼續檢查,直到轉換完成
service_request = service.operations().get(name=name)
while True:
# Give the server a few seconds to process.
print('Waiting for server processing...')
time.sleep(1)
# Get the long running operation with response.
response = service_request.execute()
if 'done' in response and response['done']:
break
for alt in response['response']['results']:
for t in alt['alternatives']:
transcription = t['transcript']
print(transcription)# [START run_application]
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument(
'speech_file', help='Full path of audio file to be recognized')
args = parser.parse_args()
main(args.speech_file)
# [END run_application]

讓我們重寫異步處理程序(上面的紅色部分)並執行程序。 您可以看到第一個請求返回了名稱(隨機數序列),您正在等待正在進行的處理完成。

使用Cloud Speech API時需要注意的事項

如果Cloud Speech API未根據要轉換的音頻文件設置適當的參數,則精度將極低。檢查要轉換的音頻文件的元信息(根據需要進行轉換)並設置正確的值。

[編碼] 
Cloud Speech API支持的音頻格式如下。

※截至2017年4月20日,在成為GA的時候,新支持三種格式的WAV,OPus和Speex。

如果要轉換的音頻文件的格式不是上述格式,則Cloud Speech API無法識別它,除非以上述格式重新編碼一次。此外,如果使用Cloud Speech API轉換重新編碼的音頻數據,則精度將會丟失。因此,我認為最準確的方法是盡可能以上述格式創建原始數據,並使用Cloud Speech API進行轉換。

【採樣率16000】

與編碼一樣,還需要根據要轉換的音頻文件來改變採樣率。

Cloud Speech API支持8000到48000,但建議使用16000。除此之外,我完全無法區分,但是當我以44100的採樣率和我的驗證中的大值轉換語音數據時,達到了語音的中間位置(語音的60秒的前半部分)出現這種現象,有可能只識別最多幾秒鐘)。

就目前而言,與編碼一樣,轉換用16000創建的音頻數據似乎盡可能好。

【播放格式為單聲道】

有單聲道,立體聲,雙聲道等作為音頻播放格式,但目前只有單聲道由Cloud Speech API支持。有必要將其他格式的數據轉換為單聲道並應用於Cloud Speech API。

Cloud Speech API摘要

在本文中,我介紹瞭如何使用Cloud Speech API同步/異步處理本地文件上的音頻文件並轉換文本。

目前,有限制和注意事項等,但您可能已經意識到可以使用Cloud Speech API相對輕鬆地將音頻轉換為文本?

此外,雖然這可能不會引入, API類型上,這也是Cloud Speech API也可提供API流媒體,在未來的實時的組合,在這裡,例如翻譯API它還能夠自動翻譯和轉錄語音。

下一次,我將研究使用單詞提示功能可以提高多少準確度,並將其作為文章。

我們希望本文是開始使用Cloud Speech API的第一步。

Aaron Lee

超過6年的Google Cloud經驗,服務過上百家G Suite與GCP客戶,擔任多次研討會主講人與教育訓練講師,提供架構諮詢與技術支援,幫助各大企業上雲。

發佈留言