from typing import List, Dict, Any 
from iinfer.app import common
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_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_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 []
        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}']
                opt['help'] = val['discription_en']
                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 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["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=[],
            client=dict(
                discription_ja="クライアントモード",
                discription_en="Client mode",
                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."),
                        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="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."),
                        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."),
                        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."),
                        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."),
                        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."),
                        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`."),
                        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."),
                        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."),
                        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."),
                        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."),
                        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."),
                        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."),
                        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."),
                        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."),
                        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."),
                        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=120, 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."),
                        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."),
                        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."),
                    ]
                ),
                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."),
                        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."),
                        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."),
                        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."),
                        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."),
                    ]
                ),
                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."),
                        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."),
                        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."),
                    ]
                ),
                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."),
                        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."),
                        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."),
                        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="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."),
                        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."),
                        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`."),
                        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."),
                    ]
                ),
                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.",
                    choise=[
                        dict(short="d", opt="capture_device", type="str", default="0", required=True, multi=False, hide=True, choise=None,
                             discription_ja="キャプチャーディバイスを指定します。 `cv2.VideoCapture` の第一引数に渡される値。",
                             discription_en="Specify the capture device. The value passed to the first argument of `cv2.VideoCapture`."),
                        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="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."),
                        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."),
                        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="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`."),
                        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."),
                    ]
                ),
                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."),
                        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."),
                    ]
                ),
                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."),
                        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."),
                    ]
                ),
                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."),
                        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."),
                    ]
                ),
                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="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="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."),
                    ]
                ),
            ),
            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."),
                        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."),
                        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."),
                        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."),
                        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."),
                        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."),
                        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."),
                    ]
                ),
                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="省略した時は `iinfer` を使用します。 `iinfer==0.7.2` といった指定も可能です。",
                             discription_en="When omitted, `iinfer` is used. You can also specify `iinfer==0.7.2`."),
                        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_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."),
                    ]
                ),
            ),
            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。省略した時は `http://localhost:<listen_port>/webcap/pub_img` を使用します。",
                             discription_en="The URL to access from the client. if omitted, use `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."),
                    ]
                ),
            )
        )
        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
                self._options["cmd"]["choise"] += [c]
            self._options["mode"][key] = mode
            self._options["mode"]["choise"] += [mode]

