#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Настройки
"""
# ######################################################################################################################
# Импорт необходимых инструментов
# ######################################################################################################################
import warnings # Подавление Warning
for warn in [UserWarning, FutureWarning]:
warnings.filterwarnings("ignore", category=warn)
import os # Взаимодействие с файловой системой
from dataclasses import dataclass # Класс данных
from colorama import init # Цветной текст терминала
# Типы данных
from typing import List
# Персональные
from openav.modules.core.messages import Messages # Сообщения
# ######################################################################################################################
# Константы
# ######################################################################################################################
PATH_TO_SAVE_MODELS: str = "./models" # Путь к директории для сохранения моделей
PATH_TO_DATASET: str = "./dataset" # Путь к директории набора данных
PATH_TO_INPUT_AUGMENTATION_DIRECTORY: str = "./data_aug" # Путь к директории набора данных для обработки
PATH_TO_OUTPUT_AUGMENTATION_DIRECTORY: str = "./data_aug_processed" # Путь к директории результирующих данных
# Путь к директории набора данных состоящего из фрагментов аудиовизуального сигнала (VAD)
PATH_TO_DATASET_VAD: str = "./dataset_vad"
# Путь к директории набора данных состоящего из фрагментов аудиовизуального сигнала (VOSK)
PATH_TO_DATASET_VOSK_SR: str = "./dataset_vosk"
IGNORE_DIRS: List[str] = [] # Директории не входящие в выборку
# Названия директорий для видео и аудио
DIR_VA_NAMES: List[str] = [
"Video",
"Audio",
]
# Расширения искомых файлов
EXT_SEARCH_FILES: List[str] = [
"mov",
"mp4",
"webm",
"wav",
]
CHUNK_SIZE: int = 1000000 # Размер загрузки файла из сети за 1 шаг
COLOR_INFO: str = "#1776D2" # Цвет текста содержащего информацию (шестнадцатеричный код)
COLOR_SIMPLE: str = "#666" # Цвет обычного текста (шестнадцатеричный код)
COLOR_ERR: str = "#FF0000" # Цвет текста содержащего ошибку (шестнадцатеричный код)
COLOR_TRUE: str = "#008001" # Цвет текста содержащего положительную информацию (шестнадцатеричный код)
# ######################################################################################################################
# Настройки
# ######################################################################################################################
[документация]@dataclass
class Settings(Messages):
"""Класс для настроек
Args:
path_to_logs (str): Смотреть :attr:`~openav.modules.core.logging.Logging.path_to_logs`
lang (str): Смотреть :attr:`~openav.modules.core.language.Language.lang`
"""
# ------------------------------------------------------------------------------------------------------------------
# Конструктор
# ------------------------------------------------------------------------------------------------------------------
def __post_init__(self):
super().__post_init__() # Выполнение конструктора из суперкласса
init() # Инициализация терминала с возможностью цветного текста
self.__color_green: str = "\033[92m" # Зеленый
self.__color_red: str = "\033[91m" # Красный
self.__color_blue: str = "\033[94m" # Синий
self.__text_bold: str = "\033[1m" # Жирный
self.__clear_line: str = "\x1b[2K" # Очистка линии в терминале
self.__text_end: str = "\033[0m" # Выход
self.path_to_save_models: str = PATH_TO_SAVE_MODELS # Путь к директории для сохранения моделей
self.path_to_dataset: str = PATH_TO_DATASET # Путь к директории набора данных
self.path_to_input_augmentation_directory: str = (
PATH_TO_INPUT_AUGMENTATION_DIRECTORY # Путь к директории набора данных для обработки
)
self.path_to_output_augmentation_directory: str = (
PATH_TO_OUTPUT_AUGMENTATION_DIRECTORY # Путь к директории результирующих данных аугментации
)
# Путь к директории набора данных состоящего из фрагментов аудиовизуального сигнала (VAD)
self.path_to_dataset_vad: str = PATH_TO_DATASET_VAD
# Путь к директории набора данных состоящего из фрагментов аудиовизуального сигнала (VOSK)
self.path_to_dataset_vosk_sr: str = PATH_TO_DATASET_VOSK_SR
self.ignore_dirs: List[str] = IGNORE_DIRS # Директории не входящие в выборку
self.dir_va_names: List[str] = DIR_VA_NAMES # Названия директорий для видео и аудио
self.ext_search_files: List[str] = EXT_SEARCH_FILES # Расширения искомых файлов
self.chunk_size: int = CHUNK_SIZE # Размер загрузки файла из сети за 1 шаг
# ------------------------------------------------------------------------------------------------------------------
# Свойства
# ------------------------------------------------------------------------------------------------------------------
@property
def color_green(self) -> str:
"""Получение зеленого цвета текста в терминале
Returns:
str: Цвет текста в терминале
"""
return self.__color_green
@property
def color_red(self) -> str:
"""Получение красного цвета текста в терминале
Returns:
str: Цвет текста в терминале
"""
return self.__color_red
@property
def color_blue(self) -> str:
"""Получение синего цвета текста в терминале
Returns:
str: Цвет текста в терминале
"""
return self.__color_blue
@property
def text_bold(self) -> str:
"""Получение жирного начертания текста в терминале
Returns:
str: Жирное начертание текста в терминале
"""
return self.__text_bold
@property
def clear_line(self) -> str:
"""Получение очистки линии в терминале
Returns:
str: Очистка линии в терминале
"""
return self.__clear_line
@property
def text_end(self) -> str:
"""Получение сброса оформления текста в терминале
Returns:
str: Сброс оформления текста в терминале
"""
return self.__text_end
@property
def path_to_save_models(self) -> str:
"""Получение/установка пути к директории для сохранения моделей
Args:
(str): Путь
Returns:
str: Путь
"""
return self.__path_to_save_models
@path_to_save_models.setter
def path_to_save_models(self, path: str):
"""Установка пути к директории для сохранения моделей"""
try:
# Проверка аргументов
if type(path) is not str or not path:
raise TypeError
except TypeError:
pass
else:
self.__path_to_save_models = os.path.normpath(path.strip())
@property
def path_to_dataset(self) -> str:
"""Получение/установка пути к директории набора данных
Args:
(str): Путь
Returns:
str: Путь
"""
return self.__path_to_dataset
@path_to_dataset.setter
def path_to_dataset(self, path: str):
"""Установка пути к директории набора данных"""
try:
# Проверка аргументов
if type(path) is not str or not path:
raise TypeError
except TypeError:
pass
else:
self.__path_to_dataset = os.path.normpath(path.strip())
@property
def path_to_dataset_vad(self) -> str:
"""Получение/установка пути к директории набора данных состоящего из фрагментов аудиовизуального сигнала (VAD)
Args:
(str): Путь
Returns:
str: Путь
"""
return self.__path_to_dataset_vad
@path_to_dataset_vad.setter
def path_to_dataset_vad(self, path: str):
"""Установка пути к директории набора данных состоящего из фрагментов аудиовизуального сигнала (VAD)"""
try:
# Проверка аргументов
if type(path) is not str or not path:
raise TypeError
except TypeError:
pass
else:
self.__path_to_dataset_vad = os.path.normpath(path.strip())
@property
def path_to_dataset_vosk_sr(self) -> str:
"""Получение/установка пути к директории набора данных состоящего из фрагментов аудиовизуального сигнала (VOSK)
Args:
(str): Путь
Returns:
str: Путь
"""
return self.__path_to_dataset_vosk_sr
@path_to_dataset_vosk_sr.setter
def path_to_dataset_vosk_sr(self, path: str):
"""Установка пути к директории набора данных состоящего из фрагментов аудиовизуального сигнала (VOSK)"""
try:
# Проверка аргументов
if type(path) is not str or not path:
raise TypeError
except TypeError:
pass
else:
self.__path_to_dataset_vosk_sr = os.path.normpath(path.strip())
@property
def ignore_dirs(self) -> List[str]:
"""Получение/установка списка с директориями не входящими в выборку
Args:
(List[str]): Список с директориями
Returns:
List[str]: Список с директориями
"""
return self.__ignore_dirs
@ignore_dirs.setter
def ignore_dirs(self, l: List[str]) -> None:
"""Установка списка с директориями не входящими в выборку"""
if type(l) is list:
try:
self.__ignore_dirs = [x.strip() for x in l]
except Exception:
pass
@property
def dir_va_names(self) -> List[str]:
"""Получение/установка списка с названиями директорий для видео и аудио
Args:
(List[str]): Список с директориями
Returns:
List[str]: Список с директориями
"""
return self.__dir_va_names
@dir_va_names.setter
def dir_va_names(self, l: List[str]) -> None:
"""Установка списка с названиями директорий для видео и аудио"""
if type(l) is list and len(l) == 2:
try:
self.__dir_va_names = [x.strip() for x in l]
except Exception:
pass
@property
def ext_search_files(self) -> List[str]:
"""Получение/установка списка с расширениями искомых файлов
Args:
(List[str]): Список с расширениями искомых файлов
Returns:
List[str]: Список с расширениями искомых файлов
"""
return self.__ext_search_files
@ext_search_files.setter
def ext_search_files(self, l: List[str]) -> None:
"""Установка списка с расширениями искомых файлов"""
if type(l) is list and len(l) > 0:
try:
self.__ext_search_files = ["." + x.strip().lower() for x in l]
except Exception:
pass
@property
def chunk_size(self) -> int:
"""Получение/установка размера загрузки файла из сети за 1 шаг
Args:
(int): Размер загрузки файла из сети за 1 шаг
Returns:
int: Размер загрузки файла из сети за 1 шаг
"""
return self.__chunk_size
@chunk_size.setter
def chunk_size(self, size: int) -> None:
"""Установка директории для сохранения данных"""
if type(size) is int and size > 0:
self.__chunk_size = size