Skip to content

Commit

Permalink
Merge pull request #8 from DmitryRyumin/develop
Browse files Browse the repository at this point in the history
Develop
  • Loading branch information
DmitryRyumin committed Jun 10, 2024
2 parents 027b0e6 + 96d4221 commit 853d137
Show file tree
Hide file tree
Showing 9 changed files with 146 additions and 45 deletions.
52 changes: 52 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,3 +28,55 @@
- [Диаграмма классов](https://openav.readthedocs.io/ru/latest/api/class_diagram.html)
- [Набор аудиовизуальных данных](https://openav.readthedocs.io/ru/latest/dataset.html)
- [Команда разработчиков](https://openav.readthedocs.io/ru/latest/about.html)
- [Руководство программиста](./guides/Руководство_программиста.pdf)
- [Руководство пользователя](./guides/Руководство_пользователя.pdf)

## Перечень возможных направлений прикладного использования библиотеки

1. **Автомобильная промышленность**
- **Системы помощи водителю**: Голосовое управление навигацией, климат-контролем, мультимедийными системами.
- **Каршеринг и таксопарки**: Безопасное управление транспортным средством и взаимодействие с пассажирами в шумных условиях.
- **Умные автомобили**: Распознавание жестов и команд для управления функциями автомобиля.
2. **Авиация**
- **Кабины пилотов**: Голосовое управление бортовыми системами, особенно в условиях высокого уровня шума.
- **Обучение и симуляторы**: Реалистичное взаимодействие с системами управления и обучающими симуляторами.
3. **Производственные предприятия**
- **Управление оборудованием**: Голосовое управление станками и роботами на производственных линиях.
- **Безопасность и контроль**: Мониторинг и управление безопасностью в условиях шума.
4. **Логистика и складское хозяйство**
- **Управление инвентарем**: Голосовое управление системами управления складом.
- **Распознавание команд операторов**: Автоматизация процессов загрузки и разгрузки товаров.
5. **Медицинские учреждения**
- **Оборудование**: Голосовое управление медицинскими устройствами и инструментами.
- **Запись и управление данными**: Голосовое ведение медицинских записей и управление информационными системами.
6. **Охрана и безопасность**
- **Системы видеонаблюдения**: Анализ видеопотоков и распознавание подозрительных действий или команд.
- **Управление доступом**: Голосовое управление системами безопасности и контроля доступа.
7. **Умный дом**
- **Умные устройства**: Голосовое управление бытовыми приборами, системами освещения, климат-контролем.
- **Безопасность дома**: Распознавание голосовых команд для управления системами безопасности.
8. **Образование и тренинги**
- **Обучающие программы**: Голосовое управление обучающими системами и симуляторами.
- **Дистанционное обучение**: Интерактивное взаимодействие с учебными материалами и системами.
9. **Развлечения и медиа**
- **Мультимедийные системы**: Голосовое управление телевизорами, музыкальными системами, игровыми консолями.
- **Интерактивные развлечения**: Распознавание голосовых и жестовых команд в видеоиграх и VR/AR приложениях.
10. **Гостиничный и ресторанный бизнес**
- **Обслуживание клиентов**: Голосовое управление системами бронирования, обслуживания номеров, заказов в ресторанах.
- **Интерактивные системы**: Голосовое взаимодействие с информационными киосками и справочными системами.
11. **Правоохранительные органы и аварийные службы**
- **Оперативное управление**: Голосовое управление системами связи и управления в условиях чрезвычайных ситуаций.
- **Мониторинг и контроль**: Распознавание команд для автоматизации процессов управления и мониторинга.
12. **Публичные службы и правительственные учреждения**
- **Обслуживание граждан**: Голосовое взаимодействие с информационными системами и справочными службами.
- **Управление документами**: Автоматизация голосового управления документооборотом и административными процессами.

> Эти направления показывают, насколько универсальной и полезной может быть разработанная библиотека в самых разных областях. Она может существенно улучшить эффективность и удобство использования различных систем и устройств, особенно в условиях, требующих надежного распознавания речевых команд и устойчивости к шумам.
## Минимальные технические требования для использования библиотеки

- **Процессор**: AMD Ryzen 5950x или лучше
- **Видеокарта (GPU)**: NVIDIA GeForce 4090 RTX или лучше
- **ОЗУ**: 128GB или больше
- **Накопитель**: Твердотельный накопитель (SSD) или лучше (NVMe SSD M.2)
- **Операционная система**: Windows 10 64-bit или новее
Binary file not shown.
Binary file not shown.
2 changes: 1 addition & 1 deletion openav/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
__uri__ = "https://github.com/DmitryRyumin/openav"

__version__ = "1.0"
__release__ = __version__ + ".0-a11"
__release__ = __version__ + ".0-a13"

__author__ru__ = "Рюмин Дмитрий, Иванько Денис, Шилов Николай, Маркитантов Максим, Карпов Алексей"
__author__en__ = "Dmitry Ryumin, Denis Ivanko, Nikolay Shilov, Maxim Markitantov, Alexey Karpov"
Expand Down
15 changes: 9 additions & 6 deletions openav/modules/core/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -251,7 +251,7 @@ def inv_args(self, class_name: str, build_name: str, out: bool = True) -> None:
if out is True:
print(
"[{}{}{}] {}".format(
self.color_red, datetime.now().strftime(self._format_time), self.text_end, inv_args
self.color_red, datetime.now().strftime(self._format_time)[:-3], self.text_end, inv_args
)
)

Expand Down Expand Up @@ -341,7 +341,7 @@ def message_error(
ns
+ " " * space
+ "[{}{}{}] {}".format(
self.color_red, datetime.now().strftime(self._format_time), self.text_end, message
self.color_red, datetime.now().strftime(self._format_time)[:-3], self.text_end, message
),
end=ne,
)
Expand Down Expand Up @@ -414,7 +414,7 @@ def message_true(
ns
+ " " * space
+ "[{}{}{}] {}".format(
self.color_green, datetime.now().strftime(self._format_time), self.text_end, message
self.color_green, datetime.now().strftime(self._format_time)[:-3], self.text_end, message
),
end=ne,
)
Expand Down Expand Up @@ -468,7 +468,10 @@ def message_info(
if end is False:
ne = "\r"

print(ns + " " * space + "[{}] {}".format(datetime.now().strftime(self._format_time), message), end=ne)
print(
ns + " " * space + "[{}] {}".format(datetime.now().strftime(self._format_time)[:-3], message),
end=ne,
)

for character in self.__list_of_chars:
message = message.replace(character, "")
Expand Down Expand Up @@ -564,7 +567,7 @@ def metadata():
f"{space}{self._metadata[4]}: {openav.__license__}",
)

print("{}".format(f"[{datetime.now().strftime(self._format_time)}] {metadata()}"))
print("{}".format(f"[{datetime.now().strftime(self._format_time)[:-3]}] {metadata()}"))
self._logger_core.info(metadata())

def message_progressbar(self, message: str = "", space: int = 0, close: bool = False, out: bool = True) -> str:
Expand Down Expand Up @@ -613,7 +616,7 @@ def message_progressbar(self, message: str = "", space: int = 0, close: bool = F
"\r"
+ self.clear_line
+ (" " * space)
+ "[{}] {}".format(datetime.now().strftime(self._format_time), message)
+ "[{}] {}".format(datetime.now().strftime(self._format_time)[:-3], message)
)

if close is True:
Expand Down
2 changes: 1 addition & 1 deletion openav/modules/core/messages.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ def __post_init__(self):
self._("Лицензия"),
]

self._format_time: str = "%Y-%m-%d %H:%M:%S" # Формат времени
self._format_time: str = "%Y-%m-%d %H:%M:%S.%f" # Формат времени

self._em: str = " ..." # Конец сообщений (End Messages)

Expand Down
7 changes: 4 additions & 3 deletions openav/modules/lab/audiovisual.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@
from openav.modules.lab.video import Video # Видеомодальность
from openav.modules.nn.av_dataset import AVDataset, AVTest
from openav.modules.nn.utils import fix_seeds, train_one_epoch, val_one_epoch, save_conf_matrix
from openav.modules.nn.models import AVModel, Decoder
from openav.modules.nn.models import AVModel

# ######################################################################################################################
# Константы
Expand Down Expand Up @@ -737,7 +737,8 @@ def test_audiovisual(

# Проход по всем вложенным директориям
for nested_path in hierarchy_from_paths:
if nested_path[0].lower() in classes:
nested_path_0 = nested_path[0].replace("--и--", "й").lower()
if nested_path_0 in classes:
# Формирование списка с видеофайлами
for p in Path(os.path.join(self.path_to_dataset, *reversed(nested_path))).glob("*"):
# Добавление текущего пути к видеофайлу в список
Expand All @@ -746,7 +747,7 @@ def test_audiovisual(

if nested_path[-1] == subfolders[SUBFOLDERS_TEST[0]]:
path_test.append(p.resolve())
lb_test.append(classes.index(nested_path[0].lower()))
lb_test.append(classes.index(nested_path_0))
else:
pass

Expand Down
11 changes: 10 additions & 1 deletion openav/modules/nn/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import torch
from tqdm import tqdm
from sklearn.metrics import accuracy_score, confusion_matrix
from collections import Counter
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
Expand Down Expand Up @@ -95,7 +96,15 @@ def save_conf_matrix(
pad_inches=0,
font_scale=1,
):
c_m = confusion_matrix(y_true, y_pred)
y_true_2 = []
y_pred_2 = []
for idx, val in enumerate(y_pred):
if val not in set(Counter(y_pred).keys()) ^ set(Counter(y_true).keys()):
y_true_2.append(y_true[idx])
y_pred_2.append(val)

c_m = confusion_matrix(y_true_2, y_pred_2)

conf_matrix = pd.DataFrame(c_m, name_labels, name_labels)

group_counts = ["{0:0.0f}".format(value) for value in conf_matrix.values.flatten()]
Expand Down
102 changes: 69 additions & 33 deletions openav/rsrs/test_audiovisual.yaml
Original file line number Diff line number Diff line change
@@ -1,57 +1,93 @@
---
hide_metadata: false
hide_libs_vers: false
path_to_dataset: "/Users/dl/@DmitryRyumin/Databases/LRW_TEST/data_t"
path_to_dataset: "/Users/dl/@DmitryRyumin/Databases/OpenAV_DB"
subfolders:
test: "test"
n_classes: 26
n_classes: 62
classes:
- "1_Левая"
- "2_Правая"
- "3_Нажать_левую"
- "4_Отпустить_левую"
- "5_Нажать_правую"
- "6_Отпустить_правую"
- "7_Двойной_клик"
- "8_Вверх"
- "9_Вниз"
- "10_Ввод"
- "11_Отменить"
- "12_Удалить"
- "13_Выключить_компьютер"
- "14_Новый"
- "15_Открыть"
- "16_Сохранить"
- "17_Вырезать"
- "18_Копировать"
- "19_Закрыть"
- "20_Вставить"
- "21_Печать"
- "22_Вперед"
- "23_Назад"
- "24_Выделить_все"
- "25_Пуск"
- "26_Калибровка"
- "1_Позвонить"
- "2_Набрать_номер"
- "3_Отправить_сообщение"
- "4_Отправить_email"
- "5_Ответить_на_звонок"
- "6_Завершить_вызов"
- "7_Радио"
- "8_Музыка"
- "9_Воспроизвести"
- "10_Пауза"
- "11_Случайный_выбор"
- "12_Отключить_случайный_выбор"
- "13_Повтор"
- "14_Отключить_повтор"
- "15_Проложить_маршрут"
- "16_Избегать_платных_дорог"
- "17_Карта"
- "18_Найти_адрес"
- "19_Предыдущие_места_назначения"
- "20_Как_там_на_дорогах"
- "21_Какие_сейчас_пробки"
- "22_Надолго_пробка"
- "23_Домой"
- "24_На_работу"
- "25_Максимальное_увеличение"
- "26_Минимальное_увеличение"
- "27_Остановить_маршрут"
- "28_Возобновить_маршрут"
- "29_Сколько_мне_еще_ехать"
- "30_Во_сколько_я_приеду"
- "31_Показать_весь_маршрут"
- "32_Сбросить_маршрут"
- "33_Завершить_маршрут"
- "34_Найти_больницу"
- "35_Найти_заправку"
- "36_Найти_аптеку"
- "37_Найти_банк"
- "38_Найти_кофейню"
- "39_Найти_ресторан"
- "40_Найти_аэропорт"
- "41_Найти_автовокзал"
- "42_Найти_железнодорожный_вокзал"
- "43_Найти_парковку"
- "44_Найти_почту"
- "45_Найти_торговый_центр"
- "46_Да"
- "47_Нет"
- "48_Предыдущая"
- "49_Следующая"
- "50_Свернуть"
- "51_Справка"
- "52_Выйти"
- "53_Календарь"
- "54_Включить_свет_в_салоне"
- "55_Отключить_свет_в_салоне"
- "56_Включить_кондиционер"
- "57_Отключить_кондиционер"
- "58_Включить_печку"
- "59_Отключить_печку"
- "60_Камень"
- "61_Ножницы"
- "62_Бумага"
max_segment: 2
shape_audio:
channels: 1
n_mels: 64
samples: 306
shape_video:
frames: 29
frames: 60
channels: 3
width: 88
height: 88
encoder_decoder: 5
encoder_decoder: 3
hidden_units: 256
hidden_features: 128
input_dim: 512
path_to_model: "/Users/dl/GitHub/OpenAV/models/e66_0.822785.pth"
path_to_model: "/Users/dl/GitHub/OpenAV/models/e32_0.473251.pth"
save_confusion_matrix: true
path_to_save_confusion_matrix: "/Users/dl/GitHub/OpenAV/models"
figsize_confusion_matrix:
width: 2600
height: 2600
width: 3000
height: 3000
font_size: 14
dpi: 600
pad_inches: 0

0 comments on commit 853d137

Please sign in to comment.