From f8375764b998af28a31983c76db11e2434ca6aae Mon Sep 17 00:00:00 2001 From: lym0302 Date: Fri, 25 Feb 2022 19:21:18 +0800 Subject: [PATCH 1/4] add paddlespeech stats, test=doc --- paddlespeech/cli/__init__.py | 1 + paddlespeech/cli/stats/__init__.py | 14 +++ paddlespeech/cli/stats/infer.py | 145 +++++++++++++++++++++++++++++ setup.py | 1 + 4 files changed, 161 insertions(+) create mode 100644 paddlespeech/cli/stats/__init__.py create mode 100644 paddlespeech/cli/stats/infer.py diff --git a/paddlespeech/cli/__init__.py b/paddlespeech/cli/__init__.py index cecf76fe..12ff9919 100644 --- a/paddlespeech/cli/__init__.py +++ b/paddlespeech/cli/__init__.py @@ -20,5 +20,6 @@ from .cls import CLSExecutor from .st import STExecutor from .text import TextExecutor from .tts import TTSExecutor +from .stats import StatsExecutor _locale._getdefaultlocale = (lambda *args: ['en_US', 'utf8']) diff --git a/paddlespeech/cli/stats/__init__.py b/paddlespeech/cli/stats/__init__.py new file mode 100644 index 00000000..9fe6c4ab --- /dev/null +++ b/paddlespeech/cli/stats/__init__.py @@ -0,0 +1,14 @@ +# Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +from .infer import StatsExecutor diff --git a/paddlespeech/cli/stats/infer.py b/paddlespeech/cli/stats/infer.py new file mode 100644 index 00000000..c50fc4f9 --- /dev/null +++ b/paddlespeech/cli/stats/infer.py @@ -0,0 +1,145 @@ +# Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +import argparse +from typing import List + +from prettytable import PrettyTable + +from ..log import logger +from ..utils import cli_register +from ..utils import stats_wrapper + +__all__ = ['StatsExecutor'] + +model_name_format = { + 'asr': 'Model-Language-Sample Rate', + 'cls': 'Model-Sample Rate', + 'st': 'Model-Source language-Target language', + 'text': 'Model-Task-Sample Rate', + 'tts': 'Model-Language' +} + + +@cli_register(name='paddlespeech.stats', description='Text infer command.') +class StatsExecutor(): + def __init__(self): + super(StatsExecutor, self).__init__() + + self.parser = argparse.ArgumentParser( + prog='paddlespeech.stats', add_help=True) + self.parser.add_argument( + '--task', + type=str, + default='asr', + choices=['asr', 'cls', 'st', 'text', 'tts'], + help='Choose speech task.', + required=True) + self.task_choices = ['asr', 'cls', 'st', 'text', 'tts'] + + def show_support_models(self, pretrained_models: dict): + fields = model_name_format[self.task].split("-") + table = PrettyTable(fields) + for key in pretrained_models: + table.add_row(key.split("-")) + print(table) + + def execute(self, argv: List[str]) -> bool: + """ + Command line entry. + """ + parser_args = self.parser.parse_args(argv) + self.task = parser_args.task + if self.task not in self.task_choices: + logger.error( + "Please input correct speech task, choices = ['asr', 'cls', 'st', 'text', 'tts']" + ) + return False + + if self.task == 'asr': + try: + from ..asr.infer import pretrained_models + logger.info( + "Here is the list of ASR pretrained models released by PaddleSpeech that can be used by command line and python API" + ) + self.show_support_models(pretrained_models) + # TODO show pretrained static model + return True + except BaseException: + logger.error("Failed to get the list of ASR pretrained models.") + return False + + elif self.task == 'cls': + try: + from ..cls.infer import pretrained_models + logger.info( + "Here is the list of CLS pretrained models released by PaddleSpeech that can be used by command line and python API" + ) + self.show_support_models(pretrained_models) + return True + except BaseException: + logger.error("Failed to get the list of CLS pretrained models.") + return False + + elif self.task == 'st': + try: + from ..st.infer import pretrained_models + logger.info( + "Here is the list of ST pretrained models released by PaddleSpeech that can be used by command line and python API" + ) + self.show_support_models(pretrained_models) + return True + except BaseException: + logger.error("Failed to get the list of ST pretrained models.") + return False + + elif self.task == 'text': + try: + from ..text.infer import pretrained_models + logger.info( + "Here is the list of TEXT pretrained models released by PaddleSpeech that can be used by command line and python API" + ) + self.show_support_models(pretrained_models) + return True + except BaseException: + logger.error( + "Failed to get the list of TEXT pretrained models.") + return False + + elif self.task == 'tts': + try: + from ..tts.infer import pretrained_models + logger.info( + "Here is the list of TTS pretrained models released by PaddleSpeech that can be used by command line and python API" + ) + self.show_support_models(pretrained_models) + # TODO show pretrained static model + return True + except BaseException: + logger.error("Failed to get the list of TTS pretrained models.") + return False + + @stats_wrapper + def __call__( + self, + task: str=None, ): + """ + Python API to call an executor. + """ + if task not in ['asr', 'cls', 'st', 'text', 'tts']: + print( + "Please input correct speech task, choices = ['asr', 'cls', 'st', 'text', 'tts']" + ) + res = "" + + return res diff --git a/setup.py b/setup.py index 9bb11d0d..ca19a575 100644 --- a/setup.py +++ b/setup.py @@ -66,6 +66,7 @@ requirements = { # fastapi server "fastapi", "uvicorn", + "prettytable" ], "develop": [ "ConfigArgParse", From 35357e775e74ca94bbcb0aefc6ffa15a33875c05 Mon Sep 17 00:00:00 2001 From: lym0302 Date: Fri, 25 Feb 2022 19:46:44 +0800 Subject: [PATCH 2/4] update, test=doc --- paddlespeech/cli/stats/infer.py | 22 +++++++++++++++++++--- setup.py | 2 +- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/paddlespeech/cli/stats/infer.py b/paddlespeech/cli/stats/infer.py index c50fc4f9..7e6df3d2 100644 --- a/paddlespeech/cli/stats/infer.py +++ b/paddlespeech/cli/stats/infer.py @@ -31,7 +31,9 @@ model_name_format = { } -@cli_register(name='paddlespeech.stats', description='Text infer command.') +@cli_register( + name='paddlespeech.stats', + description='Get speech tasks support models list.') class StatsExecutor(): def __init__(self): super(StatsExecutor, self).__init__() @@ -73,7 +75,14 @@ class StatsExecutor(): "Here is the list of ASR pretrained models released by PaddleSpeech that can be used by command line and python API" ) self.show_support_models(pretrained_models) - # TODO show pretrained static model + + # show ASR static pretrained model + from paddlespeech.server.engine.asr.paddleinference.asr_engine import pretrained_models + logger.info( + "Here is the list of ASR static pretrained models released by PaddleSpeech that can be used by command line and python API" + ) + self.show_support_models(pretrained_models) + return True except BaseException: logger.error("Failed to get the list of ASR pretrained models.") @@ -123,7 +132,14 @@ class StatsExecutor(): "Here is the list of TTS pretrained models released by PaddleSpeech that can be used by command line and python API" ) self.show_support_models(pretrained_models) - # TODO show pretrained static model + + # show TTS static pretrained model + from paddlespeech.server.engine.tts.paddleinference.tts_engine import pretrained_models + logger.info( + "Here is the list of TTS static pretrained models released by PaddleSpeech that can be used by command line and python API" + ) + self.show_support_models(pretrained_models) + return True except BaseException: logger.error("Failed to get the list of TTS pretrained models.") diff --git a/setup.py b/setup.py index 0823cc38..d7bd9682 100644 --- a/setup.py +++ b/setup.py @@ -62,13 +62,13 @@ base = [ "visualdl", "webrtcvad", "yacs~=0.1.8", + "prettytable", ] server = [ "fastapi", "uvicorn", "pattern_singleton", - "prettytable", ] requirements = { From 5f1728f8552909ec3507c65ef7157cf1c6210ee1 Mon Sep 17 00:00:00 2001 From: lym0302 Date: Mon, 28 Feb 2022 14:11:17 +0800 Subject: [PATCH 3/4] rm server related, test=doc --- paddlespeech/cli/stats/infer.py | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/paddlespeech/cli/stats/infer.py b/paddlespeech/cli/stats/infer.py index 7e6df3d2..676f5f73 100644 --- a/paddlespeech/cli/stats/infer.py +++ b/paddlespeech/cli/stats/infer.py @@ -75,14 +75,6 @@ class StatsExecutor(): "Here is the list of ASR pretrained models released by PaddleSpeech that can be used by command line and python API" ) self.show_support_models(pretrained_models) - - # show ASR static pretrained model - from paddlespeech.server.engine.asr.paddleinference.asr_engine import pretrained_models - logger.info( - "Here is the list of ASR static pretrained models released by PaddleSpeech that can be used by command line and python API" - ) - self.show_support_models(pretrained_models) - return True except BaseException: logger.error("Failed to get the list of ASR pretrained models.") @@ -132,14 +124,6 @@ class StatsExecutor(): "Here is the list of TTS pretrained models released by PaddleSpeech that can be used by command line and python API" ) self.show_support_models(pretrained_models) - - # show TTS static pretrained model - from paddlespeech.server.engine.tts.paddleinference.tts_engine import pretrained_models - logger.info( - "Here is the list of TTS static pretrained models released by PaddleSpeech that can be used by command line and python API" - ) - self.show_support_models(pretrained_models) - return True except BaseException: logger.error("Failed to get the list of TTS pretrained models.") From 96abb33b5b71be351b30c402b6e74de16673d1a8 Mon Sep 17 00:00:00 2001 From: lym0302 Date: Mon, 28 Feb 2022 15:55:09 +0800 Subject: [PATCH 4/4] add __call__, test=doc --- paddlespeech/cli/stats/infer.py | 55 +++++++++++++++++++++++++++++++-- 1 file changed, 52 insertions(+), 3 deletions(-) diff --git a/paddlespeech/cli/stats/infer.py b/paddlespeech/cli/stats/infer.py index 676f5f73..76b2f47b 100644 --- a/paddlespeech/cli/stats/infer.py +++ b/paddlespeech/cli/stats/infer.py @@ -136,10 +136,59 @@ class StatsExecutor(): """ Python API to call an executor. """ - if task not in ['asr', 'cls', 'st', 'text', 'tts']: + self.task = task + if self.task not in self.task_choices: print( "Please input correct speech task, choices = ['asr', 'cls', 'st', 'text', 'tts']" ) - res = "" - return res + elif self.task == 'asr': + try: + from ..asr.infer import pretrained_models + print( + "Here is the list of ASR pretrained models released by PaddleSpeech that can be used by command line and python API" + ) + self.show_support_models(pretrained_models) + except BaseException: + print("Failed to get the list of ASR pretrained models.") + + elif self.task == 'cls': + try: + from ..cls.infer import pretrained_models + print( + "Here is the list of CLS pretrained models released by PaddleSpeech that can be used by command line and python API" + ) + self.show_support_models(pretrained_models) + except BaseException: + print("Failed to get the list of CLS pretrained models.") + + elif self.task == 'st': + try: + from ..st.infer import pretrained_models + print( + "Here is the list of ST pretrained models released by PaddleSpeech that can be used by command line and python API" + ) + self.show_support_models(pretrained_models) + except BaseException: + print("Failed to get the list of ST pretrained models.") + + elif self.task == 'text': + try: + from ..text.infer import pretrained_models + print( + "Here is the list of TEXT pretrained models released by PaddleSpeech that can be used by command line and python API" + ) + self.show_support_models(pretrained_models) + except BaseException: + print( + "Failed to get the list of TEXT pretrained models.") + + elif self.task == 'tts': + try: + from ..tts.infer import pretrained_models + print( + "Here is the list of TTS pretrained models released by PaddleSpeech that can be used by command line and python API" + ) + self.show_support_models(pretrained_models) + except BaseException: + print("Failed to get the list of TTS pretrained models.") \ No newline at end of file