from typing import List, Dict, Any 
from iinfer import version
from iinfer.app import common
import locale
import os

class Options:
    USE_REDIS_FALSE = -1
    USE_REDIS_MEIGHT = 0
    USE_REDIS_TRUE = 1
    def __init__(self):
        self._options = dict()
        self.init_options()

    def get_mode_keys(self) -> List[str]:
        return [key for key,val in self._options["mode"].items() if type(val) == dict]

    def get_modes(self) -> List[Dict[str, str]]:
        """
        起動モードの選択肢を取得します。
        Returns:
            List[Dict[str, str]]: 起動モードの選択肢
        """
        return [''] + [{key:val} for key,val in self._options["mode"].items() if type(val) == dict]

    def get_cmd_keys(self, mode:str) -> List[str]:
        if mode not in self._options["cmd"]:
            return []
        return [key for key,val in self._options["cmd"][mode].items() if type(val) == dict]

    def get_cmds(self, mode:str) -> List[Dict[str, str]]:
        """
        コマンドの選択肢を取得します。
        Args:
            mode: 起動モード
        Returns:
            List[Dict[str, str]]: コマンドの選択肢
        """
        if mode not in self._options["cmd"]:
            return ['Please select mode.']
        ret = [{key:val} for key,val in self._options["cmd"][mode].items() if type(val) == dict]
        if len(ret) > 0:
            return [''] + ret
        return ['Please select mode.']

    def get_cmd_attr(self, mode:str, cmd:str, attr:str) -> Any:
        """
        コマンドの属性を取得します。
        Args:
            mode: 起動モード
            cmd: コマンド
            attr: 属性
        Returns:
            Any: 属性の値
        """
        if mode not in self._options["cmd"]:
            return [f'Unknown mode. ({mode})']
        if cmd is None or cmd == "" or cmd not in self._options["cmd"][mode]:
            return []
        if attr not in self._options["cmd"][mode][cmd]:
            return None
        return self._options["cmd"][mode][cmd][attr]

    def get_cmd_choices(self, mode:str, cmd:str) -> List[Dict[str, Any]]:
        """
        コマンドのオプション一覧を取得します。
        Args:
            mode: 起動モード
            cmd: コマンド
        Returns:
            List[Dict[str, Any]]: オプションの選択肢
        """
        return self.get_cmd_attr(mode, cmd, "choise")

    def get_cmd_opt(self, mode:str, cmd:str, opt:str) -> Dict[str, Any]:
        """
        コマンドのオプションを取得します。
        Args:
            mode: 起動モード
            cmd: コマンド
            opt: オプション
        Returns:
            Dict[str, Any]: オプションの値
        """
        opts = self.get_cmd_choices(mode, cmd)
        for o in opts:
            if 'opt' in o and o['opt'] == opt:
                return o
        return None

    def list_options(self):
        def _list(ret, key, val):
            if type(val) == dict:
                opt = dict()
                if val['type'] == 'int':
                    opt['type'] = int
                    opt['action'] = 'append' if val['multi'] else None
                elif val['type'] == 'float':
                    opt['type'] = float
                    opt['action'] = 'append' if val['multi'] else None
                elif val['type'] == 'bool':
                    opt['type'] = None
                    opt['action'] = 'store_true'
                else:
                    opt['type'] = str
                    opt['action'] = 'append' if val['multi'] else None
                o = [f'-{val["short"]}'] if "short" in val else []
                o += [f'--{key}']
                language, _ = locale.getlocale()
                opt['help'] = val['discription_en'] if language.find('Japan') < 0 and language.find('ja_JP') < 0 else val['discription_ja']
                opt['default'] = val['default']
                opt['opts'] = o
                if val['choise'] is not None:
                    opt['choices'] = []
                    for c in val['choise']:
                        if type(c) == dict:
                            opt['choices'] += [c['opt']]
                        elif c is not None and c != "":
                            opt['choices'] += [c]
                else:
                    opt['choices'] = None
                ret[key] = opt
        ret = dict()
        for k, v in self._options.items():
            _list(ret, k, v)
        for mode in self._options["mode"]['choise']:
            for c, cmd in mode.items():
                if type(cmd) is not dict:
                    continue
                for opt in cmd["choise"]:
                    if type(opt) is not dict:
                        continue
                    _list(ret, opt['opt'], opt)
        return ret

    def mk_opt_list(self, opt:dict):
        opt_schema = self.get_cmd_choices(opt['mode'], opt['cmd'])
        opt_list = ['-m', opt['mode'], '-c', opt['cmd']]
        file_dict = dict()
        for key, val in opt.items():
            if key in ['stdout_log', 'capture_stdout']:
                continue
            schema = [schema for schema in opt_schema if schema['opt'] == key]
            if len(schema) == 0 or val == '':
                continue
            if schema[0]['type'] == 'bool':
                if val:
                    opt_list.append(f"--{key}")
                continue
            if type(val) == list:
                for v in val:
                    if v is None or v == '':
                        continue
                    opt_list.append(f"--{key}")
                    if str(v).find(' ') >= 0:
                        opt_list.append(f'"{v}"')
                    else:
                        opt_list.append(str(v))
            elif val is not None and val != '':
                opt_list.append(f"--{key}")
                if str(val).find(' ') >= 0:
                    opt_list.append(f'"{val}"')
                else:
                    opt_list.append(str(val))
            if 'fileio' in schema[0] and schema[0]['fileio'] == 'in' and type(val) != str:
                file_dict[key] = val
        return opt_list, file_dict

    def init_options(self):
        default_host = os.environ.get('REDIS_HOST', 'localhost')
        default_port = int(os.environ.get('REDIS_PORT', '6379'))
        default_pass = os.environ.get('REDIS_PASSWORD', 'password')
        self._options = dict()
        self._options["version"] = dict(
            short="v", type="bool", default=None, required=False, multi=False, hide=True,
            discription_ja="バージョン表示",
            discription_en="Display version",
            choise=None)
        self._options["useopt"] = dict(
            short="u", type="str", default=None, required=False, multi=False, hide=True,
            discription_ja="オプションを保存しているファイルを使用します。",
            discription_en="Use the file that saves the options.",
            choise=None)
        self._options["saveopt"] = dict(
            short="s", type="bool", default=None, required=False, multi=False, hide=True,
            discription_ja="指定しているオプションを `-u` で指定したファイルに保存します。",
            discription_en="Save the specified options to the file specified by `-u`.",
            choise=[True, False])
        self._options["debug"] = dict(
            short="d", type="bool", default=False, required=False, multi=False, hide=True,
            discription_ja="デバックモードで起動します。",
            discription_en="Starts in debug mode.",
            choise=[True, False])
        self._options["format"] = dict(
            short="f", type="bool", default=None, required=False, multi=False, hide=True,
            discription_ja="処理結果を見やすい形式で出力します。指定しない場合json形式で出力します。",
            discription_en="Output the processing result in an easy-to-read format. If not specified, output in json format.",
            choise=None)
        self._options["mode"] = dict(
            short="m", type="str", default=None, required=True, multi=False, hide=True,
            discription_ja="起動モードを指定します。",
            discription_en="Specify the startup mode.",
            choise=[])
        self._options["cmd"] = dict(
            short="c", type="str", default=None, required=True, multi=False, hide=True,
            discription_ja="コマンドを指定します。",
            discription_en="Specify the command.",
            choise=[],
            install=dict(
                discription_ja="インストールモード",
                discription_en="Install mode",
                onnx=dict(
                    type="str", default=None, required=False, multi=False, hide=False, use_redis=self.USE_REDIS_FALSE,
                    discription_ja="`onnxruntime` をインストールします。",
                    discription_en="Install `onnxruntime`.",
                    choise=[
                        dict(opt="output_json", short="o", type="file", default="", required=False, multi=False, hide=True, choise=None, fileio="out",
                             discription_ja="処理結果jsonの保存先ファイルを指定。",
                             discription_en="Specify the destination file for saving the processing result json.",
                             test_true={"win":None}),
                        dict(opt="output_json_append", short="a", type="bool", default=False, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="処理結果jsonファイルを追記保存します。",
                             discription_en="Save the processing result json file by appending."),
                        dict(opt="stdout_log", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をConsole logに出力します。",
                             discription_en="Available only in GUI mode. Outputs standard output during command execution to Console log."),
                        dict(opt="capture_stdout", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をキャプチャーし、実行結果画面に表示します。",
                             discription_en="Available only in GUI mode. Captures standard output during command execution and displays it on the execution result screen."),
                    ]
                ),
                mmdet=dict(
                    type="str", default=None, required=False, multi=False, hide=False, use_redis=self.USE_REDIS_FALSE,
                    discription_ja="`mmdetection` をインストールします。",
                    discription_en="Install `mmdetection`.",
                    choise=[
                        dict(opt="install_use_gpu", type="bool", default=False, required=False, multi=False, hide=False, choise=[True, False],
                             discription_ja="GPUを使用するモジュール構成でインストールします。",
                             discription_en="Install with a module configuration that uses the GPU.",
                             test_true={"win":True}),
                        dict(opt="output_json", short="o", type="file", default="", required=False, multi=False, hide=True, choise=None, fileio="out",
                             discription_ja="処理結果jsonの保存先ファイルを指定。",
                             discription_en="Specify the destination file for saving the processing result json."),
                        dict(opt="output_json_append", short="a", type="bool", default=False, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="処理結果jsonファイルを追記保存します。",
                             discription_en="Save the processing result json file by appending."),
                        dict(opt="stdout_log", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をConsole logに出力します。",
                             discription_en="Available only in GUI mode. Outputs standard output during command execution to Console log."),
                        dict(opt="capture_stdout", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をキャプチャーし、実行結果画面に表示します。",
                             discription_en="Available only in GUI mode. Captures standard output during command execution and displays it on the execution result screen."),
                    ]
                ),
                mmseg=dict(
                    type="str", default=None, required=False, multi=False, hide=False, use_redis=self.USE_REDIS_FALSE,
                    discription_ja="`mmsegmentation` をインストールします。",
                    discription_en="Install `mmsegmentation`.",
                    choise=[
                        dict(opt="install_use_gpu", type="bool", default=False, required=False, multi=False, hide=False, choise=[True, False],
                             discription_ja="GPUを使用するモジュール構成でインストールします。",
                             discription_en="Install with a module configuration that uses the GPU.",
                             test_true={"win":True}),
                        dict(opt="output_json", short="o", type="file", default="", required=False, multi=False, hide=True, choise=None, fileio="out",
                             discription_ja="処理結果jsonの保存先ファイルを指定。",
                             discription_en="Specify the destination file for saving the processing result json."),
                        dict(opt="output_json_append", short="a", type="bool", default=False, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="処理結果jsonファイルを追記保存します。",
                             discription_en="Save the processing result json file by appending."),
                        dict(opt="stdout_log", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をConsole logに出力します。",
                             discription_en="Available only in GUI mode. Outputs standard output during command execution to Console log."),
                        dict(opt="capture_stdout", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をキャプチャーし、実行結果画面に表示します。",
                             discription_en="Available only in GUI mode. Captures standard output during command execution and displays it on the execution result screen."),
                    ]
                ),
                mmcls=dict(
                    type="str", default=None, required=False, multi=False, hide=False, use_redis=self.USE_REDIS_FALSE,
                    discription_ja="`mmcls` をインストールします。",
                    discription_en="Install `mmcls`.",
                    choise=[
                        dict(opt="install_use_gpu", type="bool", default=False, required=False, multi=False, hide=False, choise=[True, False],
                             discription_ja="GPUを使用するモジュール構成でインストールします。",
                             discription_en="Install with a module configuration that uses the GPU."),
                        dict(opt="output_json", short="o", type="file", default="", required=False, multi=False, hide=True, choise=None, fileio="out",
                             discription_ja="処理結果jsonの保存先ファイルを指定。",
                             discription_en="Specify the destination file for saving the processing result json."),
                        dict(opt="output_json_append", short="a", type="bool", default=False, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="処理結果jsonファイルを追記保存します。",
                             discription_en="Save the processing result json file by appending."),
                        dict(opt="stdout_log", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をConsole logに出力します。",
                             discription_en="Available only in GUI mode. Outputs standard output during command execution to Console log."),
                        dict(opt="capture_stdout", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をキャプチャーし、実行結果画面に表示します。",
                             discription_en="Available only in GUI mode. Captures standard output during command execution and displays it on the execution result screen."),
                    ]
                ),
                mmpretrain=dict(
                    type="str", default=None, required=False, multi=False, hide=False, use_redis=self.USE_REDIS_FALSE,
                    discription_ja="`mmpretrain` をインストールします。",
                    discription_en="Install `mmpretrain`.",
                    choise=[
                        dict(opt="install_use_gpu", type="bool", default=False, required=False, multi=False, hide=False, choise=[True, False],
                             discription_ja="GPUを使用するモジュール構成でインストールします。",
                             discription_en="Install with a module configuration that uses the GPU.",
                             test_true={"win":True}),
                        dict(opt="output_json", short="o", type="file", default="", required=False, multi=False, hide=True, choise=None, fileio="out",
                             discription_ja="処理結果jsonの保存先ファイルを指定。",
                             discription_en="Specify the destination file for saving the processing result json."),
                        dict(opt="output_json_append", short="a", type="bool", default=False, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="処理結果jsonファイルを追記保存します。",
                             discription_en="Save the processing result json file by appending."),
                        dict(opt="stdout_log", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をConsole logに出力します。",
                             discription_en="Available only in GUI mode. Outputs standard output during command execution to Console log."),
                        dict(opt="capture_stdout", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をキャプチャーし、実行結果画面に表示します。",
                             discription_en="Available only in GUI mode. Captures standard output during command execution and displays it on the execution result screen."),
                    ]
                ),
                insightface=dict(
                    type="str", default=None, required=False, multi=False, hide=False, use_redis=self.USE_REDIS_FALSE,
                    discription_ja="`insightface` をインストールします。",
                    discription_en="Install `insightface`.",
                    choise=[
                        dict(opt="install_use_gpu", type="bool", default=False, required=False, multi=False, hide=False, choise=[True, False],
                             discription_ja="GPUを使用するモジュール構成でインストールします。",
                             discription_en="Install with a module configuration that uses the GPU.",
                             test_true={"win":True}),
                        dict(opt="output_json", short="o", type="file", default="", required=False, multi=False, hide=True, choise=None, fileio="out",
                             discription_ja="処理結果jsonの保存先ファイルを指定。",
                             discription_en="Specify the destination file for saving the processing result json."),
                        dict(opt="output_json_append", short="a", type="bool", default=False, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="処理結果jsonファイルを追記保存します。",
                             discription_en="Save the processing result json file by appending."),
                        dict(opt="stdout_log", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をConsole logに出力します。",
                             discription_en="Available only in GUI mode. Outputs standard output during command execution to Console log."),
                        dict(opt="capture_stdout", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をキャプチャーし、実行結果画面に表示します。",
                             discription_en="Available only in GUI mode. Captures standard output during command execution and displays it on the execution result screen."),
                    ]
                ),
                diffusers=dict(
                    type="str", default=None, required=False, multi=False, hide=False, use_redis=self.USE_REDIS_FALSE,
                    discription_ja="`diffusers` をインストールします。",
                    discription_en="Install `diffusers`.",
                    choise=[
                        dict(opt="install_use_gpu", type="bool", default=False, required=False, multi=False, hide=False, choise=[True, False],
                             discription_ja="GPUを使用するモジュール構成でインストールします。",
                             discription_en="Install with a module configuration that uses the GPU."),
                        dict(opt="output_json", short="o", type="file", default="", required=False, multi=False, hide=True, choise=None, fileio="out",
                             discription_ja="処理結果jsonの保存先ファイルを指定。",
                             discription_en="Specify the destination file for saving the processing result json."),
                        dict(opt="output_json_append", short="a", type="bool", default=False, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="処理結果jsonファイルを追記保存します。",
                             discription_en="Save the processing result json file by appending."),
                        dict(opt="stdout_log", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をConsole logに出力します。",
                             discription_en="Available only in GUI mode. Outputs standard output during command execution to Console log."),
                        dict(opt="capture_stdout", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をキャプチャーし、実行結果画面に表示します。",
                             discription_en="Available only in GUI mode. Captures standard output during command execution and displays it on the execution result screen."),
                    ]
                ),
                llamaindex=dict(
                    type="str", default=None, required=False, multi=False, hide=False, use_redis=self.USE_REDIS_FALSE,
                    discription_ja="`llamaindex` をインストールします。",
                    discription_en="Install `llamaindex`.",
                    choise=[
                        dict(opt="install_use_gpu", type="bool", default=False, required=False, multi=False, hide=False, choise=[True, False],
                             discription_ja="GPUを使用するモジュール構成でインストールします。",
                             discription_en="Install with a module configuration that uses the GPU."),
                        dict(opt="output_json", short="o", type="file", default="", required=False, multi=False, hide=True, choise=None, fileio="out",
                             discription_ja="処理結果jsonの保存先ファイルを指定。",
                             discription_en="Specify the destination file for saving the processing result json."),
                        dict(opt="output_json_append", short="a", type="bool", default=False, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="処理結果jsonファイルを追記保存します。",
                             discription_en="Save the processing result json file by appending."),
                        dict(opt="stdout_log", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をConsole logに出力します。",
                             discription_en="Available only in GUI mode. Outputs standard output during command execution to Console log."),
                        dict(opt="capture_stdout", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をキャプチャーし、実行結果画面に表示します。",
                             discription_en="Available only in GUI mode. Captures standard output during command execution and displays it on the execution result screen."),
                    ]
                ),
                redis=dict(
                    type="str", default=None, required=False, multi=False, hide=False, use_redis=self.USE_REDIS_FALSE,
                    discription_ja="`redis-server` のdockerイメージをPULLします。",
                    discription_en="PULL the docker image of `redis-server`.",
                    choise=[
                        dict(opt="wsl_name", type="str", default="", required=False, multi=False, hide=True, choise=None,
                             discription_ja="Windowsの場合はWSLのディストリビューションの名前を指定します。",
                             discription_en="For Windows, specify the name of the WSL distribution.",
                             test_true={"win":"Ubuntu_docker-22.04"}),
                        dict(opt="wsl_user", type="str", default="ubuntu", required=False, multi=False, hide=True, choise=None,
                             discription_ja="Windowsの場合はWSL内のユーザー名を指定します。",
                             discription_en="For Windows, specify the user name in WSL.",
                             test_true={"win":"ubuntu"}),
                        dict(opt="output_json", short="o", type="file", default="", required=False, multi=False, hide=True, choise=None, fileio="out",
                             discription_ja="処理結果jsonの保存先ファイルを指定。",
                             discription_en="Specify the destination file for saving the processing result json."),
                        dict(opt="output_json_append", short="a", type="bool", default=False, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="処理結果jsonファイルを追記保存します。",
                             discription_en="Save the processing result json file by appending."),
                        dict(opt="stdout_log", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をConsole logに出力します。",
                             discription_en="Available only in GUI mode. Outputs standard output during command execution to Console log."),
                        dict(opt="capture_stdout", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をキャプチャーし、実行結果画面に表示します。",
                             discription_en="Available only in GUI mode. Captures standard output during command execution and displays it on the execution result screen."),
                    ]
                ),
                server=dict(
                    type="str", default=None, required=False, multi=False, hide=False, use_redis=self.USE_REDIS_FALSE,
                    discription_ja="`推論サーバー` のdockerイメージを `build` します。`build` が成功すると、実行時ディレクトリに `docker-compose.yml` ファイルが生成されます。",
                    discription_en="`Build` the docker image of the `inference server`. If the `build` is successful, a `docker-compose.yml` file is generated in the execution directory.",
                    choise=[
                        dict(opt="data", type="file", default=common.HOME_DIR / '.iinfer', required=False, multi=False, hide=False, choise=None,
                             discription_ja="省略した時は `$HONE/.iinfer` を使用します。",
                             discription_en="When omitted, `$HONE/.iinfer` is used."),
                        dict(opt="install_iinfer", type="str", default='iinfer', required=False, multi=False, hide=True, choise=None,
                             discription_ja=f"省略した時は `iinfer` を使用します。 `iinfer=={version.__version__}` といった指定も可能です。",
                             discription_en=f"When omitted, `iinfer` is used. You can also specify `iinfer=={version.__version__}`.",
                             test_false={"win":"iinfer"}),
                        dict(opt="install_onnx", type="bool", default=False, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="dockerイメージ内に `onnxruntime` をインストールします。",
                             discription_en="Install `onnxruntime` in the docker image."),
                        dict(opt="install_mmdet", type="bool", default=False, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="dockerイメージ内に `mmdetection` をインストールします。",
                             discription_en="Install `mmdetection` in the docker image."),
                        dict(opt="install_mmseg", type="bool", default=False, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="dockerイメージ内に `mmsegmentation` をインストールします。",
                             discription_en="Install `mmsegmentation` in the docker image."),
                        dict(opt="install_mmcls", type="bool", default=False, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="dockerイメージ内に `mmclassification` をインストールします。",
                             discription_en="Install `mmclassification` in the docker image."),
                        dict(opt="install_mmpretrain", type="bool", default=False, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="dockerイメージ内に `mmpretrain` をインストールします。",
                             discription_en="Install `mmpretrain` in the docker image."),
                        dict(opt="install_insightface", type="bool", default=False, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="dockerイメージ内に `insightface` をインストールします。",
                             discription_en="Install `insightface` in the docker image."),
                        dict(opt="install_diffusers", type="bool", default=False, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="dockerイメージ内に `diffusers` をインストールします。",
                             discription_en="Install `diffusers` in the docker image."),
                        dict(opt="install_llamaindex", type="bool", default=False, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="dockerイメージ内に `llamaindex` をインストールします。",
                             discription_en="Install `llamaindex` in the docker image."),
                        dict(opt="install_from", type="str", default="", required=False, multi=False, hide=False, choise=None,
                             discription_ja="作成するdockerイメージの元となるFROMイメージを指定します。",
                             discription_en="Specify the FROM image that will be the source of the docker image to be created."),
                        dict(opt="install_no_python", type="bool", default=False, required=False, multi=False, hide=False, choise=[True, False],
                             discription_ja="pythonのインストールを行わないようにします。",
                             discription_en="Do not install python."),
                        dict(opt="install_tag", type="str", default="", required=False, multi=False, hide=False, choise=None,
                             discription_ja="指定すると作成するdockerイメージのタグ名に追記出来ます。",
                             discription_en="If specified, you can add to the tag name of the docker image to create."),
                        dict(opt="install_use_gpu", type="bool", default=False, required=False, multi=False, hide=False, choise=[True, False],
                             discription_ja="GPUを使用するモジュール構成でインストールします。",
                             discription_en="Install with a module configuration that uses the GPU."),
                        dict(opt="output_json", short="o", type="file", default="", required=False, multi=False, hide=True, choise=None, fileio="out",
                             discription_ja="処理結果jsonの保存先ファイルを指定。",
                             discription_en="Specify the destination file for saving the processing result json."),
                        dict(opt="output_json_append", short="a", type="bool", default=False, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="処理結果jsonファイルを追記保存します。",
                             discription_en="Save the processing result json file by appending."),
                        dict(opt="stdout_log", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をConsole logに出力します。",
                             discription_en="Available only in GUI mode. Outputs standard output during command execution to Console log."),
                        dict(opt="capture_stdout", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をキャプチャーし、実行結果画面に表示します。",
                             discription_en="Available only in GUI mode. Captures standard output during command execution and displays it on the execution result screen."),
                    ]
                ),
            ),
            client=dict(
                discription_ja="クライアントモード",
                discription_en="Client mode",
                read_dir=dict(
                    type="str", default=None, required=False, multi=False, hide=False, use_redis=self.USE_REDIS_FALSE,
                    discription_ja="クライアント側でディレクトリ内の画像ファイルを取得します。",
                    discription_en="Get image files in the directory on the client side.",
                    test_assert="assert result != ''",
                    choise=[
                        dict(opt="glob_str", type="str", default=None, required=True, multi=False, hide=False, choise=None,
                             discription_ja="読込むファイルのglobパターンを指定します。",
                             discription_en="Specifies the glob pattern of the file to be read.",
                             test_true={"jpeg":"tests/*.jpg"}),
                        dict(opt="read_input_type", type="str", default="jpeg", required=True, multi=False, hide=False, choise=['bmp', 'png', 'jpeg', 'capture', 'filelist'],
                             discription_ja="読込む画像のタイプを指定します。",
                             discription_en="Specifies the type of image to be loaded.",
                             test_true={"jpeg":"jpeg",
                                        "bmp":"bmp",
                                        "png":"png",
                                        "capture":"capture",
                                        "filelist":"filelist"}),
                        dict(opt="image_type", type="str", default="capture", required=True, multi=False, hide=False, choise=['bmp', 'png', 'jpeg', 'capture'],
                             discription_ja="出力する画像のタイプを指定します。",
                             discription_en="Specify the type of image to output.",
                             test_true={"jpeg":"capture",
                                        "bmp":"bmp",
                                        "png":"png"}),
                        dict(opt="root_dir", type="dir", default=None, required=True, multi=False, hide=False, choise=None,
                             discription_ja="検索の基準となるルートディレクトリを指定します。",
                             discription_en="Specifies the root directory on which to base the search.",
                             test_true={"jpeg":"."}),
                        dict(opt="include_hidden", type="bool", default=False, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="読込むファイルの種類に隠しファイルを含めるかどうかを指定します。",
                             discription_en="Specify whether to include hidden files in the types of files to be read.",
                             test_true={"jpeg":False,
                                        "bmp":True}),
                        dict(opt="moveto", type="dir", default=None, required=False, multi=False, hide=False, choise=None,
                             discription_ja="読み込んだファイルを移動する先のディレクトリを指定します。",
                             discription_en="Specifies the destination directory to which loaded files are to be moved."),
                        dict(opt="polling", type="bool", default=False, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="定期的にディレクトリ内の読込みを繰り返すかどうかを指定します。",
                             discription_en="Specifies whether to repeat reading in the directory periodically.",
                             test_true={"jpeg":True}),
                        dict(opt="polling_count", type="int", default=10, required=False, multi=False, hide=True, choise=None,
                             discription_ja="ディレクトリ内の読込みの繰り返し回数を指定します。0以下の場合は無限に繰り返します。",
                             discription_en="Specifies the number of repeated readings in the directory.If it is less than or equal to 0, it repeats indefinitely.",
                             test_true={"jpeg":2}),
                        dict(opt="polling_interval", type="int", default=1, required=False, multi=False, hide=True, choise=None,
                             discription_ja="ディレクトリ内の読込みの繰り返し間隔(秒)を指定します。",
                             discription_en="Specifies the repetition interval (in seconds) for reading in the directory.",
                             test_true={"jpeg":1}),
                        dict(opt="output_csv", type="file", default="", required=False, multi=False, hide=True, choise=None, fileio="out",
                             discription_ja="入力した内容をcsvで保存します。これを指定した場合、標準出力は行いません。",
                             discription_en="Saves the input as a csv file. If this is specified, no standard output is performed.",
                             test_true={"jpeg":None,
                                        "bmp":"read_dir.csv"}),
                        dict(opt="stdout_log", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をConsole logに出力します。",
                             discription_en="Available only in GUI mode. Outputs standard output during command execution to Console log."),
                        dict(opt="capture_stdout", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をキャプチャーし、実行結果画面に表示します。",
                             discription_en="Available only in GUI mode. Captures standard output during command execution and displays it on the execution result screen."),
                    ]
                ),
                capture=dict(
                    type="str", default=None, required=False, multi=False, hide=False, use_redis=self.USE_REDIS_FALSE,
                    discription_ja="クライアント側でキャプチャー画像を取得します。",
                    discription_en="Get a capture image on the client side.",
                    test_assert="assert result != ''",
                    choise=[
                        dict(opt="capture_device", type="str", default="0", required=True, multi=False, hide=False, choise=None,
                             discription_ja="キャプチャーディバイスを指定します。 `cv2.VideoCapture` の第一引数に渡される値。",
                             discription_en="Specify the capture device. The value passed to the first argument of `cv2.VideoCapture`.",
                             test_true={"jpeg":"0",},
                             test_false={"jpeg":"-1"}),
                        dict(opt="image_type", type="str", default="capture", required=True, multi=False, hide=False, choise=['bmp', 'png', 'jpeg', 'capture'],
                             discription_ja="出力する画像のタイプを指定します。",
                             discription_en="Specify the type of image to output.",
                             test_true={"jpeg":"capture",
                                        "bmp":"bmp",
                                        "png":"png",
                                        "capture":"capture"}),
                        dict(opt="capture_frame_width", type="int", default=640, required=False, multi=False, hide=True, choise=None,
                             discription_ja="キャプチャーする画像の横px。 `cv2.VideoCapture` オブジェクトの `cv2.CAP_PROP_FRAME_WIDTH` オプションに指定する値。",
                             discription_en="Width px of the image to be captured. The value to be specified in the `cv2.CAP_PROP_FRAME_WIDTH` option of the `cv2.VideoCapture` object.",
                             test_true={"jpeg":640},
                             test_false={"jpeg":-10}),
                        dict(opt="capture_frame_height", type="int", default=480, required=False, multi=False, hide=True, choise=None,
                             discription_ja="キャプチャーする画像の縦px。 `cv2.VideoCapture` オブジェクトの `cv2.CAP_PROP_FRAME_HEIGHT` オプションに指定する値。",
                             discription_en="Height px of the image to be captured. The value to be specified in the `cv2.CAP_PROP_FRAME_HEIGHT` option of the `cv2.VideoCapture` object.",
                             test_true={"jpeg":480},
                             test_false={"jpeg":-10}),
                        dict(opt="capture_fps", type="int", default=5, required=False, multi=False, hide=True, choise=None,
                             discription_ja="キャプチャーする画像のFPS。キャプチャーが指定した値より高速な場合に残り時間分をsleepします。",
                             discription_en="FPS of the image to be captured. If the capture is faster than the specified value, sleep for the remaining time.",
                             test_true={"jpeg":5},
                             test_false={"jpeg":-1}),
                        dict(opt="capture_count", type="int", default=5, required=False, multi=False, hide=False, choise=None,
                             discription_ja="キャプチャーする回数。",
                             discription_en="Number of captures.",
                             test_true={"jpeg":3},
                             test_false={"jpeg":-1}),
                        dict(opt="output_preview", type="bool", default=False, required=False, multi=False, hide=False, choise=[True, False],
                             discription_ja="推論結果画像を `cv2.imshow` で表示します。",
                             discription_en="Display the inference result image with `cv2.imshow`.",
                             test_true={"jpeg":True}),
                        dict(opt="output_csv", type="file", default="", required=False, multi=False, hide=True, choise=None, fileio="out",
                             discription_ja="入力した内容をcsvで保存します。これを指定した場合、標準出力は行いません。",
                             discription_en="Saves the input as a csv file. If this is specified, no standard output is performed.",
                             test_true={"jpeg":"capture.csv"}),
                        dict(opt="stdout_log", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をConsole logに出力します。",
                             discription_en="Available only in GUI mode. Outputs standard output during command execution to Console log."),
                        dict(opt="capture_stdout", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をキャプチャーし、実行結果画面に表示します。",
                             discription_en="Available only in GUI mode. Captures standard output during command execution and displays it on the execution result screen."),
                    ]
                ),
                deploy=dict(
                    type="str", default=None, required=False, multi=False, hide=False, use_redis=self.USE_REDIS_TRUE,
                    discription_ja="AIモデルをサーバーに配備します。",
                    discription_en="Deploy AI model to server.",
                    choise=[
                        dict(opt="host", type="str", default=default_host, required=True, multi=False, hide=True, choise=None,
                            discription_ja="Redisサーバーのサービスホストを指定します。",
                            discription_en="Specify the service host of the Redis server.",
                            test_true={"yolox":"localhost"},
                            test_false={"yolox":"redis"}),
                        dict(opt="port", type="int", default=default_port, required=True, multi=False, hide=True, choise=None,
                            discription_ja="Redisサーバーのサービスポートを指定します。",
                            discription_en="Specify the service port of the Redis server.",
                            test_true={"yolox":6379},
                            test_false={"yolox":6380}),
                        dict(opt="password", type="str", default=default_pass, required=True, multi=False, hide=True, choise=None,
                            discription_ja="Redisサーバーのアクセスパスワード(任意)を指定します。省略時は `password` を使用します。",
                            discription_en="Specify the access password of the Redis server (optional). If omitted, `password` is used.",
                            test_true={"yolox":"password"},
                            test_false={"yolox":"password2"}),
                        dict(opt="svname", type="str", default="server", required=True, multi=False, hide=True, choise=None,
                            discription_ja="推論サーバーのサービス名を指定します。省略時は `server` を使用します。",
                            discription_en="Specify the service name of the inference server. If omitted, `server` is used.",
                            test_true={"yolox":"server"},
                            test_false={"yolox":"serverX"}),
                        dict(short="n", opt="name", type="str", default="", required=True, multi=False, hide=False, choise=None,
                            discription_ja="AIモデルの登録名を指定します。",
                            discription_en="Specify the registration name of the AI model.",
                            test_true={"yolox":"yolox",
                                       "upernet":"upernet",
                                       "san":"san",
                                       "pspnet":"pspnet",
                                       "swin":"swin",
                                       "lnsightface":"lnsightface",
                                       "yolo3":"yolo3",
                                       "effnet":"effnet",
                                       "custom":"custom"}),
                        dict(opt="model_file", type="file", default="", required=True, multi=False, hide=False, choise=None, fileio="in",
                            discription_ja="学習済みのモデルファイルのパス又はダウンロードURLを指定します。",
                            discription_en="Specify the path or download URL of the trained model file.",
                            test_true={"yolox":"https://download.openmmlab.com/mmdetection/v2.0/yolox/yolox_s_8x8_300e_coco/yolox_s_8x8_300e_coco_20211121_095711-4592a793.pth",
                                       "upernet":"https://download.openmmlab.com/mmsegmentation/v0.5/swin/upernet_swin_small_patch4_window7_512x512_160k_ade20k_pretrain_224x224_1K/upernet_swin_small_patch4_window7_512x512_160k_ade20k_pretrain_224x224_1K_20210526_192015-ee2fff1c.pth",
                                       "san":"https://download.openmmlab.com/mmsegmentation/v0.5/san/san-vit-b16_20230906-fd0a7684.pth",
                                       "pspnet":"https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r18b-d8_512x1024_80k_cityscapes/pspnet_r18b-d8_512x1024_80k_cityscapes_20201226_063116-26928a60.pth",
                                       "swin":"https://download.openmmlab.com/mmclassification/v0/swin-transformer/swin_small_224_b16x64_300e_imagenet_20210615_110219-7f9d988b.pth",
                                       "lnsightface":"https://drive.usercontent.google.com/download?id=1pKIusApEfoHKDjeBTXYB3yOQ0EtTonNE&export=download&authuser=0&confirm=t&uuid=00c74cef-3534-49a3-942b-582771fad908&at=APZUnTXNi6MNLsiK-EMqx_cRMJ8a%3A1723645526732",
                                       "yolo3":"https://github.com/onnx/models/raw/main/validated/vision/object_detection_segmentation/yolov3/model/yolov3-10.onnx",
                                       "effnet":"https://github.com/onnx/models/raw/main/validated/vision/classification/efficientnet-lite4/model/efficientnet-lite4-11-qdq.onnx",
                                       "custom":"https://download.openmmlab.com/mmdetection/v2.0/yolox/yolox_s_8x8_300e_coco/yolox_s_8x8_300e_coco_20211121_095711-4592a793.pth"},
                            test_false={"yolox":"https://download.openmmlab.com/mmdetection/v2.0/yolox/yolox_s_8x8_300e_coco/yolox_s_8x8_300e_coco_20211121_095711-4592a793.XXX.pth"}),
                        dict(opt="model_conf_file", type="file", default="", required=False, multi=True, hide=False, choise=None, fileio="in",
                            discription_ja="モデル設定ファイルを指定します。複数指定可能ですが、最初に指定したファイルが `start` 時に使用されます。",
                            discription_en="Specify the model configuration file. Multiple specifications are possible, but the file specified first is used at `start` time.",
                            test_true={"yolox":["iinfer/extensions/configs/mmdet/yolox_s_8xb8-300e_coco.py","iinfer/extensions/configs/mmdet/yolox_tta.py"],
                                       "upernet":["iinfer/extensions/configs/mmseg/swin-small-patch4-window7-in1k-pre_upernet_8xb2-160k_ade20k-512x512.py",
                                                  "iinfer/extensions/configs/mmseg/swin-tiny-patch4-window7-in1k-pre_upernet_8xb2-160k_ade20k-512x512.py"],
                                       "san":["iinfer/extensions/configs/mmseg/san-vit-b16_coco-stuff164k-640x640.py"],
                                       "pspnet":["iinfer/extensions/configs/mmseg/pspnet_r18-d8_4xb2-80k_cityscapes-512x1024.py",
                                                 "iinfer/extensions/configs/mmseg/pspnet_r50-d8_4xb2-80k_cityscapes-512x1024.py"],
                                       "swin":["iinfer/extensions/configs/mmpretrain/swin-small_16xb64_in1k.py"],
                                       "lnsightface":None,
                                       "yolo3":None,
                                       "effnet":None,
                                       "custom":["iinfer/extensions/configs/mmdet/yolox_s_8xb8-300e_coco.py","iinfer/extensions/configs/mmdet/yolox_tta.py"]},
                            test_false={"yolox":["iinfer/extensions/configs/mmdet/yolox_s_8xb8-300e_coco.py","iinfer/extensions/configs/mmdet/yolox_tta.XX"]}),
                        dict(opt="model_img_width", type="int", default="", required=False, multi=False, hide=True, choise=None,
                            discription_ja="AIモデルのINPUTサイズ(横px)を指定します。",
                            discription_en="Specify the INPUT size (width px) of the AI model.",
                            test_true={"yolox":640,
                                       "upernet":512,
                                       "san":640,
                                       "pspnet":512,
                                       "swin":384,
                                       "lnsightface":640,
                                       "yolo3":416,
                                       "effnet":224,
                                       "custom":640}),
                        dict(opt="model_img_height", type="int", default="", required=False, multi=False, hide=True, choise=None,
                            discription_ja="AIモデルのINPUTサイズ(縦px)を指定します。",
                            discription_en="Specify the INPUT size (height px) of the AI model.",
                            test_true={"yolox":640,
                                       "upernet":512,
                                       "san":640,
                                       "pspnet":512,
                                       "swin":384,
                                       "lnsightface":640,
                                       "yolo3":416,
                                       "effnet":224,
                                       "custom":640}),
                        dict(opt="predict_type", type="str", default="", required=False, multi=False, hide=False,
                            choise=['','Custom']+[key for key in common.BASE_MODELS.keys()],
                            discription_ja="AIモデルの推論タイプを指定します。",
                            discription_en="Specify the inference type of the AI model.",
                            test_true={"yolox":"mmdet_det_YoloX",
                                       "upernet":"mmseg_seg_SwinUpernet",
                                       "san":"mmseg_seg_San",
                                       "pspnet":"mmseg_seg_PSPNet",
                                       "swin":"mmpretrain_cls_swin",
                                       "lnsightface":"insightface_det",
                                       "yolo3":"onnx_det_YoloV3",
                                       "effnet":"onnx_cls_EfficientNet_Lite4",
                                       "custom":"Custom"}),
                        dict(opt="custom_predict_py", type="file", default="", required=False, multi=False, hide=True, choise=None, fileio="in",
                            discription_ja="独自の推論タイプを作成するときに指定。この時は `--predict_type Custom` を指定。",
                            discription_en="Specify when creating a custom inference type. In this case, specify `--predict_type Custom`.",
                            test_true={"yolox":None,
                                       "custom":"iinfer/tools/datas/predicts/mmdet_det_YoloX2.py"}),
                        dict(opt="label_file", type="file", default="", required=False, multi=False, hide=False, choise=None, fileio="in",
                            discription_ja="推論結果のクラスラベルファイルを指定。改行区切りでラベル名(行indexがクラスと一致する)を指定したファイル。",
                            discription_en="Specify the class label file of the inference result. A file specifying the label name (the row index matches the class) separated by line breaks.",
                            test_true={"yolox":"iinfer/extensions/label_coco.txt",
                                      "upernet":"iinfer/extensions/label_imagenet1k.txt",
                                      "san":"iinfer/extensions/label_imagenet1k.txt",
                                      "pspnet":"iinfer/extensions/label_cityscapes.txt",
                                      "swin":"iinfer/extensions/label_imagenet1k.txt",
                                      "lnsightface":None,
                                      "yolo3":None,
                                      "effnet":None,
                                      "custom":"iinfer/extensions/label_coco.txt"},
                            test_false={"yolox":"iinfer/extensions/label_coco.ttt"}),
                        dict(opt="color_file", type="file", default="", required=False, multi=False, hide=False, choise=None, fileio="in",
                            discription_ja="推論結果の可視化画像の色ファイルを指定。改行区切りで色(行indexがクラスと一致する)を指定したファイル。",
                            discription_en="Specify the color file of the visualization image of the inference result. A file specifying the color (the row index matches the class) separated by line breaks.",
                            test_true={"yolox":None}),
                        dict(opt="before_injection_type", type="str", default="", required=False, multi=True, hide=True, choise=['']+[key for key in common.BASE_BREFORE_INJECTIONS.keys()],
                            discription_ja="前処理を実行させるときに指定。",
                            discription_en="Specify when you want to execute preprocessing.",
                            test_true={"yolox":[None, "before_grayimg_injection"]},
                            test_false={"yolox":["before_grayimg_injection2"]}),
                        dict(opt="before_injection_conf", type="file", default="", required=False, multi=False, hide=True, choise=None, fileio="in",
                            discription_ja="前処理に対する設定ファイルを指定。",
                            discription_en="Specify the setting file for preprocessing.",
                            test_true={"yolox":"iinfer/tools/datas/injections/before_injection.json"},
                            test_false={"yolox":"iinfer/tools/datas/injections/before_injection.XXX"}),
                        dict(opt="before_injection_py", type="file", default="", required=False, multi=True, hide=True, choise=None, fileio="in",
                            discription_ja="独自の前処理を作成するときに指定。",
                            discription_en="Specify when creating a custom preprocessing.",
                            test_true={"yolox":None,
                                       "custom":"iinfer/tools/datas/injections/before_grayimg_injection2.py"},
                            test_false={"yolox":None,
                                        "custom":"iinfer/tools/datas/injections/before_grayimg_injection2.XXX"}),
                        dict(opt="after_injection_type", type="str", default="", required=False, multi=True, hide=True, choise=['']+[key for key in common.BASE_AFTER_INJECTIONS.keys()],
                            discription_ja="後処理を作成させるときに指定。",
                            discription_en="Specify when you want to create post-processing.",
                            test_true={"yolox":["after_det_filter_injection","after_det_jadge_injection"],
                                       "upernet":["after_seg_filter_injection","after_seg_bbox_injection","after_det_filter_injection"],
                                       "san":["after_seg_filter_injection","after_seg_bbox_injection","after_det_filter_injection"],
                                       "pspnet":["after_seg_filter_injection","after_seg_bbox_injection","after_det_filter_injection"],
                                       "swin":["after_cls_jadge_injection"],
                                       "lnsightface":None,
                                       "yolo3":["after_det_filter_injection","after_det_jadge_injection"],
                                       "effnet":["after_cls_jadge_injection"],
                                       "custom":["after_det_filter_injection","after_det_jadge_injection"]},
                            test_false={"yolox":["after_det_filter_injection","after_det_jadge_injection2"]}),
                        dict(opt="after_injection_conf", type="file", default="", required=False, multi=False, hide=True, choise=None, fileio="in",
                            discription_ja="後処理に対する設定ファイルを指定。",
                            discription_en="Specify the setting file for post-processing.",
                            test_true={"yolox":"iinfer/tools/datas/injections/after_injection.json"},
                            test_false={"yolox":"iinfer/tools/datas/injections/after_injection.XXX"}),
                        dict(opt="after_injection_py", type="file", default="", required=False, multi=True, hide=True, choise=None, fileio="in",
                            discription_ja="独自の後処理を作成するときに指定。",
                            discription_en="Specify when creating custom post-processing.",
                            test_true={"yolox":None,
                                       "custom":"iinfer/tools/datas/injections/after_det_filter_injection2.py"},
                            test_false={"yolox":None,
                                        "custom":"iinfer/tools/datas/injections/after_det_filter_injection2.XXX"}),
                        dict(opt="overwrite", type="bool", default=True, required=False, multi=False, hide=False, choise=[True, False],
                            discription_ja="デプロイ済みであっても上書きする指定。",
                            discription_en="Specify to overwrite even if it is already deployed.",
                            test_true={"yolox":True}),
                        dict(opt="train_dataset", type="dir", default="", required=False, multi=False, hide=True, choise=None, fileio="in",
                            discription_ja="データセットディレクトリを指定します。",
                            discription_en="Specifies the data set directory.",
                            test_true={
                              "yolox":"iinfer/extensions/data",
                              "lnsightface":None,
                              "yolo3":None,
                              "effnet":None,
                            }),
                        dict(opt="train_dataset_upload", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                            discription_ja="データセットをサーバーにアップロードします。",
                            discription_en="Upload the data set to the server.",
                            test_true={
                              "yolox":True,
                              "lnsightface":False,
                              "yolo3":False,
                              "effnet":False,
                            }),
                        dict(opt="train_type", type="str", default="", required=False, multi=False, hide=True,
                            choise=['','Custom']+[key for key in common.BASE_TRAIN_MODELS.keys()],
                            discription_ja="AIモデルの学習タイプを指定します。",
                            discription_en="Specify the train type of the AI model.",
                            test_true={"yolox":"mmdet_det_YoloX",
                                       "upernet":"mmseg_seg_SwinUpernet",
                                       "san":"mmseg_seg_San",
                                       "pspnet":"mmseg_seg_PSPNet",
                                       "swin":"mmpretrain_cls_swin",
                                       "lnsightface":None,
                                       "yolo3":None,
                                       "effnet":None,
                                       "custom":"Custom"}),
                        dict(opt="custom_train_py", type="file", default="", required=False, multi=False, hide=True, choise=None, fileio="in",
                            discription_ja="独自の学習タイプを作成するときに指定。この時は `--train_type Custom` を指定。",
                            discription_en="Specify when creating a custom train type. In this case, specify `--train_type Custom`.",
                            test_true={"yolox":None,
                                       "custom":"iinfer/tools/datas/trains/mmdet_det_YoloX2.py"}),
                        dict(opt="retry_count", type="int", default=3, required=False, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーへの再接続回数を指定します。0以下を指定すると永遠に再接続を行います。",
                             discription_en="Specifies the number of reconnections to the Redis server.If less than 0 is specified, reconnection is forever.",
                             test_true={"yolox":1}),
                        dict(opt="retry_interval", type="int", default=5, required=False, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーに再接続までの秒数を指定します。",
                             discription_en="Specifies the number of seconds before reconnecting to the Redis server.",
                             test_true={"yolox":1}),
                        dict(opt="timeout", type="int", default=120, required=False, multi=False, hide=False, choise=None,
                            discription_ja="サーバーの応答が返ってくるまでの最大待ち時間を指定。",
                            discription_en="Specify the maximum waiting time until the server responds.",
                            test_true={"yolox":60}),
                        dict(opt="output_json", short="o", type="file", default="", required=False, multi=False, hide=True, choise=None, fileio="out",
                            discription_ja="処理結果jsonの保存先ファイルを指定。",
                            discription_en="Specify the destination file for saving the processing result json.",
                            test_true={"yolox":None,
                                       "custom":"pred.json"}),
                        dict(opt="output_json_append", short="a", type="bool", default=False, required=False, multi=False, hide=True, choise=[True, False],
                            discription_ja="処理結果jsonファイルを追記保存します。",
                            discription_en="Save the processing result json file by appending.",
                            test_true={"yolox":False}),
                        dict(opt="stdout_log", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                            discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をConsole logに出力します。",
                            discription_en="Available only in GUI mode. Outputs standard output during command execution to Console log."),
                        dict(opt="capture_stdout", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                            discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をキャプチャーし、実行結果画面に表示します。",
                            discription_en="Available only in GUI mode. Captures standard output during command execution and displays it on the execution result screen."),
                    ]
                ),
                train=dict(
                    type="str", default=None, required=False, multi=False, hide=False, use_redis=self.USE_REDIS_TRUE,
                    discription_ja="AIモデルの学習を行います。",
                    discription_en="AI model training.",
                    choise=[
                        dict(opt="host", type="str", default=default_host, required=True, multi=False, hide=True, choise=None,
                            discription_ja="Redisサーバーのサービスホストを指定します。",
                            discription_en="Specify the service host of the Redis server."),
                        dict(opt="port", type="int", default=default_port, required=True, multi=False, hide=True, choise=None,
                            discription_ja="Redisサーバーのサービスポートを指定します。",
                            discription_en="Specify the service port of the Redis server."),
                        dict(opt="password", type="str", default=default_pass, required=True, multi=False, hide=True, choise=None,
                            discription_ja="Redisサーバーのアクセスパスワード(任意)を指定します。省略時は `password` を使用します。",
                            discription_en="Specify the access password of the Redis server (optional). If omitted, `password` is used."),
                        dict(opt="svname", type="str", default="server", required=True, multi=False, hide=True, choise=None,
                            discription_ja="推論サーバーのサービス名を指定します。省略時は `server` を使用します。",
                            discription_en="Specify the service name of the inference server. If omitted, `server` is used."),
                        dict(short="n", opt="name", type="str", default="", required=True, multi=False, hide=False, choise=None,
                            discription_ja="AIモデルの登録名を指定します。",
                            discription_en="Specify the registration name of the AI model."),
                        dict(opt="overwrite", type="bool", default=True, required=False, multi=False, hide=False, choise=[True, False],
                            discription_ja="学習済みであっても上書きする指定。",
                            discription_en="Specify to overwrite even if it is already trained."),
                        dict(opt="retry_count", type="int", default=3, required=False, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーへの再接続回数を指定します。0以下を指定すると永遠に再接続を行います。",
                             discription_en="Specifies the number of reconnections to the Redis server.If less than 0 is specified, reconnection is forever."),
                        dict(opt="retry_interval", type="int", default=5, required=False, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーに再接続までの秒数を指定します。",
                             discription_en="Specifies the number of seconds before reconnecting to the Redis server."),
                        dict(opt="timeout", type="int", default=3*3600, required=False, multi=False, hide=False, choise=None,
                            discription_ja="サーバーの応答が返ってくるまでの最大待ち時間を指定。",
                            discription_en="Specify the maximum waiting time until the server responds."),
                        dict(opt="output_json", short="o", type="file", default="", required=False, multi=False, hide=True, choise=None, fileio="out",
                            discription_ja="処理結果jsonの保存先ファイルを指定。",
                            discription_en="Specify the destination file for saving the processing result json."),
                        dict(opt="output_json_append", short="a", type="bool", default=False, required=False, multi=False, hide=True, choise=[True, False],
                            discription_ja="処理結果jsonファイルを追記保存します。",
                            discription_en="Save the processing result json file by appending."),
                        dict(opt="stdout_log", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                            discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をConsole logに出力します。",
                            discription_en="Available only in GUI mode. Outputs standard output during command execution to Console log."),
                        dict(opt="capture_stdout", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                            discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をキャプチャーし、実行結果画面に表示します。",
                            discription_en="Available only in GUI mode. Captures standard output during command execution and displays it on the execution result screen."),
                    ]
                ),
                deploy_list=dict(
                    type="str", default=None, required=False, multi=False, hide=False, use_redis=self.USE_REDIS_TRUE,
                    discription_ja="サーバーに配備されているAIモデル一覧を取得します。",
                    discription_en="Get a list of AI models deployed on the server.",
                    choise=[
                        dict(opt="host", type="str", default=default_host, required=True, multi=False, hide=True, choise=None,
                            discription_ja="Redisサーバーのサービスホストを指定します。",
                            discription_en="Specify the service host of the Redis server."),
                        dict(opt="port", type="int", default=default_port, required=True, multi=False, hide=True, choise=None,
                            discription_ja="Redisサーバーのサービスポートを指定します。",
                            discription_en="Specify the service port of the Redis server."),
                        dict(opt="password", type="str", default=default_pass, required=True, multi=False, hide=True, choise=None,
                            discription_ja="Redisサーバーのアクセスパスワード(任意)を指定します。省略時は `password` を使用します。",
                            discription_en="Specify the access password of the Redis server (optional). If omitted, `password` is used."),
                        dict(opt="svname", type="str", default="server", required=True, multi=False, hide=True, choise=None,
                            discription_ja="推論サーバーのサービス名を指定します。省略時は `server` を使用します。",
                            discription_en="Specify the service name of the inference server. If omitted, `server` is used."),
                        dict(opt="retry_count", type="int", default=3, required=False, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーへの再接続回数を指定します。0以下を指定すると永遠に再接続を行います。",
                             discription_en="Specifies the number of reconnections to the Redis server.If less than 0 is specified, reconnection is forever.",
                             test_true={"yolox":1}),
                        dict(opt="retry_interval", type="int", default=5, required=False, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーに再接続までの秒数を指定します。",
                             discription_en="Specifies the number of seconds before reconnecting to the Redis server.",
                             test_true={"yolox":1},
                             test_false={"yolox":-1}),
                        dict(opt="timeout", type="int", default="15", required=False, multi=False, hide=True, choise=None,
                             discription_ja="サーバーの応答が返ってくるまでの最大待ち時間を指定。",
                             discription_en="Specify the maximum waiting time until the server responds.",
                             test_true={"yolox":15},
                             test_false={"yolox":-1}),
                        dict(opt="output_json", short="o" , type="file", default="", required=False, multi=False, hide=True, choise=None, fileio="out",
                             discription_ja="処理結果jsonの保存先ファイルを指定。",
                             discription_en="Specify the destination file for saving the processing result json.",
                             test_true={"yolox":None}),
                        dict(opt="output_json_append", short="a" , type="bool", default=False, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="処理結果jsonファイルを追記保存します。",
                             discription_en="Save the processing result json file by appending.",
                             test_true={"yolox":False}),
                        dict(opt="stdout_log", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をConsole logに出力します。",
                             discription_en="Available only in GUI mode. Outputs standard output during command execution to Console log."),
                        dict(opt="capture_stdout", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をキャプチャーし、実行結果画面に表示します。",
                             discription_en="Available only in GUI mode. Captures standard output during command execution and displays it on the execution result screen."),
                    ]
                ),
                start=dict(
                    type="str", default=None, required=False, multi=False, hide=False, use_redis=self.USE_REDIS_TRUE,
                    discription_ja="AIモデルを指定して推論サーバーを起動します。",
                    discription_en="Start the inference server by specifying the AI model.",
                    choise=[
                        dict(opt="host", type="str", default=default_host, required=True, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーのサービスホストを指定します。",
                             discription_en="Specify the service host of the Redis server."),
                        dict(opt="port", type="int", default=default_port, required=True, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーのサービスポートを指定します。",
                             discription_en="Specify the service port of the Redis server."),
                        dict(opt="password", type="str", default=default_pass, required=True, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーのアクセスパスワード(任意)を指定します。省略時は `password` を使用します。",
                             discription_en="Specify the access password of the Redis server (optional). If omitted, `password` is used."),
                        dict(opt="svname", type="str", default="server", required=True, multi=False, hide=True, choise=None,
                             discription_ja="推論サーバーのサービス名を指定します。省略時は `server` を使用します。",
                             discription_en="Specify the service name of the inference server. If omitted, `server` is used."),
                        dict(short="n", opt="name", type="str", default="", required=True, multi=False, hide=False, choise=None,
                             discription_ja="削除するAIモデルの登録名を指定します。",
                             discription_en="Specify the registration name of the AI model to be deleted.",
                             test_true={"yolox":"yolox",
                                       "upernet":"upernet",
                                       "san":"san",
                                       "pspnet":"pspnet",
                                       "swin":"swin",
                                       "lnsightface":"lnsightface",
                                       "yolo3":"yolo3",
                                       "effnet":"effnet",
                                       "custom":"custom"}),
                        dict(opt="model_provider", type="str", default="CPUExecutionProvider", required=False, multi=False, hide=True,
                             choise=['CPUExecutionProvider', 'CUDAExecutionProvider', 'TensorrtExecutionProvider'],
                             discription_ja="ONNX形式のモデルファイルの場合に指定可能。",
                             discription_en="Specify when the model file is in ONNX format.",
                             test_true={"yolox":None,
                                        "upernet":None,
                                        "san":None,
                                        "pspnet":None,
                                        "swin":None,
                                        "lnsightface":"CUDAExecutionProvider",
                                        "yolo3":"CUDAExecutionProvider",
                                        "effnet":"CUDAExecutionProvider",
                                        "custom":None}),
                        dict(short="T", opt="use_track", type="bool", default=False, required=False, multi=False, hide=False, choise=[True, False],
                             discription_ja="ObjectDetectionタスクの場合に指定可能。motpyを使ってトラッキングID付与を行う。",
                             discription_en="Specify when the task is ObjectDetection. Assign a tracking ID using motpy.",
                             test_true={"yolox":True,
                                        "upernet":False,
                                        "yolo3":True,
                                        "effnet":False}),
                        dict(opt="gpuid", type="str", default="", required=False, multi=False, hide=False, choise=None,
                             discription_ja="GPUのディバイスIDを指定します。",
                             discription_en="Specify the device ID of the GPU.",
                             test_true={"yolox":"0"}),
                        dict(opt="retry_count", type="int", default=3, required=False, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーへの再接続回数を指定します。0以下を指定すると永遠に再接続を行います。",
                             discription_en="Specifies the number of reconnections to the Redis server.If less than 0 is specified, reconnection is forever."),
                        dict(opt="retry_interval", type="int", default=5, required=False, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーに再接続までの秒数を指定します。",
                             discription_en="Specifies the number of seconds before reconnecting to the Redis server."),
                        dict(opt="timeout", type="int", default="15", required=False, multi=False, hide=True, choise=None,
                             discription_ja="サーバーの応答が返ってくるまでの最大待ち時間を指定。",
                             discription_en="Specify the maximum waiting time until the server responds.",
                             test_true={"yolox":120}),
                        dict(opt="output_json", short="o" , type="file", default="", required=False, multi=False, hide=True, choise=None, fileio="out",
                             discription_ja="処理結果jsonの保存先ファイルを指定。",
                             discription_en="Specify the destination file for saving the processing result json."),
                        dict(opt="output_json_append", short="a" , type="bool", default=False, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="処理結果jsonファイルを追記保存します。",
                             discription_en="Save the processing result json file by appending."),
                        dict(opt="stdout_log", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をConsole logに出力します。",
                             discription_en="Available only in GUI mode. Outputs standard output during command execution to Console log."),
                        dict(opt="capture_stdout", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をキャプチャーし、実行結果画面に表示します。",
                             discription_en="Available only in GUI mode. Captures standard output during command execution and displays it on the execution result screen."),
                    ]
                ),
                predict_type_list=dict(
                    type="str", default=None, required=False, multi=False, hide=False, use_redis=self.USE_REDIS_TRUE,
                    discription_ja="推論タイプ一覧を取得します。",
                    discription_en="Get a list of inference types.",
                    choise=[
                        dict(opt="output_json", short="o" , type="file", default="", required=False, multi=False, hide=True, choise=None, fileio="out",
                             discription_ja="処理結果jsonの保存先ファイルを指定。",
                             discription_en="Specify the destination file for saving the processing result json.",
                             test_true={"yolox":None}),
                        dict(opt="output_json_append", short="a" , type="bool", default=False, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="処理結果jsonファイルを追記保存します。",
                             discription_en="Save the processing result json file by appending."),
                        dict(opt="stdout_log", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をConsole logに出力します。",
                             discription_en="Available only in GUI mode. Outputs standard output during command execution to Console log."),
                        dict(opt="capture_stdout", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をキャプチャーし、実行結果画面に表示します。",
                             discription_en="Available only in GUI mode. Captures standard output during command execution and displays it on the execution result screen."),
                    ]
                ),
                train_type_list=dict(
                    type="str", default=None, required=False, multi=False, hide=False, use_redis=self.USE_REDIS_TRUE,
                    discription_ja="学習タイプ一覧を取得します。",
                    discription_en="Get a list of train types.",
                    choise=[
                        dict(opt="output_json", short="o" , type="file", default="", required=False, multi=False, hide=True, choise=None, fileio="out",
                             discription_ja="処理結果jsonの保存先ファイルを指定。",
                             discription_en="Specify the destination file for saving the processing result json.",
                             test_true={"yolox":None}),
                        dict(opt="output_json_append", short="a" , type="bool", default=False, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="処理結果jsonファイルを追記保存します。",
                             discription_en="Save the processing result json file by appending."),
                        dict(opt="stdout_log", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をConsole logに出力します。",
                             discription_en="Available only in GUI mode. Outputs standard output during command execution to Console log."),
                        dict(opt="capture_stdout", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をキャプチャーし、実行結果画面に表示します。",
                             discription_en="Available only in GUI mode. Captures standard output during command execution and displays it on the execution result screen."),
                    ]
                ),
                predict=dict(
                    type="str", default=None, required=False, multi=False, hide=False, use_redis=self.USE_REDIS_TRUE,
                    discription_ja="AIモデルを指定して推論を実行します。",
                    discription_en="Perform inference by specifying the AI model.",
                    choise=[
                        dict(opt="host", type="str", default=default_host, required=True, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーのサービスホストを指定します。",
                             discription_en="Specify the service host of the Redis server."),
                        dict(opt="port", type="int", default=default_port, required=True, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーのサービスポートを指定します。",
                             discription_en="Specify the service port of the Redis server."),
                        dict(opt="password", type="str", default=default_pass, required=True, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーのアクセスパスワード(任意)を指定します。省略時は `password` を使用します。",
                             discription_en="Specify the access password of the Redis server (optional). If omitted, `password` is used."),
                        dict(opt="svname", type="str", default="server", required=True, multi=False, hide=True, choise=None,
                             discription_ja="推論サーバーのサービス名を指定します。省略時は `server` を使用します。",
                             discription_en="Specify the service name of the inference server. If omitted, `server` is used."),
                        dict(short="n", opt="name", type="str", default="", required=True, multi=False, hide=False, choise=None,
                             discription_ja="削除するAIモデルの登録名を指定します。",
                             discription_en="Specify the registration name of the AI model to be deleted.",
                             test_true={"yolox":"yolox",
                                       "upernet":"upernet",
                                       "san":"san",
                                       "pspnet":"pspnet",
                                       "swin":"swin",
                                       "lnsightface":"lnsightface",
                                       "yolo3":"yolo3",
                                       "effnet":"effnet",
                                       "custom":"custom"}),
                        dict(short="i", opt="input_file", type="file", default="", required=False, multi=False, hide=False, choise=None, fileio="in",
                             discription_ja="推論させる画像をファイルで指定します。",
                             discription_en="Specify the image to be inferred by file.",
                             test_true={"yolox":"tests/dog.jpg",
                                        "upernet":None,
                                        "san":"tests/dog.jpg",
                                        "pspnet":"tests/dog.jpg",
                                        "swin":"tests/dog.jpg",
                                        "lnsightface":"capture.csv",
                                        "yolo3":"tests/dog.jpg",
                                        "effnet":"tests/dog.jpg",
                                        "custom":None}),
                        dict(opt="stdin", type="bool", default=False, required=False, multi=False, hide=False, choise=[True, False],
                             discription_ja="推論させる画像を標準入力から読み込む。",
                             discription_en="Read the image to be inferred from standard input.",
                             test_true={"yolox":False,
                                        "upernet":True,
                                        "custom":True},
                             test_stdin={"yolox":None,
                                         "upernet":"tests/dog.jpg",
                                         "custom":"tests/dog.jpg"}),
                        dict(opt="nodraw", type="bool", default=False, required=False, multi=False, hide=False, choise=[True, False],
                             discription_ja="推論結果画像にbbox等の描き込みを行わない。",
                             discription_en="Do not draw bboxes etc. on the inference result image.",
                             test_true={"yolox":True}),
                        dict(opt="pred_input_type", type="str", default="jpeg", required=True, multi=False, hide=False,
                             choise=['bmp', 'png', 'jpeg', 'capture', 'output_json', 'prompt'],
                             discription_ja="推論させる入力タイプを指定します。",
                             discription_en="Specifies the input type to be inferred.",
                             test_true={
                                 "yolox":"jpeg",
                                 "upernet":"jpeg",
                                 "san":"jpeg",
                                 "pspnet":"jpeg",
                                 "swin":"jpeg",
                                 "lnsightface":"capture",
                                 "yolo3":"jpeg",
                                 "effnet":"jpeg",
                                 "custom":"jpeg"}),
                        dict(opt="output_image", type="file", default="", required=False, multi=False, hide=False, choise=None, fileio="out",
                             discription_ja="推論結果画像の保存先ファイルを指定します。",
                             discription_en="Specify the destination file for saving the inference result image.",
                             test_true={"yolox":"pred.jpg"}),
                        dict(short="P", opt="output_preview", type="bool", default=False, required=False, multi=False, hide=False, choise=[True, False],
                             discription_ja="推論結果画像を `cv2.imshow` で表示します。",
                             discription_en="Display the inference result image with `cv2.imshow`.",
                             test_true={
                                 "yolox":True,
                                 "upernet":True,
                                 "san":True,
                                 "pspnet":True,
                                 "swin":True,
                                 "lnsightface":True,
                                 "yolo3":True,
                                 "effnet":True,
                                 "custom":True}),
                        dict(opt="retry_count", type="int", default=3, required=False, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーへの再接続回数を指定します。0以下を指定すると永遠に再接続を行います。",
                             discription_en="Specifies the number of reconnections to the Redis server.If less than 0 is specified, reconnection is forever."),
                        dict(opt="retry_interval", type="int", default=5, required=False, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーに再接続までの秒数を指定します。",
                             discription_en="Specifies the number of seconds before reconnecting to the Redis server."),
                        dict(opt="timeout", type="int", default="15", required=False, multi=False, hide=True, choise=None,
                             discription_ja="サーバーの応答が返ってくるまでの最大待ち時間を指定。",
                             discription_en="Specify the maximum waiting time until the server responds.",
                             test_true={
                                 "yolox":15,
                                 "upernet":60,
                                 "san":60,
                                 "pspnet":60,
                                 "swin":60,
                                 "lnsightface":15,
                                 "yolo3":15,
                                 "effnet":15,
                                 "custom":15}),
                        dict(opt="output_json", short="o" , type="file", default="", required=False, multi=False, hide=True, choise=None, fileio="out",
                             discription_ja="処理結果jsonの保存先ファイルを指定。",
                             discription_en="Specify the destination file for saving the processing result json."),
                        dict(opt="output_json_append", short="a" , type="bool", default=False, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="処理結果jsonファイルを追記保存します。",
                             discription_en="Save the processing result json file by appending."),
                        dict(opt="stdout_log", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をConsole logに出力します。",
                             discription_en="Available only in GUI mode. Outputs standard output during command execution to Console log."),
                        dict(opt="capture_stdout", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をキャプチャーし、実行結果画面に表示します。",
                             discription_en="Available only in GUI mode. Captures standard output during command execution and displays it on the execution result screen."),
                    ]
                ),
                stop=dict(
                    type="str", default=None, required=False, multi=False, hide=False, use_redis=self.USE_REDIS_TRUE,
                    discription_ja="AIモデルを指定して推論サーバーを停止します。",
                    discription_en="Stop the inference server by specifying the AI model.",
                    choise=[
                        dict(opt="host", type="str", default=default_host, required=True, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーのサービスホストを指定します。",
                             discription_en="Specify the service host of the Redis server."),
                        dict(opt="port", type="int", default=default_port, required=True, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーのサービスポートを指定します。",
                             discription_en="Specify the service port of the Redis server."),
                        dict(opt="password", type="str", default=default_pass, required=True, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーのアクセスパスワード(任意)を指定します。省略時は `password` を使用します。",
                             discription_en="Specify the access password of the Redis server (optional). If omitted, `password` is used."),
                        dict(opt="svname", type="str", default="server", required=True, multi=False, hide=True, choise=None,
                             discription_ja="推論サーバーのサービス名を指定します。省略時は `server` を使用します。",
                             discription_en="Specify the service name of the inference server. If omitted, `server` is used."),
                        dict(short="n", opt="name", type="str", default="", required=True, multi=False, hide=False, choise=None,
                             discription_ja="削除するAIモデルの登録名を指定します。",
                             discription_en="Specify the registration name of the AI model to be deleted.",
                             test_true={"yolox":"yolox",
                                       "upernet":"upernet",
                                       "san":"san",
                                       "pspnet":"pspnet",
                                       "swin":"swin",
                                       "lnsightface":"lnsightface",
                                       "yolo3":"yolo3",
                                       "effnet":"effnet",
                                       "custom":"custom"}),
                        dict(opt="retry_count", type="int", default=3, required=False, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーへの再接続回数を指定します。0以下を指定すると永遠に再接続を行います。",
                             discription_en="Specifies the number of reconnections to the Redis server.If less than 0 is specified, reconnection is forever."),
                        dict(opt="retry_interval", type="int", default=5, required=False, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーに再接続までの秒数を指定します。",
                             discription_en="Specifies the number of seconds before reconnecting to the Redis server."),
                        dict(opt="timeout", type="int", default="15", required=False, multi=False, hide=True, choise=None,
                             discription_ja="サーバーの応答が返ってくるまでの最大待ち時間を指定。",
                             discription_en="Specify the maximum waiting time until the server responds."),
                        dict(opt="output_json", short="o" , type="file", default="", required=False, multi=False, hide=True, choise=None, fileio="out",
                             discription_ja="処理結果jsonの保存先ファイルを指定。",
                             discription_en="Specify the destination file for saving the processing result json."),
                        dict(opt="output_json_append", short="a" , type="bool", default=False, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="処理結果jsonファイルを追記保存します。",
                             discription_en="Save the processing result json file by appending."),
                        dict(opt="stdout_log", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をConsole logに出力します。",
                             discription_en="Available only in GUI mode. Outputs standard output during command execution to Console log."),
                        dict(opt="capture_stdout", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をキャプチャーし、実行結果画面に表示します。",
                             discription_en="Available only in GUI mode. Captures standard output during command execution and displays it on the execution result screen."),
                    ]
                ),
                undeploy=dict(
                    type="str", default=None, required=False, multi=False, hide=False, use_redis=self.USE_REDIS_TRUE,
                    discription_ja="サーバーに配備されているAIモデルを削除します。",
                    discription_en="Delete AI models deployed on the server.",
                    choise=[
                        dict(opt="host", type="str", default=default_host, required=True, multi=False, hide=True, choise=None,
                            discription_ja="Redisサーバーのサービスホストを指定します。",
                            discription_en="Specify the service host of the Redis server."),
                        dict(opt="port", type="int", default=default_port, required=True, multi=False, hide=True, choise=None,
                            discription_ja="Redisサーバーのサービスポートを指定します。",
                            discription_en="Specify the service port of the Redis server."),
                        dict(opt="password", type="str", default=default_pass, required=True, multi=False, hide=True, choise=None,
                            discription_ja="Redisサーバーのアクセスパスワード(任意)を指定します。省略時は `password` を使用します。",
                            discription_en="Specify the access password of the Redis server (optional). If omitted, `password` is used."),
                        dict(opt="svname", type="str", default="server", required=True, multi=False, hide=True, choise=None,
                            discription_ja="推論サーバーのサービス名を指定します。省略時は `server` を使用します。",
                            discription_en="Specify the service name of the inference server. If omitted, `server` is used."),
                        dict(short="n", opt="name", type="str", default="", required=True, multi=False, hide=False, choise=None,
                             discription_ja="削除するAIモデルの登録名を指定します。",
                             discription_en="Specify the registration name of the AI model to be deleted.",
                             test_true={"yolox":"yolox",
                                       "upernet":"upernet",
                                       "san":"san",
                                       "pspnet":"pspnet",
                                       "swin":"swin",
                                       "lnsightface":"lnsightface",
                                       "yolo3":"yolo3",
                                       "effnet":"effnet",
                                       "custom":"custom"}),
                        dict(opt="retry_count", type="int", default=3, required=False, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーへの再接続回数を指定します。0以下を指定すると永遠に再接続を行います。",
                             discription_en="Specifies the number of reconnections to the Redis server.If less than 0 is specified, reconnection is forever."),
                        dict(opt="retry_interval", type="int", default=5, required=False, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーに再接続までの秒数を指定します。",
                             discription_en="Specifies the number of seconds before reconnecting to the Redis server."),
                        dict(opt="timeout", type="int", default="15", required=False, multi=False, hide=True, choise=None,
                             discription_ja="サーバーの応答が返ってくるまでの最大待ち時間を指定。",
                             discription_en="Specify the maximum waiting time until the server responds."),
                        dict(opt="output_json", short="o" , type="file", default="", required=False, multi=False, hide=True, choise=None, fileio="out",
                             discription_ja="処理結果jsonの保存先ファイルを指定。",
                             discription_en="Specify the destination file for saving the processing result json."),
                        dict(opt="output_json_append", short="a" , type="bool", default=False, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="処理結果jsonファイルを追記保存します。",
                             discription_en="Save the processing result json file by appending."),
                        dict(opt="stdout_log", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をConsole logに出力します。",
                             discription_en="Available only in GUI mode. Outputs standard output during command execution to Console log."),
                        dict(opt="capture_stdout", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をキャプチャーし、実行結果画面に表示します。",
                             discription_en="Available only in GUI mode. Captures standard output during command execution and displays it on the execution result screen."),
                    ]
                ),
                prompt=dict(
                    type="str", default=None, required=False, multi=False, hide=False, use_redis=self.USE_REDIS_FALSE,
                    discription_ja="LLM向けに単にキー入力したものを標準出力します。",
                    discription_en="Standard output of simply keyed input for LLM.",
                    choise=[
                        dict(opt="prompt_format", type="str", default="{prompt}", required=False, multi=False, hide=False, choise=None,
                             discription_ja="入力をフォーマットするときの書式を指定します。",
                             discription_en="Specifies the format in which the input is formatted."),
                        dict(opt="prompt_count", type="int", default=1, required=False, multi=False, hide=False, choise=None,
                             discription_ja="プロンプトでキー入力する回数。",
                             discription_en="Number of keystrokes at the prompt."),
                        dict(opt="prompt_form", type="bool", default=True, required=False, multi=False, hide=False, choise=[True, False],
                             discription_ja="プロンプト入力フォームを表示します。",
                             discription_en="Displays prompt input form."),
                        dict(opt="output_csv", type="file", default="", required=False, multi=False, hide=True, choise=None, fileio="out",
                             discription_ja="入力した内容をcsvで保存します。これを指定した場合、標準出力は行いません。",
                             discription_en="Saves the input as a csv file. If this is specified, no standard output is performed."),
                        dict(opt="stdout_log", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をConsole logに出力します。",
                             discription_en="Available only in GUI mode. Outputs standard output during command execution to Console log."),
                        dict(opt="capture_stdout", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をキャプチャーし、実行結果画面に表示します。",
                             discription_en="Available only in GUI mode. Captures standard output during command execution and displays it on the execution result screen."),
                    ]
                ),
                file_list=dict(
                    type="str", default=None, required=False, multi=False, hide=False, use_redis=self.USE_REDIS_MEIGHT,
                    discription_ja="サーバー側のデータフォルダ配下のファイルリストを取得します。",
                    discription_en="Get a list of files under the data folder on the server.",
                    choise=[
                        dict(opt="host", type="str", default=default_host, required=True, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーのサービスホストを指定します。",
                             discription_en="Specify the service host of the Redis server."),
                        dict(opt="port", type="int", default=default_port, required=True, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーのサービスポートを指定します。",
                             discription_en="Specify the service port of the Redis server."),
                        dict(opt="password", type="str", default=default_pass, required=True, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーのアクセスパスワード(任意)を指定します。省略時は `password` を使用します。",
                             discription_en="Specify the access password of the Redis server (optional). If omitted, `password` is used."),
                        dict(opt="svname", type="str", default="server", required=True, multi=False, hide=True, choise=None,
                             discription_ja="推論サーバーのサービス名を指定します。省略時は `server` を使用します。",
                             discription_en="Specify the service name of the inference server. If omitted, `server` is used."),
                        dict(opt="svpath", type="str", default="/", required=True, multi=False, hide=False, choise=None,
                             discription_ja="推論サーバーのデータフォルダ以下のパスを指定します。省略時は `/` を使用します。",
                             discription_en="Specify the directory path to get the list of files.",
                             test_true={"server":"/"}),
                        dict(opt="local_data", type="str", default=None, required=False, multi=False, hide=True, choise=None,
                             discription_ja="ローカルを参照させる場合のデータフォルダのパスを指定します。",
                             discription_en="Specify the path of the data folder when local is referenced.",
                             test_true={"server":None,
                                        "local":common.HOME_DIR / ".iinfer"}),
                        dict(opt="retry_count", type="int", default=3, required=False, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーへの再接続回数を指定します。0以下を指定すると永遠に再接続を行います。",
                             discription_en="Specifies the number of reconnections to the Redis server.If less than 0 is specified, reconnection is forever."),
                        dict(opt="retry_interval", type="int", default=5, required=False, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーに再接続までの秒数を指定します。",
                             discription_en="Specifies the number of seconds before reconnecting to the Redis server."),
                        dict(opt="timeout", type="int", default="15", required=False, multi=False, hide=True, choise=None,
                             discription_ja="サーバーの応答が返ってくるまでの最大待ち時間を指定。",
                             discription_en="Specify the maximum waiting time until the server responds."),
                        dict(opt="output_json", short="o", type="file", default="", required=False, multi=False, hide=True, choise=None, fileio="out",
                             discription_ja="処理結果jsonの保存先ファイルを指定。",
                             discription_en="Specify the destination file for saving the processing result json."),
                        dict(opt="output_json_append", short="a", type="bool", default=False, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="処理結果jsonファイルを追記保存します。",
                             discription_en="Save the processing result json file by appending."),
                        dict(opt="stdout_log", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をConsole logに出力します。",
                             discription_en="Available only in GUI mode. Outputs standard output during command execution to Console log."),
                        dict(opt="capture_stdout", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をキャプチャーし、実行結果画面に表示します。",
                             discription_en="Available only in GUI mode. Captures standard output during command execution and displays it on the execution result screen."),
                    ]
                ),
                file_mkdir=dict(
                    type="str", default=None, required=False, multi=False, hide=False, use_redis=self.USE_REDIS_MEIGHT,
                    discription_ja="サーバー側のデータフォルダ配下に新しいフォルダを作成します。",
                    discription_en="Create a new folder under the data folder on the server.",
                    choise=[
                        dict(opt="host", type="str", default=default_host, required=True, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーのサービスホストを指定します。",
                             discription_en="Specify the service host of the Redis server."),
                        dict(opt="port", type="int", default=default_port, required=True, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーのサービスポートを指定します。",
                             discription_en="Specify the service port of the Redis server."),
                        dict(opt="password", type="str", default=default_pass, required=True, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーのアクセスパスワード(任意)を指定します。省略時は `password` を使用します。",
                             discription_en="Specify the access password of the Redis server (optional). If omitted, `password` is used."),
                        dict(opt="svname", type="str", default="server", required=True, multi=False, hide=True, choise=None,
                             discription_ja="推論サーバーのサービス名を指定します。省略時は `server` を使用します。",
                             discription_en="Specify the service name of the inference server. If omitted, `server` is used."),
                        dict(opt="svpath", type="str", default="/", required=True, multi=False, hide=False, choise=None,
                             discription_ja="推論サーバーのデータフォルダ以下のパスを指定します。省略時は `/` を使用します。",
                             discription_en="Specify the directory path to get the list of files.",
                             test_true={"server":"file_mkdir",
                                        "local":"file_mkdir"}),
                        dict(opt="local_data", type="str", default=None, required=False, multi=False, hide=True, choise=None,
                             discription_ja="ローカルを参照させる場合のデータフォルダのパスを指定します。",
                             discription_en="Specify the path of the data folder when local is referenced.",
                             test_true={"server":None,
                                        "local":common.HOME_DIR / ".iinfer"}),
                        dict(opt="retry_count", type="int", default=3, required=False, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーへの再接続回数を指定します。0以下を指定すると永遠に再接続を行います。",
                             discription_en="Specifies the number of reconnections to the Redis server.If less than 0 is specified, reconnection is forever."),
                        dict(opt="retry_interval", type="int", default=5, required=False, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーに再接続までの秒数を指定します。",
                             discription_en="Specifies the number of seconds before reconnecting to the Redis server."),
                        dict(opt="timeout", type="int", default="15", required=False, multi=False, hide=True, choise=None,
                             discription_ja="サーバーの応答が返ってくるまでの最大待ち時間を指定。",
                             discription_en="Specify the maximum waiting time until the server responds."),
                        dict(opt="output_json", short="o", type="file", default="", required=False, multi=False, hide=True, choise=None, fileio="out",
                             discription_ja="処理結果jsonの保存先ファイルを指定。",
                             discription_en="Specify the destination file for saving the processing result json."),
                        dict(opt="output_json_append", short="a", type="bool", default=False, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="処理結果jsonファイルを追記保存します。",
                             discription_en="Save the processing result json file by appending."),
                        dict(opt="stdout_log", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をConsole logに出力します。",
                             discription_en="Available only in GUI mode. Outputs standard output during command execution to Console log."),
                        dict(opt="capture_stdout", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をキャプチャーし、実行結果画面に表示します。",
                             discription_en="Available only in GUI mode. Captures standard output during command execution and displays it on the execution result screen."),
                    ]
                ),
                file_rmdir=dict(
                    type="str", default=None, required=False, multi=False, hide=False, use_redis=self.USE_REDIS_MEIGHT,
                    discription_ja="サーバー側のデータフォルダ配下のフォルダを削除します。",
                    discription_en="Delete a folder under the data folder on the server.",
                    choise=[
                        dict(opt="host", type="str", default=default_host, required=True, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーのサービスホストを指定します。",
                             discription_en="Specify the service host of the Redis server."),
                        dict(opt="port", type="int", default=default_port, required=True, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーのサービスポートを指定します。",
                             discription_en="Specify the service port of the Redis server."),
                        dict(opt="password", type="str", default=default_pass, required=True, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーのアクセスパスワード(任意)を指定します。省略時は `password` を使用します。",
                             discription_en="Specify the access password of the Redis server (optional). If omitted, `password` is used."),
                        dict(opt="svname", type="str", default="server", required=True, multi=False, hide=True, choise=None,
                             discription_ja="推論サーバーのサービス名を指定します。省略時は `server` を使用します。",
                             discription_en="Specify the service name of the inference server. If omitted, `server` is used."),
                        dict(opt="svpath", type="str", default="/", required=True, multi=False, hide=False, choise=None,
                             discription_ja="推論サーバーのデータフォルダ以下のパスを指定します。",
                             discription_en="Specify the directory path to get the list of files.",
                             test_true={"server":"file_mkdir",
                                        "local":"file_mkdir"}),
                        dict(opt="local_data", type="str", default=None, required=False, multi=False, hide=True, choise=None,
                             discription_ja="ローカルを参照させる場合のデータフォルダのパスを指定します。",
                             discription_en="Specify the path of the data folder when local is referenced.",
                             test_true={"server":None,
                                        "local":common.HOME_DIR / ".iinfer"}),
                        dict(opt="retry_count", type="int", default=3, required=False, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーへの再接続回数を指定します。0以下を指定すると永遠に再接続を行います。",
                             discription_en="Specifies the number of reconnections to the Redis server.If less than 0 is specified, reconnection is forever."),
                        dict(opt="retry_interval", type="int", default=5, required=False, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーに再接続までの秒数を指定します。",
                             discription_en="Specifies the number of seconds before reconnecting to the Redis server."),
                        dict(opt="timeout", type="int", default="15", required=False, multi=False, hide=True, choise=None,
                             discription_ja="サーバーの応答が返ってくるまでの最大待ち時間を指定。",
                             discription_en="Specify the maximum waiting time until the server responds."),
                        dict(opt="output_json", short="o", type="file", default="", required=False, multi=False, hide=True, choise=None, fileio="out",
                             discription_ja="処理結果jsonの保存先ファイルを指定。",
                             discription_en="Specify the destination file for saving the processing result json."),
                        dict(opt="output_json_append", short="a", type="bool", default=False, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="処理結果jsonファイルを追記保存します。",
                             discription_en="Save the processing result json file by appending."),
                        dict(opt="stdout_log", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をConsole logに出力します。",
                             discription_en="Available only in GUI mode. Outputs standard output during command execution to Console log."),
                        dict(opt="capture_stdout", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をキャプチャーし、実行結果画面に表示します。",
                             discription_en="Available only in GUI mode. Captures standard output during command execution and displays it on the execution result screen."),
                    ]
                ),
                file_upload=dict(
                    type="str", default=None, required=False, multi=False, hide=False, use_redis=self.USE_REDIS_MEIGHT,
                    discription_ja="サーバー側のデータフォルダ配下にファイルをアップロードします。",
                    discription_en="Upload a file under the data folder on the server.",
                    choise=[
                        dict(opt="host", type="str", default=default_host, required=True, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーのサービスホストを指定します。",
                             discription_en="Specify the service host of the Redis server."),
                        dict(opt="port", type="int", default=default_port, required=True, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーのサービスポートを指定します。",
                             discription_en="Specify the service port of the Redis server."),
                        dict(opt="password", type="str", default=default_pass, required=True, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーのアクセスパスワード(任意)を指定します。省略時は `password` を使用します。",
                             discription_en="Specify the access password of the Redis server (optional). If omitted, `password` is used."),
                        dict(opt="svname", type="str", default="server", required=True, multi=False, hide=True, choise=None,
                             discription_ja="推論サーバーのサービス名を指定します。省略時は `server` を使用します。",
                             discription_en="Specify the service name of the inference server. If omitted, `server` is used."),
                        dict(opt="svpath", type="str", default="/", required=True, multi=False, hide=False, choise=None,
                             discription_ja="推論サーバーのデータフォルダ以下のパスを指定します。",
                             discription_en="Specify the directory path to get the list of files."),
                        dict(opt="upload_file", type="file", default="", required=False, multi=False, hide=False, choise=None, fileio="out",
                             discription_ja="クライアントのアップロード元パスを指定します。",
                             discription_en="Specify the source path of the client."),
                        dict(opt="local_data", type="str", default=None, required=False, multi=False, hide=True, choise=None,
                             discription_ja="ローカルを参照させる場合のデータフォルダのパスを指定します。",
                             discription_en="Specify the path of the data folder when local is referenced."),
                        dict(opt="mkdir", type="bool", default=False, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="中間フォルダがない場合作成します。",
                             discription_en="If there is no in between folder, create one."),
                        dict(opt="orverwrite", type="bool", default=False, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="アップロード先に存在していても上書きします。",
                             discription_en="Overwrites the file even if it exists at the upload destination."),
                        dict(opt="retry_count", type="int", default=3, required=False, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーへの再接続回数を指定します。0以下を指定すると永遠に再接続を行います。",
                             discription_en="Specifies the number of reconnections to the Redis server.If less than 0 is specified, reconnection is forever."),
                        dict(opt="retry_interval", type="int", default=5, required=False, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーに再接続までの秒数を指定します。",
                             discription_en="Specifies the number of seconds before reconnecting to the Redis server."),
                        dict(opt="timeout", type="int", default="15", required=False, multi=False, hide=True, choise=None,
                             discription_ja="サーバーの応答が返ってくるまでの最大待ち時間を指定。",
                             discription_en="Specify the maximum waiting time until the server responds."),
                        dict(opt="output_json", short="o", type="file", default="", required=False, multi=False, hide=True, choise=None, fileio="out",
                             discription_ja="処理結果jsonの保存先ファイルを指定。",
                             discription_en="Specify the destination file for saving the processing result json."),
                        dict(opt="output_json_append", short="a", type="bool", default=False, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="処理結果jsonファイルを追記保存します。",
                             discription_en="Save the processing result json file by appending."),
                        dict(opt="stdout_log", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をConsole logに出力します。",
                             discription_en="Available only in GUI mode. Outputs standard output during command execution to Console log."),
                        dict(opt="capture_stdout", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をキャプチャーし、実行結果画面に表示します。",
                             discription_en="Available only in GUI mode. Captures standard output during command execution and displays it on the execution result screen."),
                    ]
                ),
                file_download=dict(
                    type="str", default=None, required=False, multi=False, hide=False, use_redis=self.USE_REDIS_MEIGHT,
                    discription_ja="サーバー側のデータフォルダ配下のファイルをダウンロードします。",
                    discription_en="Download a file under the data folder on the server.",
                    choise=[
                        dict(opt="host", type="str", default=default_host, required=True, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーのサービスホストを指定します。",
                             discription_en="Specify the service host of the Redis server."),
                        dict(opt="port", type="int", default=default_port, required=True, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーのサービスポートを指定します。",
                             discription_en="Specify the service port of the Redis server."),
                        dict(opt="password", type="str", default=default_pass, required=True, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーのアクセスパスワード(任意)を指定します。省略時は `password` を使用します。",
                             discription_en="Specify the access password of the Redis server (optional). If omitted, `password` is used."),
                        dict(opt="svname", type="str", default="server", required=True, multi=False, hide=True, choise=None,
                             discription_ja="推論サーバーのサービス名を指定します。省略時は `server` を使用します。",
                             discription_en="Specify the service name of the inference server. If omitted, `server` is used."),
                        dict(opt="svpath", type="str", default="/", required=True, multi=False, hide=False, choise=None,
                             discription_ja="推論サーバーのデータフォルダ以下のパスを指定します。",
                             discription_en="Specify the directory path to get the list of files."),
                        dict(opt="rpath", type="str", default="", required=False, multi=False, hide=False, choise=None,
                             discription_ja="リクエストパスを指定します。この値は何もせずそのままレスポンスに含めて返されます。",
                             discription_en="Specifies the request path. This value is returned in the response without any modification."),
                        dict(opt="download_file", type="file", default="", required=False, multi=False, hide=False, choise=None, fileio="out",
                             discription_ja="クライアントの保存先パスを指定します。",
                             discription_en="Specify the destination path of the client."),
                        dict(opt="local_data", type="str", default=None, required=False, multi=False, hide=True, choise=None,
                             discription_ja="ローカルを参照させる場合のデータフォルダのパスを指定します。",
                             discription_en="Specify the path of the data folder when local is referenced."),
                        dict(opt="img_thumbnail", type="float", default=None, required=False, multi=False, hide=True, choise=None,
                             discription_ja="対象が画像だった場合のサムネイルのピクセル単位のサイズを指定します。",
                             discription_en="Specifies the size in pixels of the thumbnail if the subject is an image."),
                        dict(opt="retry_count", type="int", default=3, required=False, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーへの再接続回数を指定します。0以下を指定すると永遠に再接続を行います。",
                             discription_en="Specifies the number of reconnections to the Redis server.If less than 0 is specified, reconnection is forever."),
                        dict(opt="retry_interval", type="int", default=5, required=False, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーに再接続までの秒数を指定します。",
                             discription_en="Specifies the number of seconds before reconnecting to the Redis server."),
                        dict(opt="timeout", type="int", default="15", required=False, multi=False, hide=True, choise=None,
                             discription_ja="サーバーの応答が返ってくるまでの最大待ち時間を指定。",
                             discription_en="Specify the maximum waiting time until the server responds."),
                        dict(opt="output_json", short="o", type="file", default="", required=False, multi=False, hide=True, choise=None, fileio="out",
                             discription_ja="処理結果jsonの保存先ファイルを指定。",
                             discription_en="Specify the destination file for saving the processing result json."),
                        dict(opt="output_json_append", short="a", type="bool", default=False, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="処理結果jsonファイルを追記保存します。",
                             discription_en="Save the processing result json file by appending."),
                        dict(opt="stdout_log", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をConsole logに出力します。",
                             discription_en="Available only in GUI mode. Outputs standard output during command execution to Console log."),
                        dict(opt="capture_stdout", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をキャプチャーし、実行結果画面に表示します。",
                             discription_en="Available only in GUI mode. Captures standard output during command execution and displays it on the execution result screen."),
                    ]
                ),
                file_remove=dict(
                    type="str", default=None, required=False, multi=False, hide=False, use_redis=self.USE_REDIS_MEIGHT,
                    discription_ja="サーバー側のデータフォルダ配下のファイルを削除します。",
                    discription_en="Delete a file under the data folder on the server.",
                    choise=[
                        dict(opt="host", type="str", default=default_host, required=True, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーのサービスホストを指定します。",
                             discription_en="Specify the service host of the Redis server."),
                        dict(opt="port", type="int", default=default_port, required=True, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーのサービスポートを指定します。",
                             discription_en="Specify the service port of the Redis server."),
                        dict(opt="password", type="str", default=default_pass, required=True, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーのアクセスパスワード(任意)を指定します。省略時は `password` を使用します。",
                             discription_en="Specify the access password of the Redis server (optional). If omitted, `password` is used."),
                        dict(opt="svname", type="str", default="server", required=True, multi=False, hide=True, choise=None,
                             discription_ja="推論サーバーのサービス名を指定します。省略時は `server` を使用します。",
                             discription_en="Specify the service name of the inference server. If omitted, `server` is used."),
                        dict(opt="svpath", type="str", default="/", required=True, multi=False, hide=False, choise=None,
                             discription_ja="推論サーバーのデータフォルダ以下のパスを指定します。",
                             discription_en="Specify the directory path to get the list of files."),
                        dict(opt="local_data", type="str", default=None, required=False, multi=False, hide=True, choise=None,
                             discription_ja="ローカルを参照させる場合のデータフォルダのパスを指定します。",
                             discription_en="Specify the path of the data folder when local is referenced."),
                        dict(opt="retry_count", type="int", default=3, required=False, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーへの再接続回数を指定します。0以下を指定すると永遠に再接続を行います。",
                             discription_en="Specifies the number of reconnections to the Redis server.If less than 0 is specified, reconnection is forever."),
                        dict(opt="retry_interval", type="int", default=5, required=False, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーに再接続までの秒数を指定します。",
                             discription_en="Specifies the number of seconds before reconnecting to the Redis server."),
                        dict(opt="timeout", type="int", default="15", required=False, multi=False, hide=True, choise=None,
                             discription_ja="サーバーの応答が返ってくるまでの最大待ち時間を指定。",
                             discription_en="Specify the maximum waiting time until the server responds."),
                        dict(opt="output_json", short="o", type="file", default="", required=False, multi=False, hide=True, choise=None, fileio="out",
                             discription_ja="処理結果jsonの保存先ファイルを指定。",
                             discription_en="Specify the destination file for saving the processing result json."),
                        dict(opt="output_json_append", short="a", type="bool", default=False, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="処理結果jsonファイルを追記保存します。",
                             discription_en="Save the processing result json file by appending."),
                        dict(opt="stdout_log", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をConsole logに出力します。",
                             discription_en="Available only in GUI mode. Outputs standard output during command execution to Console log."),
                        dict(opt="capture_stdout", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をキャプチャーし、実行結果画面に表示します。",
                             discription_en="Available only in GUI mode. Captures standard output during command execution and displays it on the execution result screen."),
                    ]
                ),
            ),
            postprocess=dict(
                discription_ja="後処理モード",
                discription_en="Post-processing mode",
                cls_jadge=dict(
                    type="str", default=None, required=False, multi=False, hide=False, use_redis=self.USE_REDIS_FALSE,
                    discription_ja="推論結果を使用して画像分類判定を行います。",
                    discription_en="Perform image classification judgment using the inference result.",
                    choise=[
                        dict(short="i", opt="input_file", type="file", default="", required=False, multi=False, hide=False, choise=None, fileio="in",
                             discription_ja="後処理させる推論結果をファイルで指定します。",
                             discription_en="Specify the inference result to be post-processed by file."),
                        dict(opt="stdin", type="bool", default=False, required=False, multi=False, hide=False, choise=[True, False],
                             discription_ja="後処理させる推論結果を標準入力から読み込みます。",
                             discription_en="Read the inference result to be post-processed from standard input."),
                        dict(opt="ok_score_th", type="float", default=None, required=False, multi=False, hide=False, choise=None,
                             discription_ja="クラススコアがこの値以上のものはok判定されます。",
                             discription_en="Class scores greater than this value are judged as ok."),
                        dict(opt="ok_classes", type="str", default="", required=False, multi=True, hide=False, choise=None,
                             discription_ja="okクラスに含めるクラスindexを指定します。複数指定できます。",
                             discription_en="Specify the class index to include in the ok class. Multiple specifications are possible."),
                        dict(opt="ok_labels", type="str", default="", required=False, multi=True, hide=False, choise=None,
                             discription_ja="okクラスに含めるクラスラベルを指定します。複数指定できます。",
                             discription_en="Specify the class label to include in the ok class. Multiple specifications are possible."),
                        dict(opt="ng_score_th", type="float", default=None, required=False, multi=False, hide=False, choise=None,
                             discription_ja="クラススコアがこの値以上のものはng判定されます。",
                             discription_en="Class scores greater than this value are judged as ng."),
                        dict(opt="ng_classes", type="str", default="", required=False, multi=True, hide=False, choise=None,
                             discription_ja="ngクラスに含めるクラスindexを指定します。複数指定できます。",
                             discription_en="Specify the class index to include in the ng class. Multiple specifications are possible."),
                        dict(opt="ng_labels", type="str", default="", required=False, multi=True, hide=False, choise=None,
                             discription_ja="ngクラスに含めるクラスラベルを指定します。複数指定できます。",
                             discription_en="Specify the class label to include in the ng class. Multiple specifications are possible."),
                        dict(opt="ext_score_th", type="float", default=None, required=False, multi=False, hide=False, choise=None,
                             discription_ja="クラススコアがこの値以上のものはgray判定されます",
                             discription_en="Class scores greater than this value are judged as gray."),
                        dict(opt="ext_classes", type="str", default="", required=False, multi=True, hide=False, choise=None,
                             discription_ja="grayクラスに含めるクラスindexを指定します。複数指定できます。",
                             discription_en="Specify the class index to include in the gray class. Multiple specifications are possible."),
                        dict(opt="ext_labels", type="str", default="", required=False, multi=True, hide=False, choise=None,
                             discription_ja="grayクラスに含めるクラスラベルを指定します。複数指定できます。",
                             discription_en="Specify the class label to include in the gray class. Multiple specifications are possible."),
                        dict(opt="nodraw", type="bool", default=False, required=False, multi=False, hide=False, choise=[True, False],
                             discription_ja="推論結果画像にbbox等の描き込みを行いません。",
                             discription_en="Do not draw bboxes, etc. on the inference result image."),
                        dict(short="P", opt="output_preview", type="bool", default=False, required=False, multi=False, hide=False, choise=[True, False],
                             discription_ja="判定結果画像を`cv2.imshow`で表示します。",
                             discription_en="Display the judgment result image with `cv2.imshow`."),
                        dict(opt="output_image", type="file", default="", required=False, multi=False, hide=False, choise=None, fileio="out",
                             discription_ja="後処理結果画像の保存先ファイルを指定します。",
                             discription_en="Specify the destination file for saving the post-processing result image."),
                        dict(opt="output_json", short="o", type="file", default="", required=False, multi=False, hide=True, choise=None, fileio="out",
                             discription_ja="処理結果jsonの保存先ファイルを指定。",
                             discription_en="Specify the destination file for saving the processing result json."),
                        dict(opt="output_json_append", short="a", type="bool", default=False, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="処理結果jsonファイルを追記保存します。",
                             discription_en="Save the processing result json file by appending."),
                        dict(opt="stdout_log", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をConsole logに出力します。",
                             discription_en="Available only in GUI mode. Outputs standard output during command execution to Console log."),
                        dict(opt="capture_stdout", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をキャプチャーし、実行結果画面に表示します。",
                             discription_en="Available only in GUI mode. Captures standard output during command execution and displays it on the execution result screen."),
                    ]
                ),
                csv=dict(
                    type="str", default=None, required=False, multi=False, hide=False, use_redis=self.USE_REDIS_FALSE,
                    discription_ja="推論結果をCSVファイルに変換します。",
                    discription_en="Convert the inference result to a CSV file.",
                    choise=[
                        dict(short="i", opt="input_file", type="file", default="", required=False, multi=False, hide=False, choise=None, fileio="in",
                             discription_ja="後処理させる推論結果をファイルで指定します。",
                             discription_en="Specify the inference result to be post-processed by file."),
                        dict(opt="stdin", type="bool", default=False, required=False, multi=False, hide=False, choise=[True, False],
                             discription_ja="後処理させる推論結果を標準入力から読み込みます。",
                             discription_en="Read the inference result to be post-processed from standard input."),
                        dict(opt="out_headers", type="str", default="", required=False, multi=True, hide=False, choise=None,
                             discription_ja="出力するヘッダーを指定します。複数指定できます。",
                             discription_en="Specify the headers to output. Multiple specifications are possible."),
                        dict(opt="noheader", type="bool", default=False, required=False, multi=False, hide=False, choise=[True, False],
                             discription_ja="ヘッダー行の出力を行いません。",
                             discription_en="Do not output the header row."),
                        dict(opt="output_csv", type="file", default="", required=False, multi=False, hide=True, choise=None, fileio="out",
                             discription_ja="内容をcsvで保存する。これを指定した場合、標準出力は行いません。",
                             discription_en="Save the contents in csv. If this is specified, no standard output will be performed."),
                        dict(opt="stdout_log", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をConsole logに出力します。",
                             discription_en="Available only in GUI mode. Outputs standard output during command execution to Console log."),
                        dict(opt="capture_stdout", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をキャプチャーし、実行結果画面に表示します。",
                             discription_en="Available only in GUI mode. Captures standard output during command execution and displays it on the execution result screen."),
                    ]
                ),
                det_clip=dict(
                    type="str", default=None, required=False, multi=False, hide=False, use_redis=self.USE_REDIS_FALSE,
                    discription_ja="ObjectDetectionで検知した個所を切り出し、caprute形式のcsvで出力します。",
                    discription_en="Cut out the detected area in ObjectDetection and output it in caprute format csv.",
                    choise=[
                        dict(short="i", opt="input_file", type="file", default="", required=False, multi=False, hide=False, choise=None, fileio="in",
                             discription_ja="後処理させる推論結果をファイルで指定します。",
                             discription_en="Specify the inference result to be post-processed by file."),
                        dict(opt="stdin", type="bool", default=False, required=False, multi=False, hide=False, choise=[True, False],
                             discription_ja="後処理させる推論結果を標準入力から読み込みます。",
                             discription_en="Read the inference result to be post-processed from standard input."),
                        dict(opt="image_type", type="str", default="capture", required=False, multi=False, hide=False, choise=['bmp', 'png', 'jpeg', 'capture'],
                             discription_ja="出力する画像のタイプを指定します。",
                             discription_en="Specify the type of image to output."),
                        dict(opt="clip_margin", type="int", default=0, required=False, multi=False, hide=False, choise=None,
                             discription_ja="検視したbboxの周囲に余白を設けるピクセル数です。但し、元画像の外側に余白が出る場合は、確保できるだけ余白を取得します。",
                             discription_en="The number of pixels to provide margin around the bbox inspected. However, if there is a margin outside the original image, as much margin as possible is obtained."),
                        dict(opt="output_csv", type="file", default="", required=False, multi=False, hide=True, choise=None, fileio="out",
                             discription_ja="内容をcsvで保存します。これを指定した場合、標準出力は行いません。",
                             discription_en="Save the contents in csv. If this is specified, no standard output will be performed."),
                        dict(opt="stdout_log", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をConsole logに出力します。",
                             discription_en="Available only in GUI mode. Outputs standard output during command execution to Console log."),
                        dict(opt="capture_stdout", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をキャプチャーし、実行結果画面に表示します。",
                             discription_en="Available only in GUI mode. Captures standard output during command execution and displays it on the execution result screen."),
                    ]
                ),
                det_face_store=dict(
                    type="str", default=None, required=False, multi=False, hide=False, use_redis=self.USE_REDIS_FALSE,
                    discription_ja="Face Detection and Recognitionで検知した顔特徴データを個所を切り出し、顔認識ストアファイルを生成します。",
                    discription_en="Cut out the face feature data detected by Face Detection and Recognition and generate a face recognition store file.",
                    choise=[
                        dict(short="i", opt="input_file", type="file", default="", required=False, multi=False, hide=False, choise=None, fileio="in",
                             discription_ja="後処理させる推論結果をファイルで指定します。",
                             discription_en="Specify the inference result to be post-processed by file."),
                        dict(opt="stdin", type="bool", default=False, required=False, multi=False, hide=False, choise=[True, False],
                             discription_ja="後処理させる推論結果を標準入力から読み込みます。",
                             discription_en="Read the inference result to be post-processed from standard input."),
                        dict(opt="image_type", type="str", default="capture", required=False, multi=False, hide=False, choise=['bmp', 'png', 'jpeg', 'capture'],
                             discription_ja="出力する画像のタイプを指定します。",
                             discription_en="Specify the type of image to output."),
                        dict(opt="face_threshold", type="float", default=0.0, required=False, multi=False, hide=False, choise=None,
                             discription_ja="顔スコアが閾値以下の場合は、顔特徴量ストアに含まれないようにします。",
                             discription_en="If the face score is below the threshold, it will not be included in the face feature store."),
                        dict(opt="clip_margin", type="int", default=0, required=False, multi=False, hide=False, choise=None,
                             discription_ja="検視したbboxの周囲に余白を設けるピクセル数です。但し、元画像の外側に余白が出る場合は、確保できるだけ余白を取得します。",
                             discription_en="The number of pixels to provide margin around the bbox inspected. However, if there is a margin outside the original image, as much margin as possible is obtained."),
                        dict(opt="stdout_log", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をConsole logに出力します。",
                             discription_en="Available only in GUI mode. Outputs standard output during command execution to Console log."),
                        dict(opt="capture_stdout", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をキャプチャーし、実行結果画面に表示します。",
                             discription_en="Available only in GUI mode. Captures standard output during command execution and displays it on the execution result screen."),
                    ]
                ),
                det_filter=dict(
                    type="str", default=None, required=False, multi=False, hide=False, use_redis=self.USE_REDIS_FALSE,
                    discription_ja="ObjectDetectionで検知した個所をフィルタリングします。",
                    discription_en="Filter the detected area in ObjectDetection.",
                    choise=[
                        dict(short="i", opt="input_file", type="file", default="", required=False, multi=False, hide=False, choise=None, fileio="in",
                             discription_ja="後処理させる推論結果をファイルで指定します。",
                             discription_en="Specify the inference result to be post-processed by file."),
                        dict(opt="stdin", type="bool", default=False, required=False, multi=False, hide=False, choise=[True, False],
                             discription_ja="後処理させる推論結果を標準入力から読み込みます。",
                             discription_en="Read the inference result to be post-processed from standard input."),
                        dict(opt="score_th", type="float", default="0.0", required=False, multi=False, hide=False, choise=None,
                             discription_ja="bboxのクラススコアがこの値以下のものは除去します。",
                             discription_en="Remove bboxes with class scores less"),
                        dict(opt="width_th", type="int", default="0", required=False, multi=False, hide=False, choise=None,
                             discription_ja="bboxの横幅がこの長さ以下のものは除去します。",
                             discription_en="Remove bboxes with a width less than this length."),
                        dict(opt="height_th", type="int", default="0", required=False, multi=False, hide=False, choise=None,
                             discription_ja="bboxの縦幅がこの長さ以下のものは除去します。",
                             discription_en="Remove bboxes with a height less than this length."),
                        dict(opt="classes", type="str", default="", required=False, multi=True, hide=False, choise=None,
                             discription_ja="このクラス以外のbboxは除去します。複数指定できます。",
                             discription_en="Remove bboxes other than this class. Multiple specifications are possible."),
                        dict(opt="labels", type="str", default="", required=False, multi=True, hide=False, choise=None,
                             discription_ja="このラベル以外のbboxは除去します。複数指定できます。",
                             discription_en="Remove bboxes other than this label. Multiple specifications are possible."),
                        dict(opt="nodraw", type="bool", default=False, required=False, multi=False, hide=False, choise=[True, False],
                             discription_ja="推論結果画像にbbox等の描き込みを行いません。",
                             discription_en="Do not draw bboxes, etc. on the inference result image."),
                        dict(short="P", opt="output_preview", type="bool", default=False, required=False, multi=False, hide=False, choise=[True, False],
                             discription_ja="判定結果画像を`cv2.imshow`で表示します。",
                             discription_en="Display the judgment result image with `cv2.imshow`."),
                        dict(opt="output_image", type="file", default="", required=False, multi=False, hide=False, choise=None, fileio="out",
                             discription_ja="後処理結果画像の保存先ファイルを指定します。",
                             discription_en="Specify the destination file for saving the post-processing result image."),
                        dict(opt="output_json", short="o", type="file", default="", required=False, multi=False, hide=True, choise=None, fileio="out",
                             discription_ja="処理結果jsonの保存先ファイルを指定。",
                             discription_en="Specify the destination file for saving the processing result json."),
                        dict(opt="output_json_append", short="a", type="bool", default=False, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="処理結果jsonファイルを追記保存します。",
                             discription_en="Save the processing result json file by appending."),
                        dict(opt="stdout_log", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をConsole logに出力します。",
                             discription_en="Available only in GUI mode. Outputs standard output during command execution to Console log."),
                        dict(opt="capture_stdout", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をキャプチャーし、実行結果画面に表示します。",
                             discription_en="Available only in GUI mode. Captures standard output during command execution and displays it on the execution result screen."),
                    ]
                ),
                det_jadge=dict(
                    type="str", default=None, required=False, multi=False, hide=False, use_redis=self.USE_REDIS_FALSE,
                    discription_ja="ObjectDetectionで検知した個所を使用して判定を行います。",
                    discription_en="Perform judgment using the detected area in ObjectDetection.",
                    choise=[
                        dict(short="i", opt="input_file", type="file", default="", required=False, multi=False, hide=False, choise=None, fileio="in",
                             discription_ja="後処理させる推論結果をファイルで指定します。",
                             discription_en="Specify the inference result to be post-processed by file."),
                        dict(opt="stdin", type="bool", default=False, required=False, multi=False, hide=False, choise=[True, False],
                             discription_ja="後処理させる推論結果を標準入力から読み込みます。",
                             discription_en="Read the inference result to be post-processed from standard input."),
                        dict(opt="ok_score_th", type="float", default=None, required=False, multi=False, hide=False, choise=None,
                             discription_ja="クラススコアがこの値以上のものはok判定されます。",
                             discription_en="Class scores greater than this value are judged as ok."),
                        dict(opt="ok_classes", type="str", default="", required=False, multi=True, hide=False, choise=None,
                             discription_ja="okクラスに含めるクラスindexを指定します。複数指定できます。",
                             discription_en="Specify the class index to include in the ok class. Multiple specifications are possible."),
                        dict(opt="ok_labels", type="str", default="", required=False, multi=True, hide=False, choise=None,
                             discription_ja="okクラスに含めるクラスラベルを指定します。複数指定できます。",
                             discription_en="Specify the class label to include in the ok class. Multiple specifications are possible."),
                        dict(opt="ng_score_th", type="float", default=None, required=False, multi=False, hide=False, choise=None,
                             discription_ja="クラススコアがこの値以上のものはng判定されます。",
                             discription_en="Class scores greater than this value are judged as ng."),
                        dict(opt="ng_classes", type="str", default="", required=False, multi=True, hide=False, choise=None,
                             discription_ja="ngクラスに含めるクラスindexを指定します。複数指定できます。",
                             discription_en="Specify the class index to include in the ng class. Multiple specifications are possible."),
                        dict(opt="ng_labels", type="str", default="", required=False, multi=True, hide=False, choise=None,
                             discription_ja="ngクラスに含めるクラスラベルを指定します。複数指定できます。",
                             discription_en="Specify the class label to include in the ng class. Multiple specifications are possible."),
                        dict(opt="ext_score_th", type="float", default=None, required=False, multi=False, hide=False, choise=None,
                             discription_ja="クラススコアがこの値以上のものはgray判定されます。",
                             discription_en="Class scores greater than this value are judged as gray."),
                        dict(opt="ext_classes", type="str", default="", required=False, multi=True, hide=False, choise=None,
                             discription_ja="grayクラスに含めるクラスindexを指定します。複数指定できます。",
                             discription_en="Specify the class index to include in the gray class. Multiple specifications are possible."),
                        dict(opt="ext_labels", type="str", default="", required=False, multi=True, hide=False, choise=None,
                             discription_ja="grayクラスに含めるクラスラベルを指定します。複数指定できます。",
                             discription_en="Specify the class label to include in the gray class. Multiple specifications are possible."),
                        dict(opt="nodraw", type="bool", default=False, required=False, multi=False, hide=False, choise=[True, False],
                             discription_ja="推論結果画像にbbox等の描き込みを行いません。",
                             discription_en="Do not draw bboxes, etc. on the inference result image."),
                        dict(short="P", opt="output_preview", type="bool", default=False, required=False, multi=False, hide=False, choise=[True, False],
                             discription_ja="判定結果画像を`cv2.imshow`で表示します。",
                             discription_en="Display the judgment result image with `cv2.imshow`."),
                        dict(opt="output_image", type="file", default="", required=False, multi=False, hide=False, choise=None, fileio="out",
                             discription_ja="後処理結果画像の保存先ファイルを指定します。",
                             discription_en="Specify the destination file for saving the post-processing result image."),
                        dict(opt="output_json", short="o", type="file", default="", required=False, multi=False, hide=True, choise=None, fileio="out",
                             discription_ja="処理結果jsonの保存先ファイルを指定。",
                             discription_en="Specify the destination file for saving the processing result json."),
                        dict(opt="output_json_append", short="a", type="bool", default=False, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="処理結果jsonファイルを追記保存します。",
                             discription_en="Save the processing result json file by appending."),
                        dict(opt="stdout_log", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をConsole logに出力します。",
                             discription_en="Available only in GUI mode. Outputs standard output during command execution to Console log."),
                        dict(opt="capture_stdout", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をキャプチャーし、実行結果画面に表示します。",
                             discription_en="Available only in GUI mode. Captures standard output during command execution and displays it on the execution result screen."),
                    ]
                ),
                httpreq=dict(
                    type="str", default=None, required=False, multi=False, hide=False, use_redis=self.USE_REDIS_FALSE,
                    discription_ja="推論結果を指定したHTTPサーバーに送信します。",
                    discription_en="Send the inference result to the specified HTTP server.",
                    choise=[
                        dict(short="i", opt="input_file", type="file", default="", required=False, multi=False, hide=False, choise=None, fileio="in",
                             discription_ja="後処理させる推論結果をファイルで指定します。",
                             discription_en="Specify the inference result to be post-processed by file."),
                        dict(opt="stdin", type="bool", default=False, required=False, multi=False, hide=False, choise=[True, False],
                             discription_ja="後処理させる推論結果を標準入力から読み込みます。",
                             discription_en="Read the inference result to be post-processed from standard input."),
                        dict(opt="json_without_img", type="bool", default=False, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="JSONの送信時に画像を含めず送信します。",
                             discription_en="Send JSON without including images when sending JSON."),
                        dict(opt="fileup_name", type="str", default="file", required=True, multi=False, hide=False, choise=None,
                             discription_ja="推論結果の画像をPOSTするときのパラメータ名を指定します。省略すると `file` が使用されます。",
                             discription_en="Specify the parameter name when posting the image of the inference result. If omitted, `file` is used."),
                        dict(opt="stdout_log", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をConsole logに出力します。",
                             discription_en="Available only in GUI mode. Outputs standard output during command execution to Console log."),
                        dict(opt="capture_stdout", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をキャプチャーし、実行結果画面に表示します。",
                             discription_en="Available only in GUI mode. Captures standard output during command execution and displays it on the execution result screen."),
                    ]
                ),
                seg_bbox=dict(
                    type="str", default=None, required=False, multi=False, hide=False, use_redis=self.USE_REDIS_FALSE,
                    discription_ja="SemanticSegmentationで検知した個所をbboxに変換します。",
                    discription_en="Convert the detected area in SemanticSegmentation to bbox.",
                    choise=[
                        dict(short="i", opt="input_file", type="file", default="", required=False, multi=False, hide=False, choise=None, fileio="in",
                             discription_ja="後処理させる推論結果をファイルで指定します。",
                             discription_en="Specify the inference result to be post-processed by file."),
                        dict(opt="stdin", type="bool", default=False, required=False, multi=False, hide=False, choise=[True, False],
                             discription_ja="後処理させる推論結果を標準入力から読み込みます。",
                             discription_en="Read the inference result to be post-processed from standard input."),
                        dict(opt="del_segments", type="bool", default=True, required=False, multi=False, hide=False, choise=[True, False],
                             discription_ja="セグメンテーションマスクを結果から削除します。結果容量削減に効果があります。",
                             discription_en="Remove the segmentation mask from the result. This reduces the result capacity."),
                        dict(opt="nodraw", type="bool", default=False, required=False, multi=False, hide=False, choise=[True, False],
                             discription_ja="推論結果画像にbbox等の描き込みを行いません。",
                             discription_en="Do not draw bboxes, etc. on the inference result image."),
                        dict(opt="nodraw_bbox", type="bool", default=True, required=False, multi=False, hide=False, choise=[True, False],
                             discription_ja="推論結果画像にbboxの描き込みを行いません。",
                             discription_en="Do not draw bboxes on the inference result image."),
                        dict(opt="nodraw_rbbox", type="bool", default=False, required=False, multi=False, hide=False, choise=[True, False],
                             discription_ja="推論結果画像に回転bboxの描き込みを行いません。",
                             discription_en="Do not draw rotated bboxes on the inference result image."),
                        dict(short="P", opt="output_preview", type="bool", default=False, required=False, multi=False, hide=False, choise=[True, False],
                             discription_ja="判定結果画像を`cv2.imshow`で表示します。",
                             discription_en="Display the judgment result image with `cv2.imshow`."),
                        dict(opt="output_image", type="file", default="", required=False, multi=False, hide=False, choise=None, fileio="out",
                             discription_ja="後処理結果画像の保存先ファイルを指定します。",
                             discription_en="Specify the destination file for saving the post-processing result image."),
                        dict(opt="output_json", short="o", type="file", default="", required=False, multi=False, hide=True, choise=None, fileio="out",
                             discription_ja="処理結果jsonの保存先ファイルを指定。",
                             discription_en="Specify the destination file for saving the processing result json."),
                        dict(opt="output_json_append", short="a", type="bool", default=False, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="処理結果jsonファイルを追記保存します。",
                             discription_en="Save the processing result json file by appending."),
                        dict(opt="stdout_log", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をConsole logに出力します。",
                             discription_en="Available only in GUI mode. Outputs standard output during command execution to Console log."),
                        dict(opt="capture_stdout", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をキャプチャーし、実行結果画面に表示します。",
                             discription_en="Available only in GUI mode. Captures standard output during command execution and displays it on the execution result screen."),
                    ]
                ),
                seg_filter=dict(
                    type="str", default=None, required=False, multi=False, hide=False, use_redis=self.USE_REDIS_FALSE,
                    discription_ja="SemanticSegmentationで検知した個所をフィルタリングします。",
                    discription_en="Filter the detected area in SemanticSegmentation.",
                    choise=[
                        dict(short="i", opt="input_file", type="file", default="", required=False, multi=False, hide=False, choise=None, fileio="in",
                             discription_ja="後処理させる推論結果をファイルで指定します。",
                             discription_en="Specify the inference result to be post-processed by file."),
                        dict(opt="stdin", type="bool", default=False, required=False, multi=False, hide=False, choise=[True, False],
                             discription_ja="後処理させる推論結果を標準入力から読み込みます。",
                             discription_en="Read the inference result to be post-processed from standard input."),
                        dict(opt="del_segments", type="bool", default=True, required=False, multi=False, hide=False, choise=[True, False],
                             discription_ja="セグメンテーションマスクを結果から削除します。結果容量削減に効果があります。",
                             discription_en="Remove the segmentation mask from the result. This reduces the result capacity."),
                        dict(opt="logits_th", type="float", default="-100.0", required=False, multi=False, hide=False, choise=None,
                             discription_ja="ピクセルごとのクラススコアがこの値以下のものは除去されます。",
                             discription_en="Pixels with class scores less than this value are removed."),
                        dict(opt="classes", type="int", default="", required=False, multi=True, hide=True, choise=None,
                             discription_ja="このクラス以外のマスクは除去します。複数指定できます。",
                             discription_en="Remove areas other than this class. Multiple specifications are possible."),
                        dict(opt="labels", type="str", default="", required=False, multi=True, hide=False, choise=None,
                             discription_ja="このラベル以外のマスクは除去します。複数指定できます。",
                             discription_en="Remove areas other than this label. Multiple specifications are possible."),
                        dict(opt="nodraw", type="bool", default=False, required=False, multi=False, hide=False, choise=[True, False],
                             discription_ja="推論結果画像にマスクの描き込みを行いません。",
                             discription_en="Do not draw masks on the inference result image."),
                        dict(opt="del_logits", type="bool", default=True, required=False, multi=False, hide=False, choise=[True, False],
                             discription_ja="セグメンテーションスコアを結果から削除します。結果容量削減に効果があります。",
                             discription_en="Remove the segmentation score from the result. This reduces the result capacity."),
                        dict(short="P", opt="output_preview", type="bool", default=False, required=False, multi=False, hide=False, choise=[True, False],
                             discription_ja="判定結果画像を`cv2.imshow`で表示します。",
                             discription_en="Display the judgment result image with `cv2.imshow`."),
                        dict(opt="output_image", type="file", default="", required=False, multi=False, hide=False, choise=None, fileio="out",
                             discription_ja="後処理結果画像の保存先ファイルを指定します。",
                             discription_en="Specify the destination file for saving the post-processing result image."),
                        dict(opt="output_json", short="o", type="file", default="", required=False, multi=False, hide=True, choise=None, fileio="out",
                             discription_ja="処理結果jsonの保存先ファイルを指定。",
                             discription_en="Specify the destination file for saving the processing result json."),
                        dict(opt="output_json_append", short="a", type="bool", default=False, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="処理結果jsonファイルを追記保存します。",
                             discription_en="Save the processing result json file by appending."),
                        dict(opt="stdout_log", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をConsole logに出力します。",
                             discription_en="Available only in GUI mode. Outputs standard output during command execution to Console log."),
                        dict(opt="capture_stdout", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をキャプチャーし、実行結果画面に表示します。",
                             discription_en="Available only in GUI mode. Captures standard output during command execution and displays it on the execution result screen."),
                    ]
                ),
                showimg=dict(
                    type="str", default=None, required=False, multi=False, hide=False, use_redis=self.USE_REDIS_FALSE,
                    discription_ja="推論結果をshowimg.htmlに転送します。",
                    discription_en="Forward the inference results to showimg.html.",
                    choise=[
                        dict(short="i", opt="input_file", type="file", default="", required=False, multi=False, hide=False, choise=None, fileio="in",
                             discription_ja="後処理させる推論結果をファイルで指定します。",
                             discription_en="Specify the inference result to be post-processed by file."),
                        dict(opt="stdin", type="bool", default=False, required=False, multi=False, hide=False, choise=[True, False],
                             discription_ja="後処理させる推論結果を標準入力から読み込みます。",
                             discription_en="Read the inference result to be post-processed from standard input."),
                        dict(opt="host", type="str", default=default_host, required=False, multi=False, hide=True, choise=None,
                            discription_ja="Redisサーバーのサービスホストを指定します。",
                            discription_en="Specify the service host of the Redis server."),
                        dict(opt="port", type="int", default=default_port, required=False, multi=False, hide=True, choise=None,
                            discription_ja="Redisサーバーのサービスポートを指定します。",
                            discription_en="Specify the service port of the Redis server."),
                        dict(opt="password", type="str", default=default_pass, required=False, multi=False, hide=True, choise=None,
                            discription_ja="Redisサーバーのアクセスパスワード(任意)を指定します。省略時は `password` を使用します。",
                            discription_en="Specify the access password of the Redis server (optional). If omitted, `password` is used."),
                        dict(opt="svname", type="str", default="server", required=False, multi=False, hide=True, choise=None,
                            discription_ja="推論サーバーのサービス名を指定します。省略時は `server` を使用します。",
                            discription_en="Specify the service name of the inference server. If omitted, `server` is used."),
                        dict(opt="maxrecsize", type="int", default=1000, required=False, multi=False, hide=True, choise=None,
                            discription_ja="Redisサーバーに保存する推論結果の最大レコードサイズを指定します。",
                            discription_en="Specifies the maximum record size of inference results to be stored on the Redis server."),
                        dict(opt="stdout_log", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をConsole logに出力します。",
                             discription_en="Available only in GUI mode. Outputs standard output during command execution to Console log."),
                        dict(opt="capture_stdout", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をキャプチャーし、実行結果画面に表示します。",
                             discription_en="Available only in GUI mode. Captures standard output during command execution and displays it on the execution result screen."),
                    ]
                ),
            ),
            server=dict(
                discription_ja="サーバーモード",
                discription_en="Server mode",
                start=dict(
                    type="str", default=None, required=False, multi=False, hide=False, use_redis=self.USE_REDIS_TRUE,
                    discription_ja="推論サーバーを起動します。installモードで `iinfer -m install -c server` を実行している場合は、 `docker-compose up -d` を使用してください。",
                    discription_en="Start the inference server. If you are running `iinfer -m install -c server` in install mode, use `docker-compose up -d`.",
                    choise=[
                        dict(opt="host", type="str", default=default_host, required=True, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーのサービスホストを指定します。",
                             discription_en="Specify the service host of the Redis server."),
                        dict(opt="port", type="int", default=default_port, required=True, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーのサービスポートを指定します。",
                             discription_en="Specify the service port of the Redis server."),
                        dict(opt="password", type="str", default=default_pass, required=True, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーのアクセスパスワード(任意)を指定します。省略時は `password` を使用します。",
                             discription_en="Specify the access password of the Redis server (optional). If omitted, `password` is used."),
                        dict(opt="svname", type="str", default="server", required=True, multi=False, hide=True, choise=None,
                             discription_ja="推論サーバーのサービス名を指定します。省略時は `server` を使用します。",
                             discription_en="Specify the service name of the inference server. If omitted, `server` is used."),
                        dict(opt="data", type="file", default=common.HOME_DIR / '.iinfer', required=False, multi=False, hide=False, choise=None,
                             discription_ja="省略した時は `$HONE/.iinfer` を使用します。",
                             discription_en="When omitted, `$HONE/.iinfer` is used."),
                        dict(opt="retry_count", type="int", default=20, required=False, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーへの再接続回数を指定します。0以下を指定すると永遠に再接続を行います。",
                             discription_en="Specifies the number of reconnections to the Redis server.If less than 0 is specified, reconnection is forever."),
                        dict(opt="retry_interval", type="int", default=5, required=False, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーに再接続までの秒数を指定します。",
                             discription_en="Specifies the number of seconds before reconnecting to the Redis server."),
                        dict(opt="output_json", short="o", type="file", default="", required=False, multi=False, hide=True, choise=None, fileio="out",
                             discription_ja="処理結果jsonの保存先ファイルを指定。",
                             discription_en="Specify the destination file for saving the processing result json."),
                        dict(opt="output_json_append", short="a", type="bool", default=False, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="処理結果jsonファイルを追記保存します。",
                             discription_en="Save the processing result json file by appending."),
                        dict(opt="stdout_log", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をConsole logに出力します。",
                             discription_en="Available only in GUI mode. Outputs standard output during command execution to Console log."),
                        dict(opt="capture_stdout", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をキャプチャーし、実行結果画面に表示します。",
                             discription_en="Available only in GUI mode. Captures standard output during command execution and displays it on the execution result screen."),
                    ]
                ),
                stop=dict(
                    type="str", default=None, required=False, multi=False, hide=False, use_redis=self.USE_REDIS_TRUE,
                    discription_ja="推論サーバーを停止します。installモードで `iinfer -m install -c server` を実行している場合は、 `docker-compose down` を使用してください。",
                    discription_en="Stop the inference server. If you are running `iinfer -m install -c server` in install mode, use `docker-compose down`.",
                    choise=[
                        dict(opt="host", type="str", default=default_host, required=True, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーのサービスホストを指定します。",
                             discription_en="Specify the service host of the Redis server."),
                        dict(opt="port", type="int", default=default_port, required=True, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーのサービスポートを指定します。",
                             discription_en="Specify the service port of the Redis server."),
                        dict(opt="password", type="str", default=default_pass, required=True, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーのアクセスパスワード(任意)を指定します。省略時は `password` を使用します。",
                             discription_en="Specify the access password of the Redis server (optional). If omitted, `password` is used."),
                        dict(opt="svname", type="str", default="server", required=True, multi=False, hide=True, choise=None,
                             discription_ja="推論サーバーのサービス名を指定します。省略時は `server` を使用します。",
                             discription_en="Specify the service name of the inference server. If omitted, `server` is used."),
                        dict(opt="retry_count", type="int", default=3, required=False, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーへの再接続回数を指定します。0以下を指定すると永遠に再接続を行います。",
                             discription_en="Specifies the number of reconnections to the Redis server.If less than 0 is specified, reconnection is forever."),
                        dict(opt="retry_interval", type="int", default=5, required=False, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーに再接続までの秒数を指定します。",
                             discription_en="Specifies the number of seconds before reconnecting to the Redis server."),
                        dict(opt="timeout", type="int", default="15", required=False, multi=False, hide=True, choise=None,
                             discription_ja="サーバーの応答が返ってくるまでの最大待ち時間を指定。",
                             discription_en="Specify the maximum waiting time until the server responds."),
                        dict(opt="output_json", short="o", type="file", default="", required=False, multi=False, hide=True, choise=None, fileio="out",
                             discription_ja="処理結果jsonの保存先ファイルを指定。",
                             discription_en="Specify the destination file for saving the processing result json."),
                        dict(opt="output_json_append", short="a", type="bool", default=False, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="処理結果jsonファイルを追記保存します。",
                             discription_en="Save the processing result json file by appending."),
                        dict(opt="stdout_log", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をConsole logに出力します。",
                             discription_en="Available only in GUI mode. Outputs standard output during command execution to Console log."),
                        dict(opt="capture_stdout", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をキャプチャーし、実行結果画面に表示します。",
                             discription_en="Available only in GUI mode. Captures standard output during command execution and displays it on the execution result screen."),
                    ]
                ),
                list=dict(
                    type="str", default=None, required=False, multi=False, hide=False, use_redis=self.USE_REDIS_TRUE,
                    discription_ja="起動中の推論サーバーの一覧を表示します。クライアント環境からの利用も可能です。",
                    discription_en="Displays a list of running inference servers. Can also be used from the client environment.",
                    choise=[
                        dict(opt="host", type="str", default=default_host, required=True, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーのサービスホストを指定します。",
                             discription_en="Specify the service host of the Redis server."),
                        dict(opt="port", type="int", default=default_port, required=True, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーのサービスポートを指定します。",
                             discription_en="Specify the service port of the Redis server."),
                        dict(opt="password", type="str", default=default_pass, required=True, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーのアクセスパスワード(任意)を指定します。省略時は `password` を使用します。",
                             discription_en="Specify the access password of the Redis server (optional). If omitted, `password` is used."),
                        dict(opt="timeout", type="int", default="15", required=False, multi=False, hide=True, choise=None,
                             discription_ja="サーバーの応答が返ってくるまでの最大待ち時間を指定。",
                             discription_en="Specify the maximum waiting time until the server responds."),
                        dict(opt="output_json", short="o", type="file", default="", required=False, multi=False, hide=True, choise=None, fileio="out",
                             discription_ja="処理結果jsonの保存先ファイルを指定。",
                             discription_en="Specify the destination file for saving the processing result json."),
                        dict(opt="output_json_append", short="a", type="bool", default=False, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="処理結果jsonファイルを追記保存します。",
                             discription_en="Save the processing result json file by appending."),
                        dict(opt="stdout_log", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をConsole logに出力します。",
                             discription_en="Available only in GUI mode. Outputs standard output during command execution to Console log."),
                        dict(opt="capture_stdout", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をキャプチャーし、実行結果画面に表示します。",
                             discription_en="Available only in GUI mode. Captures standard output during command execution and displays it on the execution result screen."),
                    ]
                ),
            ),
            redis=dict(
                discription_ja="Redisモード",
                discription_en="Redis mode",
                docker_run=dict(
                    type="str", default=None, required=False, multi=False, hide=False, use_redis=self.USE_REDIS_FALSE,
                    discription_ja="installモードで `iinfer -m install -c server` を実行している場合は、 `docker-compose up -d` を使用してください。",
                    discription_en="If you are running `iinfer -m install -c server` in install mode, use `docker-compose up -d`.",
                    choise=[
                        dict(opt="port", type="int", default=default_port, required=True, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーのサービスポートを指定します。",
                             discription_en="Specify the service port of the Redis server."),
                        dict(opt="password", type="str", default=default_pass, required=True, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーのアクセスパスワードを指定します。省略時は`password`を使用します。",
                             discription_en="Specify the access password of the Redis server. If omitted, `password` is used."),
                        dict(opt="wsl_name", type="str", default="", required=False, multi=False, hide=True, choise=None,
                             discription_ja="Windowsの場合はWSLのディストリビューションの名前を指定します。",
                             discription_en="For Windows, specify the name of the WSL distribution."),
                        dict(opt="wsl_user", type="str", default="ubuntu", required=False, multi=False, hide=True, choise=None,
                             discription_ja="Windowsの場合はWSL内のユーザー名を指定します。",
                             discription_en="For Windows, specify the user name in WSL."),
                        dict(opt="output_json", short="o", type="file", default="", required=False, multi=False, hide=True, choise=None, fileio="out",
                             discription_ja="処理結果jsonの保存先ファイルを指定。",
                             discription_en="Specify the destination file for saving the processing result json."),
                        dict(opt="output_json_append", short="a", type="bool", default=False, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="処理結果jsonファイルを追記保存します。",
                             discription_en="Save the processing result json file by appending."),
                        dict(opt="stdout_log", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をConsole logに出力します。",
                             discription_en="Available only in GUI mode. Outputs standard output during command execution to Console log."),
                        dict(opt="capture_stdout", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をキャプチャーし、実行結果画面に表示します。",
                             discription_en="Available only in GUI mode. Captures standard output during command execution and displays it on the execution result screen."),
                    ]
                ),
                docker_stop=dict(
                    type="str", default=None, required=False, multi=False, hide=False, use_redis=self.USE_REDIS_FALSE,
                    discription_ja="installモードで `iinfer -m install -c server` を実行している場合は、 `docker-compose down` を使用してください。",
                    discription_en="If you are running `iinfer -m install -c server` in install mode, use `docker-compose down`.",
                    choise=[
                        dict(opt="wsl_name", type="str", default="", required=False, multi=False, hide=True, choise=None,
                             discription_ja="Windowsの場合はWSLのディストリビューションの名前を指定します。",
                             discription_en="For Windows, specify the name of the WSL distribution."),
                        dict(opt="wsl_user", type="str", default="ubuntu", required=False, multi=False, hide=True, choise=None,
                             discription_ja="Windowsの場合はWSL内のユーザー名を指定します。",
                             discription_en="For Windows, specify the user name in WSL."),
                        dict(opt="output_json", short="o", type="file", default="", required=False, multi=False, hide=True, choise=None, fileio="out",
                             discription_ja="処理結果jsonの保存先ファイルを指定。",
                             discription_en="Specify the destination file for saving the processing result json."),
                        dict(opt="output_json_append", short="a", type="bool", default=False, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="処理結果jsonファイルを追記保存します。",
                             discription_en="Save the processing result json file by appending."),
                        dict(opt="stdout_log", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をConsole logに出力します。",
                             discription_en="Available only in GUI mode. Outputs standard output during command execution to Console log."),
                        dict(opt="capture_stdout", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をキャプチャーし、実行結果画面に表示します。",
                             discription_en="Available only in GUI mode. Captures standard output during command execution and displays it on the execution result screen."),
                    ]
                ),
            ),
            web=dict(
                discription_ja="Webモード",
                discription_en="Web mode",
                start=dict(
                    type="str", default=None, required=False, multi=False, hide=False, use_redis=self.USE_REDIS_MEIGHT,
                    discription_ja="Webモードを起動します。",
                    discription_en="Start Web mode.",
                    choise=[
                        dict(opt="host", type="str", default=default_host, required=False, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーのサービスホストを指定します。",
                             discription_en="Specify the service host of the Redis server."),
                        dict(opt="port", type="int", default=default_port, required=False, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーのサービスポートを指定します。",
                             discription_en="Specify the service port of the Redis server."),
                        dict(opt="password", type="str", default=default_pass, required=False, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーのアクセスパスワード(任意)を指定します。省略時は `password` を使用します。",
                             discription_en="Specify the access password of the Redis server (optional). If omitted, `password` is used."),
                        dict(opt="svname", type="str", default="server", required=False, multi=False, hide=True, choise=None,
                             discription_ja="推論サーバーのサービス名を指定します。省略時は `server` を使用します。",
                             discription_en="Specify the service name of the inference server. If omitted, `server` is used."),
                        dict(opt="data", type="file", default=common.HOME_DIR / '.iinfer', required=False, multi=False, hide=False, choise=None,
                             discription_ja="省略した時は `$HONE/.iinfer` を使用します。",
                             discription_en="When omitted, `$HONE/.iinfer` is used."),
                        dict(opt="allow_host", type="str", default="0.0.0.0", required=False, multi=False, hide=False, choise=None,
                             discription_ja="省略した時は `0.0.0.0` を使用します。",
                             discription_en="If omitted, `0.0.0.0` is used."),
                        dict(opt="listen_port", type="int", default="8081", required=False, multi=False, hide=False, choise=None,
                             discription_ja="省略した時は `8081` を使用します。",
                             discription_en="If omitted, `8081` is used."),
                        dict(opt="client_only", type="bool", default=False, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="iinferサーバーへの接続を行わないようにします。",
                             discription_en="Do not make connections to the iinfer server."),
                        dict(opt="outputs_key", type="str", default=None, required=False, multi=True, hide=False, choise=None,
                             discription_ja="showimg及びwebcap画面で表示する項目を指定します。省略した場合は全ての項目を表示します。",
                             discription_en="Specify items to be displayed on the showimg and webcap screens. If omitted, all items are displayed."),
                        dict(opt="filer_html", type="file", default=None, required=False, multi=False, hide=False, choise=None,
                             discription_ja="`filer.html` を指定します。省略時はiinfer内蔵のHTMLファイルを使用します。",
                             discription_en="Specify `filer.html`. If omitted, the iinfer built-in HTML file is used."),
                        dict(opt="showimg_html", type="file", default=None, required=False, multi=False, hide=False, choise=None,
                             discription_ja="`showimg.html` を指定します。省略時はiinfer内蔵のHTMLファイルを使用します。",
                             discription_en="Specify `showimg.html`. If omitted, the iinfer built-in HTML file is used."),
                        dict(opt="webcap_html", type="file", default=None, required=False, multi=False, hide=False, choise=None,
                             discription_ja="`webcap.html` を指定します。省略時はiinfer内蔵のHTMLファイルを使用します。",
                             discription_en="Specify `webcap.html`. If omitted, the iinfer built-in HTML file is used."),
                        dict(opt="assets", type="file", default=None, required=False, multi=True, hide=False, choise=None,
                             discription_ja="htmlファイルを使用する場合に必要なアセットファイルを指定します。",
                             discription_en="Specify the asset file required when using html files."),
                        dict(opt="capture_stdout", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をキャプチャーし、実行結果画面に表示します。",
                             discription_en="Available only in GUI mode. Captures standard output during command execution and displays it on the execution result screen."),
                    ]
                ),
                stop=dict(
                    type="str", default=None, required=False, multi=False, hide=False, use_redis=self.USE_REDIS_FALSE,
                    discription_ja="Webモードを停止します。",
                    discription_en="Stop Web mode.",
                    choise=[
                        dict(opt="data", type="file", default=common.HOME_DIR / '.iinfer', required=False, multi=False, hide=False, choise=None,
                             discription_ja="省略した時は `$HONE/.iinfer` を使用します。",
                             discription_en="When omitted, `$HONE/.iinfer` is used."),
                        dict(opt="capture_stdout", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をキャプチャーし、実行結果画面に表示します。",
                             discription_en="Available only in GUI mode. Captures standard output during command execution and displays it on the execution result screen."),
                    ]
                ),
               webcap=dict(
                    type="str", default=None, required=False, multi=False, hide=False, use_redis=self.USE_REDIS_MEIGHT,
                    discription_ja="webcapモードを起動します。",
                    discription_en="Start webcap mode.",
                    choise=[
                        dict(opt="allow_host", type="str", default="0.0.0.0", required=False, multi=False, hide=False, choise=None,
                             discription_ja="省略した時は `0.0.0.0` を使用します。",
                             discription_en="If omitted, `0.0.0.0` is used."),
                        dict(opt="listen_port", type="int", default="8082", required=False, multi=False, hide=False, choise=None,
                             discription_ja="省略した時は `8082` を使用します。",
                             discription_en="If omitted, `8082` is used."),
                        dict(opt="image_type", type="str", default="capture", required=True, multi=False, hide=False, choise=['bmp', 'png', 'jpeg', 'capture'],
                             discription_ja="出力する画像のタイプを指定します。",
                             discription_en="Specify the type of image to output."),
                        dict(opt="outputs_key", type="str", default=None, required=False, multi=True, hide=False, choise=None,
                             discription_ja="webcap画面で表示する項目を指定します。省略した場合は全ての項目を表示します。",
                             discription_en="Specify items to be displayed on the webcap screens. If omitted, all items are displayed."),
                        dict(opt="capture_frame_width", type="int", default=640, required=False, multi=False, hide=True, choise=None,
                             discription_ja="キャプチャーする画像の横px。受信した画像をリサイズします。",
                             discription_en="Width px of the image to be captured. Resize the received image."),
                        dict(opt="capture_frame_height", type="int", default=480, required=False, multi=False, hide=True, choise=None,
                             discription_ja="キャプチャーする画像の縦px。受信した画像をリサイズします。",
                             discription_en="Height px of the image to be captured. Resize the received image."),
                        dict(opt="capture_fps", type="int", default=5, required=False, multi=False, hide=True, choise=None,
                             discription_ja="キャプチャーする画像のFPS。キャプチャーが指定した値より高速な場合に残り時間分をsleepします。",
                             discription_en="FPS of the image to be captured. If the capture is faster than the specified value, sleep for the remaining time."),
                        dict(opt="capture_count", type="int", default=5, required=False, multi=False, hide=False, choise=None,
                             discription_ja="キャプチャーする回数。",
                             discription_en="Number of captures."),
                        dict(opt="access_url", type="str", default=None, required=False, multi=False, hide=True, choise=None,
                             discription_ja="クライアントからアクセスするときのURL。省略した時は `webcap/pub_img` を使用します。例えば `http://localhost:<listen_port>/webcap/pub_img` を指定します。",
                             discription_en="The URL to access from the client. if omitted, use `webcap/pub_img`. For example, specify `http://localhost:<listen_port>/webcap/pub_img`."),
                        dict(opt="capture_stdout", type="bool", default=True, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をキャプチャーし、実行結果画面に表示します。",
                             discription_en="Available only in GUI mode. Captures standard output during command execution and displays it on the execution result screen."),
                    ]
                ),
            ),
            gui=dict(
                discription_ja="GUIモード",
                discription_en="GUI mode",
                start=dict(
                    type="str", default=None, required=False, multi=False, hide=False, use_redis=self.USE_REDIS_MEIGHT,
                    discription_ja="GUIモードを起動します。",
                    discription_en="Start GUI mode.",
                    choise=[
                        dict(opt="host", type="str", default=default_host, required=False, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーのサービスホストを指定します。",
                             discription_en="Specify the service host of the Redis server."),
                        dict(opt="port", type="int", default=default_port, required=False, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーのサービスポートを指定します。",
                             discription_en="Specify the service port of the Redis server."),
                        dict(opt="password", type="str", default=default_pass, required=False, multi=False, hide=True, choise=None,
                             discription_ja="Redisサーバーのアクセスパスワード(任意)を指定します。省略時は `password` を使用します。",
                             discription_en="Specify the access password of the Redis server (optional). If omitted, `password` is used."),
                        dict(opt="svname", type="str", default="server", required=False, multi=False, hide=True, choise=None,
                             discription_ja="推論サーバーのサービス名を指定します。省略時は `server` を使用します。",
                             discription_en="Specify the service name of the inference server. If omitted, `server` is used."),
                        dict(opt="data", type="file", default=common.HOME_DIR / '.iinfer', required=False, multi=False, hide=False, choise=None,
                             discription_ja="省略した時は `$HONE/.iinfer` を使用します。",
                             discription_en="When omitted, `$HONE/.iinfer` is used."),
                        dict(opt="allow_host", type="str", default="0.0.0.0", required=False, multi=False, hide=False, choise=None,
                             discription_ja="省略した時は `0.0.0.0` を使用します。",
                             discription_en="If omitted, `0.0.0.0` is used."),
                        dict(opt="listen_port", type="int", default="8081", required=False, multi=False, hide=False, choise=None,
                             discription_ja="省略した時は `8081` を使用します。",
                             discription_en="If omitted, `8081` is used."),
                        dict(opt="client_only", type="bool", default=False, required=False, multi=False, hide=True, choise=[True, False],
                             discription_ja="iinferサーバーへの接続を行わないようにします。",
                             discription_en="Do not make connections to the iinfer server."),
                        dict(opt="filer_html", type="file", default=None, required=False, multi=False, hide=False, choise=None,
                             discription_ja="`filer.html` を指定します。省略時はiinfer内蔵のHTMLファイルを使用します。",
                             discription_en="Specify `filer.html`. If omitted, the iinfer built-in HTML file is used."),
                        dict(opt="showimg_html", type="file", default=None, required=False, multi=False, hide=False, choise=None,
                             discription_ja="`showimg.html` を指定します。省略時はiinfer内蔵のHTMLファイルを使用します。",
                             discription_en="Specify `showimg.html`. If omitted, the iinfer built-in HTML file is used."),
                        dict(opt="webcap_html", type="file", default=None, required=False, multi=False, hide=False, choise=None,
                             discription_ja="`webcap.html` を指定します。省略時はiinfer内蔵のHTMLファイルを使用します。",
                             discription_en="Specify `webcap.html`. If omitted, the iinfer built-in HTML file is used."),
                        dict(opt="assets", type="file", default=None, required=False, multi=True, hide=False, choise=None,
                             discription_ja="htmlファイルを使用する場合に必要なアセットファイルを指定します。",
                             discription_en="Specify the asset file required when using html files."),
                    ]
                ),
            )
        )
        self._options["debug"]["opt"] = "debug"
        for key, mode in self._options["cmd"].items():
            if type(mode) is not dict:
                continue
            mode['opt'] = key
            for k, c in mode.items():
                if type(c) is not dict:
                    continue
                c["opt"] = k
                c["choise"].append(self._options["debug"])
                self._options["cmd"]["choise"] += [c]
            self._options["mode"][key] = mode
            self._options["mode"]["choise"] += [mode]

