在paddlespeech开源项目中(https://github.com/PaddlePaddle/PaddleSpeech),我们可以使用paddlespeech_server和paddlespeech_client来进行语音识别,paddlespeech_server作为服务端,paddlespeech_client作为客户端。
使用方式如下:
paddlespeech_server start --config_file ./paddlespeech/server/conf/application.yaml
paddlespeech_client asr --server_ip 127.0.0.1 --port 8090 --input pr-12-2.wav
那么假如现在我们使用paddlespeech_server作为服务端,然后我们自己使用编程语言,例如java、Python去调用paddlespeech_server,需要怎么做呢?
其实paddlespeech_server就是提供了一个http接口,是一个post请求,现在要确定的就是这个接口的请求参数是什么,以及请求链接是什么,这样我们就可以使用编程语言去调用了。
我最先想到的就是进行抓包,来确定paddlespeech_server和paddlespeech_client进行http调用时,传递了哪些参数?在网上一番搜索,确定了一款在linux中使用的抓包工具,就是tcpflow,它可以抓取http接口整个参数。
centos安装tcpflow的方式: sudo yum install tcpflow
现在我们就可以开始动手肝了。
①我们把paddlespeech_server启动起来:
paddlespeech_server start --config_file ./paddlespeech/server/conf/application.yaml
启动日志如下:
②使用tcpflow进行抓包监听
tcpflow -i lo -e http -c host 127.0.0.1 or 192.168.6.138 > log.log
-i lo就是监听本地地址
-e http请求
-c host 抓取源头为127.0.0.1或者192.168.6.138的请求地址
> log.log就是将抓包的数据存入log.log文件,避免刷屏难找请求报文。
③paddlespeech_client进行请求
一旦paddlespeech_client请求成功,第②步中的log.log文件就会抓取到报文
请求完成后,我们在第二步的界面按住ctrl + c中断,然后查看log.log文件
其部分截图如下:
从以上图可以得知:
paddlespeech_server暴露的url为: http://127.0.0.1:8090/paddlespeech/asr
post请求参数为:
{"audio": "", "audio_format": "wav", "sample_rate": 16000, "lang": "zh_cn"}
其中audio参数猜测就是声音文件的base64编码。
为了验证其audio的值为base64编码,我用python语言将一个wav声音文件得出base64编码,然后使用postman进行访问
哈哈,访问成功了,验证了其我的猜测!!!
后面使用python进行编码直接调用http://127.0.0.1:8090/paddlespeech/asr这个接口应该就很容易了。
其Python完整代码如下:
# -*-coding:utf-8 -*-
import base64
import requests
import json
def toBase64(file):
with open(file, 'rb') as fileObj:
audio_data = fileObj.read()
base64_data = base64.b64encode(audio_data)
return base64_data.decode()
def audioRequest(audioBase64, requestUrl):
headers = {
"content-type": "application/json"
}
data = {
"audio": audioBase64,
"audio_format": "wav",
"sample_rate": 16000,
"lang": "zh_cn"
}
response = requests.post(requestUrl, data=json.dumps(data), headers=headers)
print(response.text)
print(response.status_code)
audioFilePath = "D:\\develop\\server\\nginx-1.13.9\\html\\videoVoice\\convert\\pr-12-2.wav"
audioRequestUrl = "http://vm4:8090/paddlespeech/asr"
audioBase64Str = toBase64(audioFilePath)
audioRequest(audioBase64Str, audioRequestUrl)