parent
85d4a31e04
commit
e50c1b3b1d
@ -0,0 +1,114 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
import argparse
|
||||||
|
import os
|
||||||
|
|
||||||
|
import yaml
|
||||||
|
|
||||||
|
|
||||||
|
def change_speech_yaml(yaml_name: str, device: str):
|
||||||
|
"""Change the settings of the device under the voice task configuration file
|
||||||
|
|
||||||
|
Args:
|
||||||
|
yaml_name (str): asr or asr_pd or tts or tts_pd
|
||||||
|
cpu (bool): True means set device to "cpu"
|
||||||
|
model_type (dict): change model type
|
||||||
|
"""
|
||||||
|
if "asr" in yaml_name:
|
||||||
|
dirpath = "./conf/asr/"
|
||||||
|
elif 'tts' in yaml_name:
|
||||||
|
dirpath = "./conf/tts/"
|
||||||
|
yamlfile = dirpath + yaml_name + ".yaml"
|
||||||
|
tmp_yamlfile = dirpath + yaml_name + "_tmp.yaml"
|
||||||
|
os.system("cp %s %s" % (yamlfile, tmp_yamlfile))
|
||||||
|
|
||||||
|
with open(tmp_yamlfile) as f, open(yamlfile, "w+", encoding="utf-8") as fw:
|
||||||
|
y = yaml.safe_load(f)
|
||||||
|
if device == 'cpu':
|
||||||
|
print("Set device: cpu")
|
||||||
|
if yaml_name == 'asr':
|
||||||
|
y['device'] = 'cpu'
|
||||||
|
elif yaml_name == 'asr_pd':
|
||||||
|
y['am_predictor_conf']['device'] = 'cpu'
|
||||||
|
elif yaml_name == 'tts':
|
||||||
|
y['device'] = 'cpu'
|
||||||
|
elif yaml_name == 'tts_pd':
|
||||||
|
y['am_predictor_conf']['device'] = 'cpu'
|
||||||
|
y['voc_predictor_conf']['device'] = 'cpu'
|
||||||
|
elif device == 'gpu':
|
||||||
|
print("Set device: gpu")
|
||||||
|
if yaml_name == 'asr':
|
||||||
|
y['device'] = 'gpu:0'
|
||||||
|
elif yaml_name == 'asr_pd':
|
||||||
|
y['am_predictor_conf']['device'] = 'gpu:0'
|
||||||
|
elif yaml_name == 'tts':
|
||||||
|
y['device'] = 'gpu:0'
|
||||||
|
elif yaml_name == 'tts_pd':
|
||||||
|
y['am_predictor_conf']['device'] = 'gpu:0'
|
||||||
|
y['voc_predictor_conf']['device'] = 'gpu:0'
|
||||||
|
else:
|
||||||
|
print("Please set correct device: cpu or gpu.")
|
||||||
|
|
||||||
|
print("The content of '%s': " % (yamlfile))
|
||||||
|
print(yaml.dump(y, default_flow_style=False, sort_keys=False))
|
||||||
|
yaml.dump(y, fw, allow_unicode=True)
|
||||||
|
os.system("rm %s" % (tmp_yamlfile))
|
||||||
|
print("Change %s successfully." % (yamlfile))
|
||||||
|
|
||||||
|
|
||||||
|
def change_app_yaml(task: str, engine_type: str):
|
||||||
|
"""Change the engine type and corresponding configuration file of the speech task in application.yaml
|
||||||
|
|
||||||
|
Args:
|
||||||
|
task (str): asr or tts
|
||||||
|
"""
|
||||||
|
yamlfile = "./conf/application.yaml"
|
||||||
|
tmp_yamlfile = "./conf/application_tmp.yaml"
|
||||||
|
os.system("cp %s %s" % (yamlfile, tmp_yamlfile))
|
||||||
|
with open(tmp_yamlfile) as f, open(yamlfile, "w+", encoding="utf-8") as fw:
|
||||||
|
y = yaml.safe_load(f)
|
||||||
|
y['engine_type'][task] = engine_type
|
||||||
|
path_list = ["./conf/", task, "/", task]
|
||||||
|
if engine_type == 'python':
|
||||||
|
path_list.append(".yaml")
|
||||||
|
|
||||||
|
elif engine_type == 'inference':
|
||||||
|
path_list.append("_pd.yaml")
|
||||||
|
y['engine_backend'][task] = ''.join(path_list)
|
||||||
|
print("The content of './conf/application.yaml': ")
|
||||||
|
print(yaml.dump(y, default_flow_style=False, sort_keys=False))
|
||||||
|
yaml.dump(y, fw, allow_unicode=True)
|
||||||
|
os.system("rm %s" % (tmp_yamlfile))
|
||||||
|
print("Change %s successfully." % (yamlfile))
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument(
|
||||||
|
'--change_task',
|
||||||
|
type=str,
|
||||||
|
default=None,
|
||||||
|
help='Change task',
|
||||||
|
choices=[
|
||||||
|
'app-asr-python',
|
||||||
|
'app-asr-inference',
|
||||||
|
'app-tts-python',
|
||||||
|
'app-tts-inference',
|
||||||
|
'speech-asr-cpu',
|
||||||
|
'speech-asr-gpu',
|
||||||
|
'speech-asr_pd-cpu',
|
||||||
|
'speech-asr_pd-gpu',
|
||||||
|
'speech-tts-cpu',
|
||||||
|
'speech-tts-gpu',
|
||||||
|
'speech-tts_pd-cpu',
|
||||||
|
'speech-tts_pd-gpu',
|
||||||
|
],
|
||||||
|
required=True)
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
types = args.change_task.split("-")
|
||||||
|
if types[0] == "app":
|
||||||
|
change_app_yaml(types[1], types[2])
|
||||||
|
elif types[0] == "speech":
|
||||||
|
change_speech_yaml(types[1], types[2])
|
||||||
|
else:
|
||||||
|
print("Error change task, please check change_task.")
|
@ -0,0 +1,27 @@
|
|||||||
|
# This is the parameter configuration file for PaddleSpeech Serving.
|
||||||
|
|
||||||
|
##################################################################
|
||||||
|
# SERVER SETTING #
|
||||||
|
##################################################################
|
||||||
|
host: 127.0.0.1
|
||||||
|
port: 8090
|
||||||
|
|
||||||
|
##################################################################
|
||||||
|
# CONFIG FILE #
|
||||||
|
##################################################################
|
||||||
|
# add engine backend type (Options: asr, tts) and config file here.
|
||||||
|
# Adding a speech task to engine_backend means starting the service.
|
||||||
|
engine_backend:
|
||||||
|
asr: 'conf/asr/asr.yaml'
|
||||||
|
tts: 'conf/tts/tts.yaml'
|
||||||
|
|
||||||
|
# The engine_type of speech task needs to keep the same type as the config file of speech task.
|
||||||
|
# E.g: The engine_type of asr is 'python', the engine_backend of asr is 'XX/asr.yaml'
|
||||||
|
# E.g: The engine_type of asr is 'inference', the engine_backend of asr is 'XX/asr_pd.yaml'
|
||||||
|
#
|
||||||
|
# add engine type (Options: python, inference)
|
||||||
|
engine_type:
|
||||||
|
asr: 'python'
|
||||||
|
tts: 'python'
|
||||||
|
|
||||||
|
|
@ -0,0 +1,8 @@
|
|||||||
|
model: 'conformer_wenetspeech'
|
||||||
|
lang: 'zh'
|
||||||
|
sample_rate: 16000
|
||||||
|
cfg_path: # [optional]
|
||||||
|
ckpt_path: # [optional]
|
||||||
|
decode_method: 'attention_rescoring'
|
||||||
|
force_yes: True
|
||||||
|
device: # set 'gpu:id' or 'cpu'
|
@ -0,0 +1,26 @@
|
|||||||
|
# This is the parameter configuration file for ASR server.
|
||||||
|
# These are the static models that support paddle inference.
|
||||||
|
|
||||||
|
##################################################################
|
||||||
|
# ACOUSTIC MODEL SETTING #
|
||||||
|
# am choices=['deepspeech2offline_aishell'] TODO
|
||||||
|
##################################################################
|
||||||
|
model_type: 'deepspeech2offline_aishell'
|
||||||
|
am_model: # the pdmodel file of am static model [optional]
|
||||||
|
am_params: # the pdiparams file of am static model [optional]
|
||||||
|
lang: 'zh'
|
||||||
|
sample_rate: 16000
|
||||||
|
cfg_path:
|
||||||
|
decode_method:
|
||||||
|
force_yes: True
|
||||||
|
|
||||||
|
am_predictor_conf:
|
||||||
|
device: # set 'gpu:id' or 'cpu'
|
||||||
|
switch_ir_optim: True
|
||||||
|
glog_info: False # True -> print glog
|
||||||
|
summary: True # False -> do not show predictor config
|
||||||
|
|
||||||
|
|
||||||
|
##################################################################
|
||||||
|
# OTHERS #
|
||||||
|
##################################################################
|
@ -0,0 +1,32 @@
|
|||||||
|
# This is the parameter configuration file for TTS server.
|
||||||
|
|
||||||
|
##################################################################
|
||||||
|
# ACOUSTIC MODEL SETTING #
|
||||||
|
# am choices=['speedyspeech_csmsc', 'fastspeech2_csmsc',
|
||||||
|
# 'fastspeech2_ljspeech', 'fastspeech2_aishell3',
|
||||||
|
# 'fastspeech2_vctk']
|
||||||
|
##################################################################
|
||||||
|
am: 'fastspeech2_csmsc'
|
||||||
|
am_config:
|
||||||
|
am_ckpt:
|
||||||
|
am_stat:
|
||||||
|
phones_dict:
|
||||||
|
tones_dict:
|
||||||
|
speaker_dict:
|
||||||
|
spk_id: 0
|
||||||
|
|
||||||
|
##################################################################
|
||||||
|
# VOCODER SETTING #
|
||||||
|
# voc choices=['pwgan_csmsc', 'pwgan_ljspeech', 'pwgan_aishell3',
|
||||||
|
# 'pwgan_vctk', 'mb_melgan_csmsc']
|
||||||
|
##################################################################
|
||||||
|
voc: 'pwgan_csmsc'
|
||||||
|
voc_config:
|
||||||
|
voc_ckpt:
|
||||||
|
voc_stat:
|
||||||
|
|
||||||
|
##################################################################
|
||||||
|
# OTHERS #
|
||||||
|
##################################################################
|
||||||
|
lang: 'zh'
|
||||||
|
device: # set 'gpu:id' or 'cpu'
|
@ -0,0 +1,42 @@
|
|||||||
|
# This is the parameter configuration file for TTS server.
|
||||||
|
# These are the static models that support paddle inference.
|
||||||
|
|
||||||
|
##################################################################
|
||||||
|
# ACOUSTIC MODEL SETTING #
|
||||||
|
# am choices=['speedyspeech_csmsc', 'fastspeech2_csmsc']
|
||||||
|
##################################################################
|
||||||
|
am: 'fastspeech2_csmsc'
|
||||||
|
am_model: # the pdmodel file of your am static model (XX.pdmodel)
|
||||||
|
am_params: # the pdiparams file of your am static model (XX.pdipparams)
|
||||||
|
am_sample_rate: 24000
|
||||||
|
phones_dict:
|
||||||
|
tones_dict:
|
||||||
|
speaker_dict:
|
||||||
|
spk_id: 0
|
||||||
|
|
||||||
|
am_predictor_conf:
|
||||||
|
device: # set 'gpu:id' or 'cpu'
|
||||||
|
switch_ir_optim: True
|
||||||
|
glog_info: False # True -> print glog
|
||||||
|
summary: True # False -> do not show predictor config
|
||||||
|
|
||||||
|
|
||||||
|
##################################################################
|
||||||
|
# VOCODER SETTING #
|
||||||
|
# voc choices=['pwgan_csmsc', 'mb_melgan_csmsc','hifigan_csmsc']
|
||||||
|
##################################################################
|
||||||
|
voc: 'pwgan_csmsc'
|
||||||
|
voc_model: # the pdmodel file of your vocoder static model (XX.pdmodel)
|
||||||
|
voc_params: # the pdiparams file of your vocoder static model (XX.pdipparams)
|
||||||
|
voc_sample_rate: 24000
|
||||||
|
|
||||||
|
voc_predictor_conf:
|
||||||
|
device: # set 'gpu:id' or 'cpu'
|
||||||
|
switch_ir_optim: True
|
||||||
|
glog_info: False # True -> print glog
|
||||||
|
summary: True # False -> do not show predictor config
|
||||||
|
|
||||||
|
##################################################################
|
||||||
|
# OTHERS #
|
||||||
|
##################################################################
|
||||||
|
lang: 'zh'
|
@ -0,0 +1,184 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
StartService(){
|
||||||
|
# Start service
|
||||||
|
paddlespeech_server start --config_file $config_file 1>>log/server.log 2>>log/server.log.wf &
|
||||||
|
echo $! > pid
|
||||||
|
|
||||||
|
start_num=$(cat log/server.log.wf | grep "INFO: Uvicorn running on http://" -c)
|
||||||
|
flag="normal"
|
||||||
|
while [[ $start_num -lt $target_start_num && $flag == "normal" ]]
|
||||||
|
do
|
||||||
|
start_num=$(cat log/server.log.wf | grep "INFO: Uvicorn running on http://" -c)
|
||||||
|
# start service failed
|
||||||
|
if [ $(cat log/server.log.wf | grep -i "error" -c) -gt $error_time ];then
|
||||||
|
echo "Service started failed." | tee -a ./log/test_result.log
|
||||||
|
error_time=$(cat log/server.log.wf | grep -i "error" -c)
|
||||||
|
flag="unnormal"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
ClientTest(){
|
||||||
|
# Client test
|
||||||
|
# test asr client
|
||||||
|
paddlespeech_client asr --server_ip $server_ip --port $port --input ./zh.wav
|
||||||
|
((test_times+=1))
|
||||||
|
paddlespeech_client asr --server_ip $server_ip --port $port --input ./zh.wav
|
||||||
|
((test_times+=1))
|
||||||
|
|
||||||
|
# test tts client
|
||||||
|
paddlespeech_client tts --server_ip $server_ip --port $port --input "您好,欢迎使用百度飞桨语音合成服务。" --output output.wav
|
||||||
|
((test_times+=1))
|
||||||
|
paddlespeech_client tts --server_ip $server_ip --port $port --input "您好,欢迎使用百度飞桨语音合成服务。" --output output.wav
|
||||||
|
((test_times+=1))
|
||||||
|
}
|
||||||
|
|
||||||
|
GetTestResult() {
|
||||||
|
# Determine if the test was successful
|
||||||
|
response_success_time=$(cat log/server.log | grep "200 OK" -c)
|
||||||
|
if (( $response_success_time == $test_times )) ; then
|
||||||
|
echo "Testing successfully. The service configuration is: asr engine type: $1; tts engine type: $1; device: $2." | tee -a ./log/test_result.log
|
||||||
|
else
|
||||||
|
echo "Testing failed. The service configuration is: asr engine type: $1; tts engine type: $1; device: $2." | tee -a ./log/test_result.log
|
||||||
|
fi
|
||||||
|
test_times=$response_success_time
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
mkdir -p log
|
||||||
|
rm -rf log/server.log.wf
|
||||||
|
rm -rf log/server.log
|
||||||
|
rm -rf log/test_result.log
|
||||||
|
|
||||||
|
config_file=./conf/application.yaml
|
||||||
|
server_ip=$(cat $config_file | grep "host" | awk -F " " '{print $2}')
|
||||||
|
port=$(cat $config_file | grep "port" | awk '/port:/ {print $2}')
|
||||||
|
|
||||||
|
echo "Sevice ip: $server_ip" | tee ./log/test_result.log
|
||||||
|
echo "Sevice port: $port" | tee -a ./log/test_result.log
|
||||||
|
|
||||||
|
# whether a process is listening on $port
|
||||||
|
pid=`lsof -i :"$port"|grep -v "PID" | awk '{print $2}'`
|
||||||
|
if [ "$pid" != "" ]; then
|
||||||
|
echo "The port: $port is occupied, please change another port"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
# download test audios for ASR client
|
||||||
|
wget -c https://paddlespeech.bj.bcebos.com/PaddleAudio/zh.wav https://paddlespeech.bj.bcebos.com/PaddleAudio/en.wav
|
||||||
|
|
||||||
|
|
||||||
|
target_start_num=0 # the number of start service
|
||||||
|
test_times=0 # The number of client test
|
||||||
|
error_time=0 # The number of error occurrences in the startup failure server.log.wf file
|
||||||
|
|
||||||
|
# start server: asr engine type: python; tts engine type: python; device: gpu
|
||||||
|
echo "Start the service: asr engine type: python; tts engine type: python; device: gpu" | tee -a ./log/test_result.log
|
||||||
|
((target_start_num+=1))
|
||||||
|
StartService
|
||||||
|
|
||||||
|
if [[ $start_num -eq $target_start_num && $flag == "normal" ]]; then
|
||||||
|
echo "Service started successfully." | tee -a ./log/test_result.log
|
||||||
|
ClientTest
|
||||||
|
echo "This round of testing is over." | tee -a ./log/test_result.log
|
||||||
|
|
||||||
|
GetTestResult python gpu
|
||||||
|
else
|
||||||
|
echo "Service failed to start, no client test."
|
||||||
|
target_start_num=$start_num
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
kill -9 `cat pid`
|
||||||
|
rm -rf pid
|
||||||
|
sleep 2s
|
||||||
|
echo "**************************************************************************************" | tee -a ./log/test_result.log
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# start server: asr engine type: python; tts engine type: python; device: cpu
|
||||||
|
python change_yaml.py --change_task speech-asr-cpu # change asr.yaml device: cpu
|
||||||
|
python change_yaml.py --change_task speech-tts-cpu # change tts.yaml device: cpu
|
||||||
|
|
||||||
|
echo "Start the service: asr engine type: python; tts engine type: python; device: cpu" | tee -a ./log/test_result.log
|
||||||
|
((target_start_num+=1))
|
||||||
|
StartService
|
||||||
|
|
||||||
|
if [[ $start_num -eq $target_start_num && $flag == "normal" ]]; then
|
||||||
|
echo "Service started successfully." | tee -a ./log/test_result.log
|
||||||
|
ClientTest
|
||||||
|
echo "This round of testing is over." | tee -a ./log/test_result.log
|
||||||
|
|
||||||
|
GetTestResult python cpu
|
||||||
|
else
|
||||||
|
echo "Service failed to start, no client test."
|
||||||
|
target_start_num=$start_num
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
kill -9 `cat pid`
|
||||||
|
rm -rf pid
|
||||||
|
sleep 2s
|
||||||
|
echo "**************************************************************************************" | tee -a ./log/test_result.log
|
||||||
|
|
||||||
|
|
||||||
|
# start server: asr engine type: inference; tts engine type: inference; device: gpu
|
||||||
|
python change_yaml.py --change_task app-asr-inference # change application.yaml, asr engine_type: inference; asr engine_backend: asr_pd.yaml
|
||||||
|
python change_yaml.py --change_task app-tts-inference # change application.yaml, tts engine_type: inference; tts engine_backend: tts_pd.yaml
|
||||||
|
|
||||||
|
echo "Start the service: asr engine type: inference; tts engine type: inference; device: gpu" | tee -a ./log/test_result.log
|
||||||
|
((target_start_num+=1))
|
||||||
|
StartService
|
||||||
|
|
||||||
|
if [[ $start_num -eq $target_start_num && $flag == "normal" ]]; then
|
||||||
|
echo "Service started successfully." | tee -a ./log/test_result.log
|
||||||
|
ClientTest
|
||||||
|
echo "This round of testing is over." | tee -a ./log/test_result.log
|
||||||
|
|
||||||
|
GetTestResult inference gpu
|
||||||
|
else
|
||||||
|
echo "Service failed to start, no client test."
|
||||||
|
target_start_num=$start_num
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
kill -9 `cat pid`
|
||||||
|
rm -rf pid
|
||||||
|
sleep 2s
|
||||||
|
echo "**************************************************************************************" | tee -a ./log/test_result.log
|
||||||
|
|
||||||
|
|
||||||
|
# start server: asr engine type: inference; tts engine type: inference; device: cpu
|
||||||
|
python change_yaml.py --change_task speech-asr_pd-cpu # change asr_pd.yaml device: cpu
|
||||||
|
python change_yaml.py --change_task speech-tts_pd-cpu # change tts_pd.yaml device: cpu
|
||||||
|
|
||||||
|
echo "start the service: asr engine type: inference; tts engine type: inference; device: cpu" | tee -a ./log/test_result.log
|
||||||
|
((target_start_num+=1))
|
||||||
|
StartService
|
||||||
|
|
||||||
|
if [[ $start_num -eq $target_start_num && $flag == "normal" ]]; then
|
||||||
|
echo "Service started successfully." | tee -a ./log/test_result.log
|
||||||
|
ClientTest
|
||||||
|
echo "This round of testing is over." | tee -a ./log/test_result.log
|
||||||
|
|
||||||
|
GetTestResult inference cpu
|
||||||
|
else
|
||||||
|
echo "Service failed to start, no client test."
|
||||||
|
target_start_num=$start_num
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
kill -9 `cat pid`
|
||||||
|
rm -rf pid
|
||||||
|
sleep 2s
|
||||||
|
echo "**************************************************************************************" | tee -a ./log/test_result.log
|
||||||
|
|
||||||
|
echo "All tests completed." | tee -a ./log/test_result.log
|
||||||
|
|
||||||
|
# sohw all the test results
|
||||||
|
echo "***************** Here are all the test results ********************"
|
||||||
|
cat ./log/test_result.log
|
||||||
|
|
||||||
|
# Restoring conf is the same as demos/speech_server
|
||||||
|
cp ../../../demos/speech_server/conf/ ./ -rf
|
Loading…
Reference in new issue