Ultrasonic Agentics

Полное руководство для разработчиков

Скрытая передача AI команд через ультразвуковые частоты

Содержание

1. Введение

Добро пожаловать в мир Ultrasonic Agentics - революционной технологии стеганографии, которая позволяет скрывать зашифрованные AI команды в ультразвуковых частотах. Эта технология открывает новые горизонты для безопасной и незаметной передачи данных.

Что делает эту технологию особенной?

  • Команды полностью неслышимы для человеческого уха (18-20 кГц)
  • Военный уровень шифрования AES-256 с HMAC аутентификацией
  • Работает с любыми аудио и видео файлами
  • Интеграция с AI агентами через MCP протокол
  • Энергоэффективная работа для IoT устройств

Важные замечания для начинающих

Данная технология требует базового понимания Python, работы с командной строкой и основ цифровой обработки сигналов. Все команды в этом руководстве приведены на английском языке для совместимости с международными стандартами.

2. Что такое Ultrasonic Agentics

Ultrasonic Agentics - это передовой фреймворк стеганографии, который встраивает зашифрованные AI команды в ультразвуковые частоты от 18 до 20 кГц. Эти частоты находятся за пределами человеческого слуха, но могут быть обнаружены и обработаны программным обеспечением.

100% Невидимая связь

Команды скрываются в фоновом шуме и полностью невидимы для обнаружения стандартными методами анализа аудио.

Сверхнизкое энергопотребление

Оптимизирована для работы на батарейных устройствах и встроенных системах с минимальным потреблением энергии.

Способы передачи данных:

AM/FM радио

Spotify потоки

YouTube видео

Домофоны

3. Ключевые особенности

Неслышимые команды

Встраивание данных в частоты 18-20 кГц, которые находятся за пределами человеческого слуха

Военное шифрование

AES-256 шифрование с HMAC аутентификацией для максимальной безопасности

Аудио/Видео поддержка

Работает с любыми форматами аудио и видео файлов

AI-готовность

Интеграция с MCP (Model Context Protocol) для AI агентов

Реального времени

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

Встроенные системы

Оптимизировано для Arduino, ESP32, Raspberry Pi и подобных платформ

Технические характеристики производительности:

  • Скорость встраивания: ~100x реального времени на современных CPU
  • Битрейт: 100-1000 bps в зависимости от конфигурации
  • Частотный диапазон: 18-20 кГц (настраиваемый)
  • Успешность декодирования: >99.9% в типичных условиях
  • Энергопотребление: < 10мВт в режиме прослушивания
  • Задержка пробуждения: < 50мс от сна до обнаружения команды
  • Дальность: 1-10 метров в зависимости от среды
  • Использование памяти: < 1КБ RAM для базового декодера

4. Архитектура системы

Ultrasonic Agentics использует сложный конвейер обработки сигналов, состоящий из нескольких последовательных этапов. Каждый этап оптимизирован для обеспечения максимальной безопасности и надежности передачи данных.

1. Шифрование команд

Использует алгоритм AES-256-GCM с производным ключом для обеспечения конфиденциальности и аутентификации данных.

# Пример генерации ключа
import os
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
from cryptography.hazmat.primitives import hashes

# Генерация соли и ключа
salt = os.urandom(16)
kdf = PBKDF2HMAC(
    algorithm=hashes.SHA256(),
    length=32,
    salt=salt,
    iterations=100000,
)
key = kdf.derive(b"your-password")

2. Двоичное кодирование

Эффективная упаковка битов с коррекцией ошибок для повышения надежности передачи в условиях помех.

Методы коррекции ошибок:
  • Reed-Solomon коды для исправления множественных ошибок
  • Циклическая избыточная проверка (CRC) для обнаружения повреждений
  • Дублирование критических данных

3. FSK Модуляция

Частотная манипуляция (FSK) в диапазоне 18.5-19.5 кГц для представления цифровых данных.

FSK параметры:
• Частота для бита '0': 18.5 кГц
• Частота для бита '1': 19.5 кГц
• Длительность бита: 10-50 мс (настраивается)
• Амплитуда: 0.05-0.2 от максимального уровня

4. Внедрение сигнала

Психоакустическая маскировка для бесшовной интеграции ультразвукового сигнала в существующий аудиоконтент.

Техника маскировки учитывает спектральные характеристики исходного аудио и динамически подстраивает амплитуду ультразвукового сигнала для минимизации слышимых артефактов.

5. Адаптивное декодирование

ML-улучшенное обнаружение и извлечение сигнала с автоматической адаптацией к условиям среды.

Система машинного обучения анализирует характеристики входящего сигнала и автоматически оптимизирует параметры декодирования для максимальной точности.

5. Установка и настройка

Процесс установки Ultrasonic Agentics довольно прост и занимает всего несколько минут. Система поддерживает различные способы установки в зависимости от ваших потребностей.

Системные требования

Минимальные требования:

  • Python 3.8 или выше
  • 1 ГБ оперативной памяти
  • 100 МБ свободного места на диске
  • Звуковая карта с поддержкой 44.1 кГц

Рекомендуемые требования:

  • Python 3.10+ с pip
  • 4 ГБ оперативной памяти
  • 1 ГБ свободного места на диске
  • Высококачественная звуковая карта

Установка из PyPI (рекомендуется)

Самый простой способ установки - использование пакетного менеджера pip:

# Базовая установка
pip install ultrasonic-agentics

# Установка со всеми дополнительными компонентами
pip install ultrasonic-agentics[all]

# Установка только для разработки
pip install ultrasonic-agentics[dev]

Установка из исходного кода

Для разработчиков, которые хотят получить последнюю версию или внести свой вклад:

# Клонирование репозитория
git clone https://github.com/ruvnet/ultrasonic.git
cd ultrasonic

# Создание виртуального окружения (рекомендуется)
python -m venv venv
source venv/bin/activate  # На Windows: venv\Scripts\activate

# Установка в режиме разработки
pip install -e ".[dev]"

# Запуск тестов для проверки установки
pytest

Docker установка

Для изолированной среды выполнения:

# Создание Docker образа
git clone https://github.com/ruvnet/ultrasonic.git
cd ultrasonic
docker build -t ultrasonic-agentics .

# Запуск контейнера
docker run -it --rm -v $(pwd):/workspace ultrasonic-agentics

# Запуск API сервера в контейнере
docker run -p 8000:8000 ultrasonic-agentics ultrasonic-api

Проверка установки

После установки выполните следующие команды для проверки:

# Проверка версии
ultrasonic-agentics --version

# Проверка доступных команд
ultrasonic-agentics --help

# Тестовое встраивание (требуется аудиофайл)
ultrasonic-agentics embed -i test.mp3 -o output.mp3 -c "hello world"

Дополнительные зависимости

Для расширенной функциональности могут потребоваться дополнительные пакеты:

Для веб-интерфейса: npm install в директории ui/

Для обработки видео: pip install opencv-python

Для ML-функций: pip install scikit-learn tensorflow

6. Интерфейс командной строки

Ultrasonic Agentics предоставляет три основных инструмента командной строки для различных задач. Каждый инструмент оптимизирован для конкретных сценариев использования.

ultrasonic-agentics - Основной CLI

Главный инструмент для встраивания и декодирования команд в аудио и видео файлах.

Встраивание команд:

# Базовое встраивание команды
ultrasonic-agentics embed -i input.mp3 -o output.mp3 -c "command:execute" -k your-secret-key

# Встраивание с кастомными параметрами частоты и амплитуды
ultrasonic-agentics embed -i input.mp3 -o output.mp3 -c "deploy:v2" \
  --freq 19000 --amplitude 0.05 --bit-duration 0.02

# Встраивание в видеофайл
ultrasonic-agentics embed -i video.mp4 -o video_with_command.mp4 -c "AI: process video"

# Встраивание с автогенерацией ключа
ultrasonic-agentics embed -i audio.wav -o secure_audio.wav -c "status:check" --generate-key

Декодирование команд:

# Базовое декодирование
ultrasonic-agentics decode -i output.mp3 -k your-secret-key

# Декодирование с подробным выводом
ultrasonic-agentics decode -i output.mp3 -k your-secret-key --verbose

# Декодирование с сохранением логов
ultrasonic-agentics decode -i audio.mp3 -k key --verbose --log-file decode.log

# Пакетное декодирование нескольких файлов
ultrasonic-agentics decode -i "*.mp3" -k your-secret-key --batch

Анализ аудио:

# Базовый анализ на наличие ультразвуковых сигналов
ultrasonic-agentics analyze -i audio.mp3

# Анализ с генерацией спектрограммы
ultrasonic-agentics analyze -i audio.mp3 --spectrogram --output report.png

# Детальный анализ частотного спектра
ultrasonic-agentics analyze -i audio.mp3 --detailed --freq-range 17000-21000

# Анализ нескольких файлов с сравнением
ultrasonic-agentics analyze -i "*.mp3" --compare --output analysis_report.html

Конфигурация:

# Настройка параметров по умолчанию
ultrasonic-agentics config --freq 19000 --bit-rate 500

# Просмотр текущей конфигурации
ultrasonic-agentics config --show

# Сброс настроек к значениям по умолчанию
ultrasonic-agentics config --reset

# Экспорт конфигурации в файл
ultrasonic-agentics config --export config.json

ultrasonic-server - MCP Сервер

Сервер для интеграции с AI агентами через Model Context Protocol (MCP).

# Запуск MCP сервера для интеграции с AI агентами
ultrasonic-server

# Запуск с кастомным портом
ultrasonic-server --port 8080

# Запуск с дополнительными параметрами логирования
ultrasonic-server --port 8080 --log-level DEBUG --log-file mcp.log

# Запуск в фоновом режиме
ultrasonic-server --daemon --pid-file /var/run/ultrasonic-server.pid

Интеграция с AI агентами:

MCP сервер позволяет AI агентам (таким как Claude) напрямую взаимодействовать с Ultrasonic Agentics для встраивания и декодирования команд в реальном времени.

ultrasonic-api - REST API Сервер

HTTP API сервер для интеграции с веб-приложениями и другими системами.

# Запуск REST API сервера
ultrasonic-api

# Запуск с кастомной конфигурацией
ultrasonic-api --host 0.0.0.0 --port 8000 --workers 4

# Запуск в production режиме
ultrasonic-api --host 0.0.0.0 --port 8000 --workers 8 --log-level INFO

# Запуск с SSL сертификатом
ultrasonic-api --ssl-cert cert.pem --ssl-key key.pem --port 443

Примеры использования API:

# Встраивание через API
curl -X POST http://localhost:8000/embed \
  -F "audio=@input.mp3" \
  -F "command=deploy:production" \
  -F "key=your-secret-key"

# Декодирование через API
curl -X POST http://localhost:8000/decode \
  -F "audio=@output.mp3" \
  -F "key=your-secret-key"

# Анализ аудио через API
curl -X POST http://localhost:8000/analyze \
  -F "audio=@suspicious.mp3" \
  -H "Accept: application/json"

Справочная таблица команд

Команда Описание Пример
embed Скрыть команду в аудио ultrasonic-agentics embed -i in.mp3 -o out.mp3 -c "cmd"
decode Извлечь скрытую команду ultrasonic-agentics decode -i out.mp3 -k key
analyze Обнаружить ультразвуковой контент ultrasonic-agentics analyze -i audio.mp3
config Управление настройками ultrasonic-agentics config --show

Основные параметры:

  • -i, --input: Входной аудио/видео файл
  • -o, --output: Путь к выходному файлу
  • -c, --command: Команда для встраивания
  • -k, --key: Ключ шифрования
  • --freq: Ультразвуковая частота (по умолчанию: 18500 Гц)
  • --amplitude: Сила сигнала (0.0-1.0, по умолчанию: 0.1)
  • --verbose: Подробный вывод
  • --help: Справка по любой команде

7. Программные примеры на Python

Ultrasonic Agentics предоставляет мощный Python API для интеграции в ваши приложения. Ниже приведены подробные примеры для различных сценариев использования.

Базовое использование

Простейший пример встраивания и декодирования команды в аудиофайле.

from agentic_commands_stego import AudioEmbedder, AudioDecoder

# Создание экземпляра для встраивания команд
embedder = AudioEmbedder()

# Встраивание команды в аудиофайл
command = "execute: deploy_model --version 2.0"
secure_audio = embedder.embed_from_file("original.mp3", command)

# Сохранение результата
secure_audio.export("output_with_command.mp3", format="mp3")

# Создание декодера с тем же ключом шифрования
decoder = AudioDecoder(embedder.cipher.key)

# Декодирование скрытой команды
decoded_command = decoder.decode_from_file("output_with_command.mp3")
print(f"Скрытая команда: {decoded_command}")

# Проверка успешности операции
if decoded_command == command:
    print("✅ Команда успешно встроена и декодирована!")
else:
    print("❌ Ошибка при декодировании команды")

Расширенное кодирование/декодирование

Пример с использованием пользовательских ключей шифрования и дополнительными параметрами.

from agentic_commands_stego.embed.audio_embedder import AudioEmbedder
from agentic_commands_stego.decode.audio_decoder import AudioDecoder
import hashlib
import os

# Создание надежного ключа шифрования из пароля
def create_secure_key(password: str, salt: bytes = None) -> bytes:
    """Создание 32-байтного ключа из пароля"""
    if salt is None:
        salt = b'ultrasonic_salt_2024'  # В продакшене используйте случайную соль
    
    key = hashlib.pbkdf2_hmac('sha256', password.encode(), salt, 100000)
    return key

# Генерация ключа из пароля
password = "my_secure_password_123"
encryption_key = create_secure_key(password)

# Создание embedder с пользовательским ключом
embedder = AudioEmbedder(key=encryption_key)
decoder = AudioDecoder(key=encryption_key)

# Встраивание команды с дополнительными параметрами
try:
    success = embedder.embed_file(
        input_file='examples/sample_audio.mp3',
        output_file='secure_output.mp3',
        command='execute: deploy --version 2.0 --environment production',
        frequency=19000,        # Кастомная частота
        amplitude=0.08,         # Кастомная амплитуда
        bit_duration=0.015      # Кастомная длительность бита
    )
    
    if success:
        print("✅ Команда успешно встроена")
        
        # Декодирование с проверкой целостности
        decoded_command = decoder.decode_file('secure_output.mp3')
        
        if decoded_command:
            print(f"📝 Декодированная команда: {decoded_command}")
        else:
            print("❌ Не удалось декодировать команду")
    else:
        print("❌ Ошибка при встраивании команды")
        
except Exception as e:
    print(f"🚫 Произошла ошибка: {e}")

Обработка в реальном времени

Пример системы, которая слушает микрофон и реагирует на ультразвуковые команды в реальном времени.

from agentic_commands_stego.decode.audio_decoder import AudioDecoder
import pyaudio
import numpy as np
import threading
import time

class UltrasonicListener:
    """Класс для прослушивания ультразвуковых команд в реальном времени"""
    
    def __init__(self, key: bytes):
        self.decoder = AudioDecoder(key=key)
        self.is_listening = False
        self.audio_stream = None
        self.command_handlers = {}
        
    def register_command_handler(self, command_prefix: str, handler_func):
        """Регистрация обработчика для команд с определенным префиксом"""
        self.command_handlers[command_prefix] = handler_func
    
    def on_command_detected(self, command: str):
        """Обработка обнаруженной команды"""
        print(f"🎯 Обнаружена команда: {command}")
        
        # Поиск подходящего обработчика
        for prefix, handler in self.command_handlers.items():
            if command.startswith(prefix):
                try:
                    handler(command)
                    return
                except Exception as e:
                    print(f"❌ Ошибка при выполнении команды: {e}")
                    
        print(f"⚠️ Не найден обработчик для команды: {command}")
    
    def start_listening(self, device_index=None):
        """Начало прослушивания микрофона"""
        self.is_listening = True
        
        # Настройка PyAudio
        p = pyaudio.PyAudio()
        
        # Параметры аудиопотока
        chunk_size = 1024
        sample_rate = 44100
        channels = 1
        
        try:
            self.audio_stream = p.open(
                format=pyaudio.paFloat32,
                channels=channels,
                rate=sample_rate,
                input=True,
                input_device_index=device_index,
                frames_per_buffer=chunk_size
            )
            
            print("🎤 Начато прослушивание ультразвуковых команд...")
            print("Нажмите Ctrl+C для остановки")
            
            # Буфер для накопления аудиоданных
            audio_buffer = np.array([])
            buffer_duration = 2.0  # секунды
            buffer_size = int(sample_rate * buffer_duration)
            
            while self.is_listening:
                # Чтение аудиоданных
                data = self.audio_stream.read(chunk_size, exception_on_overflow=False)
                audio_chunk = np.frombuffer(data, dtype=np.float32)
                
                # Добавление в буфер
                audio_buffer = np.append(audio_buffer, audio_chunk)
                
                # Ограничение размера буфера
                if len(audio_buffer) > buffer_size:
                    audio_buffer = audio_buffer[-buffer_size:]
                
                # Попытка декодирования каждые 0.5 секунды
                if len(audio_buffer) >= sample_rate // 2:
                    try:
                        command = self.decoder.decode_audio_data(
                            audio_buffer, 
                            sample_rate=sample_rate
                        )
                        if command:
                            self.on_command_detected(command)
                            # Очистка буфера после успешного декодирования
                            audio_buffer = np.array([])
                    except:
                        pass  # Игнорируем ошибки декодирования
                        
        except KeyboardInterrupt:
            print("\n🛑 Остановка прослушивания...")
        finally:
            self.stop_listening()
            p.terminate()
    
    def stop_listening(self):
        """Остановка прослушивания"""
        self.is_listening = False
        if self.audio_stream:
            self.audio_stream.stop_stream()
            self.audio_stream.close()

# Пример использования
def handle_execute_command(command: str):
    """Обработчик команд execute"""
    action = command.replace("execute:", "").strip()
    print(f"🚀 Выполнение действия: {action}")
    # Здесь может быть логика выполнения команды

def handle_status_command(command: str):
    """Обработчик команд статуса"""
    print(f"📊 Запрос статуса: {command}")
    # Здесь может быть логика получения статуса

if __name__ == "__main__":
    # Создание ключа (тот же, что использовался для встраивания)
    key = create_secure_key("my_secure_password_123")
    
    # Создание слушателя
    listener = UltrasonicListener(key)
    
    # Регистрация обработчиков команд
    listener.register_command_handler("execute:", handle_execute_command)
    listener.register_command_handler("status:", handle_status_command)
    
    # Начало прослушивания
    listener.start_listening()

Пакетная обработка файлов

Пример обработки множества файлов с прогресс-баром и обработкой ошибок.

import os
import glob
from pathlib import Path
from agentic_commands_stego.embed.audio_embedder import AudioEmbedder
from agentic_commands_stego.decode.audio_decoder import AudioDecoder
from tqdm import tqdm  # pip install tqdm для прогресс-бара

class BatchProcessor:
    """Класс для пакетной обработки аудиофайлов"""
    
    def __init__(self, key: bytes = None):
        self.embedder = AudioEmbedder(key=key)
        self.decoder = AudioDecoder(key=key or self.embedder.cipher.key)
        self.supported_formats = ['.mp3', '.wav', '.ogg', '.flac', '.m4a']
    
    def embed_batch(self, input_dir: str, output_dir: str, command_template: str):
        """Встраивание команд в пакет файлов"""
        
        # Получение списка аудиофайлов
        audio_files = []
        for ext in self.supported_formats:
            audio_files.extend(glob.glob(os.path.join(input_dir, f"*{ext}")))
        
        if not audio_files:
            print(f"❌ Не найдено аудиофайлов в директории: {input_dir}")
            return
        
        # Создание выходной директории
        os.makedirs(output_dir, exist_ok=True)
        
        # Статистика
        success_count = 0
        error_count = 0
        
        print(f"📁 Начинаем обработку {len(audio_files)} файлов...")
        
        # Обработка файлов с прогресс-баром
        with tqdm(audio_files, desc="Встраивание команд") as pbar:
            for i, audio_file in enumerate(pbar):
                try:
                    # Создание уникальной команды для каждого файла
                    file_name = Path(audio_file).stem
                    command = command_template.format(
                        filename=file_name,
                        index=i,
                        timestamp=int(time.time())
                    )
                    
                    # Генерация имени выходного файла
                    output_file = os.path.join(
                        output_dir, 
                        f"secure_{Path(audio_file).name}"
                    )
                    
                    # Встраивание команды
                    success = self.embedder.embed_file(audio_file, output_file, command)
                    
                    if success:
                        success_count += 1
                        pbar.set_postfix({"✅": success_count, "❌": error_count})
                    else:
                        error_count += 1
                        pbar.set_postfix({"✅": success_count, "❌": error_count})
                        print(f"\n⚠️ Не удалось обработать: {audio_file}")
                        
                except Exception as e:
                    error_count += 1
                    pbar.set_postfix({"✅": success_count, "❌": error_count})
                    print(f"\n🚫 Ошибка при обработке {audio_file}: {e}")
        
        print(f"\n📊 Завершена пакетная обработка:")
        print(f"   ✅ Успешно обработано: {success_count}")
        print(f"   ❌ Ошибок: {error_count}")
    
    def decode_batch(self, input_dir: str) -> dict:
        """Декодирование команд из пакета файлов"""
        
        # Получение списка файлов
        audio_files = []
        for ext in self.supported_formats:
            audio_files.extend(glob.glob(os.path.join(input_dir, f"*{ext}")))
        
        if not audio_files:
            print(f"❌ Не найдено файлов в директории: {input_dir}")
            return {}
        
        results = {}
        
        print(f"🔍 Декодирование {len(audio_files)} файлов...")
        
        with tqdm(audio_files, desc="Декодирование") as pbar:
            for audio_file in pbar:
                try:
                    command = self.decoder.decode_file(audio_file)
                    results[audio_file] = command
                    
                    if command:
                        pbar.set_description(f"Найдена команда в {Path(audio_file).name}")
                    
                except Exception as e:
                    results[audio_file] = f"ОШИБКА: {e}"
        
        return results
    
    def verify_batch(self, secure_dir: str, expected_commands: dict) -> dict:
        """Проверка правильности встраивания команд"""
        
        decoded_results = self.decode_batch(secure_dir)
        verification_results = {}
        
        for file_path, decoded_command in decoded_results.items():
            file_name = Path(file_path).name.replace("secure_", "", 1)
            expected_command = expected_commands.get(file_name)
            
            if expected_command and decoded_command == expected_command:
                verification_results[file_name] = "✅ УСПЕХ"
            elif decoded_command and decoded_command.startswith("ОШИБКА:"):
                verification_results[file_name] = f"❌ {decoded_command}"
            elif expected_command:
                verification_results[file_name] = "❌ НЕСООТВЕТСТВИЕ"
            else:
                verification_results[file_name] = "⚠️ НЕТ ОЖИДАЕМОЙ КОМАНДЫ"
        
        return verification_results

# Пример использования пакетной обработки
if __name__ == "__main__":
    # Создание процессора с безопасным ключом
    key = create_secure_key("batch_processing_key_2024")
    processor = BatchProcessor(key=key)
    
    # Директории для обработки
    input_directory = "audio_files"
    output_directory = "secure_audio_files"
    
    # Шаблон команды (будет подставлен для каждого файла)
    command_template = "process_file: {filename} --id {index} --timestamp {timestamp}"
    
    # Пакетное встраивание команд
    processor.embed_batch(input_directory, output_directory, command_template)
    
    # Пакетное декодирование для проверки
    decoded_commands = processor.decode_batch(output_directory)
    
    # Вывод результатов
    print("\n📋 Результаты декодирования:")
    for file_path, command in decoded_commands.items():
        file_name = Path(file_path).name
        if command:
            print(f"  📄 {file_name}: {command}")
        else:
            print(f"  📄 {file_name}: ❌ Команда не найдена")

Настройка пользовательских частот

Пример настройки частотных параметров для различных условий и оборудования.

from agentic_commands_stego.embed.ultrasonic_encoder import UltrasonicEncoder
from agentic_commands_stego.decode.ultrasonic_decoder import UltrasonicDecoder
import numpy as np

class CustomFrequencyManager:
    """Менеджер для работы с различными частотными конфигурациями"""
    
    # Предустановленные конфигурации для разных сценариев
    PRESETS = {
        'high_quality': {
            'freq_0': 18000,    # Частота для бита '0'
            'freq_1': 19500,    # Частота для бита '1'
            'amplitude': 0.12,   # Высокая амплитуда
            'bit_duration': 0.01, # Быстрая передача
            'description': 'Высокое качество для идеальных условий'
        },
        'robust': {
            'freq_0': 17500,
            'freq_1': 18500,
            'amplitude': 0.15,
            'bit_duration': 0.03,  # Медленнее, но надежнее
            'description': 'Надежная передача в шумных условиях'
        },
        'stealth': {
            'freq_0': 19000,
            'freq_1': 19800,
            'amplitude': 0.03,    # Очень низкая амплитуда
            'bit_duration': 0.05, # Очень медленно
            'description': 'Максимальная скрытность'
        },
        'long_range': {
            'freq_0': 16000,    # Более низкие частоты для дальности
            'freq_1': 17000,
            'amplitude': 0.20,   # Максимальная амплитуда
            'bit_duration': 0.04,
            'description': 'Максимальная дальность передачи'
        }
    }
    
    def __init__(self, preset_name: str = 'high_quality'):
        self.current_preset = preset_name
        self.config = self.PRESETS[preset_name].copy()
        self.encoder = None
        self.decoder = None
        self._update_codecs()
    
    def _update_codecs(self):
        """Обновление кодеков с текущими настройками"""
        self.encoder = UltrasonicEncoder(
            freq_0=self.config['freq_0'],
            freq_1=self.config['freq_1'],
            amplitude=self.config['amplitude'],
            bit_duration=self.config['bit_duration']
        )
        
        self.decoder = UltrasonicDecoder(
            freq_0=self.config['freq_0'],
            freq_1=self.config['freq_1'],
            detection_threshold=self.config['amplitude'] * 0.3  # 30% от амплитуды
        )
    
    def set_preset(self, preset_name: str):
        """Установка предустановленной конфигурации"""
        if preset_name not in self.PRESETS:
            raise ValueError(f"Неизвестный пресет: {preset_name}")
        
        self.current_preset = preset_name
        self.config = self.PRESETS[preset_name].copy()
        self._update_codecs()
        
        print(f"📊 Установлен пресет '{preset_name}': {self.config['description']}")
        self.print_config()
    
    def customize_frequencies(self, freq_0: int, freq_1: int, 
                            amplitude: float = None, bit_duration: float = None):
        """Ручная настройка частот"""
        
        # Проверка частот
        if not (1000 <= freq_0 <= 22000) or not (1000 <= freq_1 <= 22000):
            raise ValueError("Частоты должны быть в диапазоне 1000-22000 Гц")
        
        if abs(freq_0 - freq_1) < 500:
            print("⚠️ Предупреждение: Разность частот менее 500 Гц может снизить надежность")
        
        self.config['freq_0'] = freq_0
        self.config['freq_1'] = freq_1
        
        if amplitude is not None:
            if not (0.01 <= amplitude <= 0.5):
                raise ValueError("Амплитуда должна быть в диапазоне 0.01-0.5")
            self.config['amplitude'] = amplitude
        
        if bit_duration is not None:
            if not (0.005 <= bit_duration <= 0.1):
                raise ValueError("Длительность бита должна быть в диапазоне 0.005-0.1 сек")
            self.config['bit_duration'] = bit_duration
        
        self._update_codecs()
        self.current_preset = 'custom'
        
        print("🔧 Установлена пользовательская конфигурация:")
        self.print_config()
    
    def print_config(self):
        """Вывод текущей конфигурации"""
        print(f"   🎵 Частота '0': {self.config['freq_0']} Гц")
        print(f"   🎵 Частота '1': {self.config['freq_1']} Гц")
        print(f"   🔊 Амплитуда: {self.config['amplitude']}")
        print(f"   ⏱️ Длительность бита: {self.config['bit_duration']} сек")
        
        # Вычисление битрейта
        bitrate = 1 / self.config['bit_duration']
        print(f"   📊 Битрейт: ~{bitrate:.0f} бит/сек")
    
    def test_configuration(self, test_data: str = "test_config_123") -> bool:
        """Тестирование текущей конфигурации"""
        print(f"🧪 Тестирование конфигурации с данными: '{test_data}'")
        
        try:
            # Кодирование тестовых данных
            encoded_signal = self.encoder.encode_payload(test_data.encode())
            print(f"   ✅ Кодирование успешно: {len(encoded_signal)} сэмплов")
            
            # Декодирование
            decoded_data = self.decoder.decode_payload(encoded_signal)
            
            if decoded_data and decoded_data.decode() == test_data:
                print("   ✅ Декодирование успешно")
                print("   🎯 Конфигурация работает корректно")
                return True
            else:
                print("   ❌ Ошибка декодирования")
                return False
                
        except Exception as e:
            print(f"   🚫 Ошибка тестирования: {e}")
            return False
    
    def analyze_frequency_spectrum(self, test_signal: np.ndarray, 
                                 sample_rate: int = 44100) -> dict:
        """Анализ частотного спектра сигнала"""
        
        # Быстрое преобразование Фурье
        fft = np.fft.fft(test_signal)
        freqs = np.fft.fftfreq(len(fft), 1/sample_rate)
        
        # Получение амплитуд
        amplitudes = np.abs(fft)
        
        # Анализ пиков на целевых частотах
        freq_0_idx = np.argmin(np.abs(freqs - self.config['freq_0']))
        freq_1_idx = np.argmin(np.abs(freqs - self.config['freq_1']))
        
        analysis = {
            'freq_0_amplitude': amplitudes[freq_0_idx],
            'freq_1_amplitude': amplitudes[freq_1_idx],
            'max_amplitude': np.max(amplitudes),
            'signal_to_noise_ratio': np.max(amplitudes) / np.mean(amplitudes),
            'frequency_separation': abs(self.config['freq_1'] - self.config['freq_0'])
        }
        
        return analysis

# Пример использования менеджера частот
if __name__ == "__main__":
    
    # Создание менеджера частот
    freq_manager = CustomFrequencyManager()
    
    # Тестирование различных пресетов
    for preset_name in freq_manager.PRESETS.keys():
        print(f"\n🔄 Тестирование пресета: {preset_name}")
        freq_manager.set_preset(preset_name)
        success = freq_manager.test_configuration()
        print("="*60)
    
    # Пользовательская настройка для низкокачественных динамиков
    print("\n🎛️ Настройка для низкокачественных динамиков:")
    freq_manager.customize_frequencies(
        freq_0=15000,     # Пониженные частоты
        freq_1=16500,
        amplitude=0.25,   # Увеличенная амплитуда
        bit_duration=0.06 # Увеличенная длительность
    )
    
    # Тестирование пользовательской конфигурации
    success = freq_manager.test_configuration("custom_test_data")
    
    if success:
        print("🎉 Пользовательская конфигурация готова к использованию!")
    else:
        print("⚠️ Пользовательская конфигурация требует доработки")

Советы по программированию с Ultrasonic Agentics:

  • Управление ключами: Всегда используйте безопасное хранение ключей шифрования
  • Обработка ошибок: Implement comprehensive error handling для production кода
  • Производительность: Используйте пакетную обработку для больших объемов данных
  • Тестирование: Всегда тестируйте конфигурации перед развертыванием
  • Логирование: Ведите подробные логи для отладки и мониторинга

8. Веб-интерфейс

Ultrasonic Agentics включает современный веб-интерфейс на React, который предоставляет удобный графический интерфейс для всех основных функций системы. Это идеальное решение для пользователей, предпочитающих визуальный интерфейс командной строке.

Запуск веб-интерфейса

# Переход в директорию с веб-интерфейсом
cd ui

# Установка зависимостей (выполняется один раз)
npm install

# Запуск в режиме разработки
npm run dev

# Запуск в production режиме
npm run build
npm run preview

📍 Адрес: После запуска веб-интерфейс будет доступен по адресу http://localhost:5173

Запись и встраивание в реальном времени

  • Запись аудио через микрофон браузера
  • Мгновенное встраивание команд
  • Предварительное прослушивание результата
  • Настройка качества записи

Drag-and-Drop обработка файлов

  • Перетаскивание аудио/видео файлов
  • Поддержка пакетной обработки
  • Автоматическое определение формата
  • Прогресс-бар для больших файлов

Анализ частот с визуализацией

  • Интерактивные спектрограммы
  • Анализ ультразвукового спектра
  • Детекция скрытых сигналов
  • Экспорт результатов анализа

Конфигурация параметров

  • Настройка частот и амплитуд
  • Управление ключами шифрования
  • Предустановленные профили
  • Сохранение пользовательских настроек

Основные возможности интерфейса

🎛️ Панель управления

Центральная панель с быстрым доступом ко всем основным функциям системы.

Встраивание Декодирование Анализ Настройки

📊 Мониторинг качества сигнала

Реальновременный мониторинг качества ультразвукового сигнала и достоверности декодирования.

Отношение сигнал/шум: 25.3 дБ
Достоверность декодирования: 98.7%

🔐 Управление безопасностью

Интуитивное управление ключами шифрования и параметрами безопасности.

• Генерация криптографически стойких ключей

• Импорт/экспорт ключей

• Проверка целостности данных

Интеграция с REST API

Веб-интерфейс использует REST API для взаимодействия с backend. Вы можете использовать те же API endpoints в своих приложениях:

# Запуск API сервера
ultrasonic-api --host 0.0.0.0 --port 8000

# Примеры API запросов из веб-интерфейса:

# Встраивание команды
curl -X POST http://localhost:8000/embed \
  -F "audio=@recording.wav" \
  -F "command=hello_world" \
  -F "frequency=18500" \
  -F "amplitude=0.1"

# Декодирование команды
curl -X POST http://localhost:8000/decode \
  -F "audio=@secure_audio.wav" \
  -F "key=your_encryption_key"

# Анализ аудио
curl -X POST http://localhost:8000/analyze \
  -F "audio=@test.mp3" \
  -H "Accept: application/json"

# Получение конфигурации
curl http://localhost:8000/config

# Обновление настроек
curl -X PUT http://localhost:8000/config \
  -H "Content-Type: application/json" \
  -d '{"frequency": 19000, "amplitude": 0.12}'

Безопасность веб-интерфейса

🔒 HTTPS: Используйте HTTPS в production для защиты передаваемых данных

🔑 Аутентификация: Настройте аутентификацию для доступа к интерфейсу

🌐 CORS: Настройте CORS policy для безопасного cross-origin доступа

📁 Файлы: Загружаемые файлы временно хранятся в памяти и не сохраняются на сервере

Мобильная совместимость

Веб-интерфейс полностью адаптирован для мобильных устройств и планшетов. Поддерживаются сенсорные жесты, адаптивная разметка и оптимизированное управление для сенсорных экранов.

9. MCP интеграция

Model Context Protocol (MCP) интеграция позволяет AI агентам (таким как Claude) напрямую взаимодействовать с Ultrasonic Agentics. Это открывает новые возможности для автоматизации и интеллектуального управления ультразвуковыми коммуникациями.

Что такое MCP?

Model Context Protocol - это стандартный протокол, который позволяет AI моделям взаимодействовать с внешними инструментами и сервисами. Через MCP, AI агенты могут выполнять сложные задачи, используя специализированные инструменты без необходимости прямого программирования.

Запуск MCP сервера

# Базовый запуск MCP сервера
ultrasonic-server

# Запуск с кастомным портом и логированием
ultrasonic-server --port 8080 --log-level DEBUG

# Запуск в фоновом режиме
ultrasonic-server --daemon --log-file /var/log/ultrasonic-mcp.log

# Проверка статуса сервера
curl http://localhost:8080/health

Использование с AI агентами

После запуска MCP сервера, AI агенты могут использовать Ultrasonic Agentics через стандартные MCP команды:

Встраивание команд через AI:

# AI агент может выполнить:
ultrasonic-agentics encode "AI: process customer data" audio.mp3

AI агент автоматически обработает аудиофайл и встроит указанную команду

Декодирование через AI:

# AI агент может выполнить:
ultrasonic-agentics decode audio.mp3

AI агент извлечет скрытую команду и может принять решение о дальнейших действиях

Сценарии использования с AI

Интеллектуальная обработка контента

AI анализирует медиаконтент и автоматически встраивает соответствующие команды на основе содержания.

Пример: AI обнаруживает в видео сцену с собакой и встраивает команду "animal_detected: dog"

Автоматическая верификация

AI автоматически проверяет медиафайлы на наличие скрытых команд и анализирует их на предмет безопасности.

Пример: AI сканирует загруженные файлы и предупреждает о подозрительных командах

Адаптивная конфигурация

AI оптимизирует параметры кодирования на основе характеристик входного аудио и целевой среды.

Пример: AI выбирает оптимальные частоты для музыкальных треков с богатым спектром

Интеллектуальная аналитика

AI анализирует эффективность передачи команд и предлагает улучшения для конкретных сценариев.

Пример: AI рекомендует изменить амплитуду для лучшей передачи в шумной среде

Интеграция с Claude

Пример настройки интеграции с Claude AI через MCP:

# Конфигурационный файл для Claude (.claude_config.json)
{
  "mcp_servers": {
    "ultrasonic": {
      "command": "ultrasonic-server",
      "args": ["--port", "8080"],
      "env": {
        "ULTRASONIC_LOG_LEVEL": "INFO"
      }
    }
  }
}

# Пример диалога с Claude:
# Пользователь: "Встрой команду 'status_check' в файл audio.mp3"
# Claude: "Я встрою команду в ваш аудиофайл используя ultrasonic-agentics..."
# [Claude выполняет команду через MCP]
# Claude: "Команда успешно встроена. Файл сохранен как audio_with_command.mp3"

Расширенные возможности MCP

🔄 Пайплайны обработки

AI может создавать сложные пайплайны обработки, комбинируя множественные операции:

1. Анализ входного аудио
2. Выбор оптимальных параметров
3. Встраивание команды
4. Верификация результата
5. Генерация отчета

📊 Аналитические отчеты

AI может генерировать подробные отчеты о качестве встраивания, вероятности обнаружения и рекомендации по улучшению.

🎯 Контекстно-aware обработка

AI учитывает контекст использования (например, тип медиа, целевая аудитория, условия воспроизведения) для оптимизации параметров.

Важные замечания по MCP интеграции

🔐 Безопасность: MCP сервер должен быть защищен от несанкционированного доступа

📈 Производительность: При высокой нагрузке рассмотрите масштабирование сервера

🔄 Мониторинг: Ведите логи всех MCP операций для аудита и отладки

⚡ Ограничения: Установите лимиты на размер файлов и частоту запросов

10. Расширенные возможности

Ultrasonic Agentics предлагает множество расширенных возможностей для профессиональных разработчиков и специфических случаев использования. Эти функции обеспечивают максимальную гибкость и производительность системы.

Потоковая обработка (Streaming API)

Streaming API позволяет обрабатывать аудиоданные в реальном времени без необходимости загрузки полных файлов в память.

# Пример потоковой обработки аудио
from agentic_commands_stego import StreamEncoder, StreamDecoder
import pyaudio
import threading
import queue

class RealTimeProcessor:
    def __init__(self, key: bytes):
        self.encoder = StreamEncoder(key=key)
        self.decoder = StreamDecoder(key=key)
        self.command_queue = queue.Queue()
        self.output_stream = None
        self.is_processing = False
        
    def start_real_time_embedding(self, input_device=None, output_device=None):
        """Запуск встраивания команд в реальном времени"""
        
        p = pyaudio.PyAudio()
        
        # Параметры аудио
        chunk_size = 1024
        sample_rate = 44100
        channels = 1
        
        # Входной поток (микрофон)
        input_stream = p.open(
            format=pyaudio.paFloat32,
            channels=channels,
            rate=sample_rate,
            input=True,
            input_device_index=input_device,
            frames_per_buffer=chunk_size
        )
        
        # Выходной поток (динамики)
        output_stream = p.open(
            format=pyaudio.paFloat32,
            channels=channels,
            rate=sample_rate,
            output=True,
            output_device_index=output_device,
            frames_per_buffer=chunk_size
        )
        
        self.is_processing = True
        print("🎙️ Начата потоковая обработка (Ctrl+C для остановки)")
        
        try:
            while self.is_processing:
                # Чтение аудиоданных
                audio_data = input_stream.read(chunk_size, exception_on_overflow=False)
                
                # Проверка наличия команд для встраивания
                command = None
                try:
                    command = self.command_queue.get_nowait()
                except queue.Empty:
                    pass
                
                # Обработка аудиочанка
                processed_chunk = self.encoder.process_chunk(audio_data, command)
                
                # Вывод обработанного аудио
                output_stream.write(processed_chunk)
                
        except KeyboardInterrupt:
            print("\n🛑 Остановка потоковой обработки")
        finally:
            input_stream.stop_stream()
            input_stream.close()
            output_stream.stop_stream()
            output_stream.close()
            p.terminate()
    
    def add_command_to_queue(self, command: str):
        """Добавление команды в очередь для встраивания"""
        self.command_queue.put(command)
        print(f"📝 Команда добавлена в очередь: {command}")

# Использование потокового процессора
processor = RealTimeProcessor(encryption_key)

# Запуск в отдельном потоке
processing_thread = threading.Thread(
    target=processor.start_real_time_embedding
)
processing_thread.daemon = True
processing_thread.start()

# Добавление команд во время работы
processor.add_command_to_queue("status: system_online")
processor.add_command_to_queue("command: start_monitoring")

# Ожидание завершения
processing_thread.join()

Поддержка видеофайлов

Ultrasonic Agentics может работать с видеофайлами, встраивая команды в аудиодорожку без изменения видеоряда.

# Работа с видеофайлами
from agentic_commands_stego import VideoEmbedder, VideoDecoder
import cv2

class VideoProcessor:
    def __init__(self, key: bytes = None):
        self.embedder = VideoEmbedder(key=key)
        self.decoder = VideoDecoder(key=key or self.embedder.cipher.key)
    
    def embed_in_video(self, input_video: str, output_video: str, 
                      command: str, preserve_quality: bool = True):
        """Встраивание команды в видеофайл"""
        
        print(f"🎬 Обработка видео: {input_video}")
        
        # Встраивание команды
        success = self.embedder.embed_from_file(
            input_file=input_video,
            output_file=output_video,
            command=command,
            preserve_video_quality=preserve_quality
        )
        
        if success:
            print(f"✅ Команда встроена в видео: {output_video}")
            
            # Проверка качества видео
            self._compare_video_quality(input_video, output_video)
        else:
            print("❌ Ошибка при встраивании команды в видео")
        
        return success
    
    def decode_from_video(self, video_file: str) -> str:
        """Извлечение команды из видеофайла"""
        
        print(f"🔍 Декодирование команды из видео: {video_file}")
        
        command = self.decoder.decode_from_file(video_file)
        
        if command:
            print(f"📝 Найдена команда: {command}")
        else:
            print("❌ Команда не найдена в видео")
        
        return command
    
    def _compare_video_quality(self, original: str, processed: str):
        """Сравнение качества оригинального и обработанного видео"""
        
        cap_orig = cv2.VideoCapture(original)
        cap_proc = cv2.VideoCapture(processed)
        
        # Получение базовой информации
        orig_fps = cap_orig.get(cv2.CAP_PROP_FPS)
        proc_fps = cap_proc.get(cv2.CAP_PROP_FPS)
        
        orig_frames = int(cap_orig.get(cv2.CAP_PROP_FRAME_COUNT))
        proc_frames = int(cap_proc.get(cv2.CAP_PROP_FRAME_COUNT))
        
        print(f"📊 Сравнение качества видео:")
        print(f"   FPS: {orig_fps:.1f} → {proc_fps:.1f}")
        print(f"   Кадры: {orig_frames} → {proc_frames}")
        
        if abs(orig_fps - proc_fps) < 0.1 and orig_frames == proc_frames:
            print("   ✅ Качество видео сохранено")
        else:
            print("   ⚠️ Обнаружены изменения в качестве видео")
        
        cap_orig.release()
        cap_proc.release()
    
    def batch_process_videos(self, video_list: list, command_template: str):
        """Пакетная обработка видеофайлов"""
        
        results = {}
        
        for i, video_file in enumerate(video_list):
            try:
                # Создание уникальной команды
                command = command_template.format(index=i, filename=video_file)
                output_file = f"secure_{video_file}"
                
                # Обработка видео
                success = self.embed_in_video(video_file, output_file, command)
                results[video_file] = {"success": success, "output": output_file}
                
            except Exception as e:
                results[video_file] = {"success": False, "error": str(e)}
        
        return results

# Пример использования с видео
video_processor = VideoProcessor()

# Встраивание команды в видео
video_processor.embed_in_video(
    input_video="sample_video.mp4",
    output_video="secure_video.mp4",
    command="AI: analyze frames for objects"
)

# Декодирование команды из видео
decoded_command = video_processor.decode_from_video("secure_video.mp4")

# Пакетная обработка видео
video_files = ["video1.mp4", "video2.avi", "video3.mov"]
results = video_processor.batch_process_videos(
    video_files, 
    "process_video_{index}: {filename}"
)

Улучшения на основе машинного обучения

Система использует алгоритмы машинного обучения для повышения точности декодирования и адаптации к различным условиям.

# ML-улучшенный декодер
from agentic_commands_stego.ml import MLEnhancedDecoder, NoiseProfiler
import numpy as np
from sklearn.ensemble import RandomForestClassifier

class IntelligentDecoder:
    def __init__(self, key: bytes):
        self.base_decoder = AudioDecoder(key=key)
        self.ml_decoder = MLEnhancedDecoder(key=key)
        self.noise_profiler = NoiseProfiler()
        self.confidence_threshold = 0.8
        
    def decode_with_ml_enhancement(self, audio_file: str) -> dict:
        """Декодирование с ML-улучшениями"""
        
        result = {
            'command': None,
            'confidence': 0.0,
            'method': None,
            'noise_profile': None,
            'recommendations': []
        }
        
        # Анализ шумового профиля
        noise_profile = self.noise_profiler.analyze_file(audio_file)
        result['noise_profile'] = noise_profile
        
        # Выбор стратегии декодирования на основе шума
        if noise_profile['snr'] > 20:  # Высокое качество
            # Стандартное декодирование
            command = self.base_decoder.decode_file(audio_file)
            confidence = 0.95 if command else 0.0
            method = 'standard'
            
        elif noise_profile['snr'] > 10:  # Среднее качество
            # ML-улучшенное декодирование
            command, confidence = self.ml_decoder.decode_with_confidence(audio_file)
            method = 'ml_enhanced'
            
        else:  # Низкое качество
            # Агрессивная ML-обработка
            command, confidence = self.ml_decoder.decode_aggressive(audio_file)
            method = 'ml_aggressive'
        
        result['command'] = command if confidence > self.confidence_threshold else None
        result['confidence'] = confidence
        result['method'] = method
        
        # Генерация рекомендаций
        result['recommendations'] = self._generate_recommendations(noise_profile, confidence)
        
        return result
    
    def _generate_recommendations(self, noise_profile: dict, confidence: float) -> list:
        """Генерация рекомендаций по улучшению"""
        
        recommendations = []
        
        if noise_profile['snr'] < 15:
            recommendations.append("Используйте шумоподавление перед декодированием")
        
        if confidence < 0.6:
            recommendations.append("Попробуйте увеличить амплитуду сигнала")
        
        if noise_profile['has_high_freq_noise']:
            recommendations.append("Примените фильтр высоких частот")
        
        if noise_profile['background_music']:
            recommendations.append("Рассмотрите использование других частот")
        
        return recommendations
    
    def train_on_custom_data(self, training_data: list):
        """Обучение на пользовательских данных"""
        
        print("🎓 Начинаем обучение ML модели...")
        
        features = []
        labels = []
        
        for data_point in training_data:
            # Извлечение признаков из аудио
            audio_features = self._extract_features(data_point['audio'])
            features.append(audio_features)
            labels.append(data_point['has_command'])
        
        # Обучение классификатора
        classifier = RandomForestClassifier(n_estimators=100, random_state=42)
        classifier.fit(np.array(features), labels)
        
        # Обновление ML декодера
        self.ml_decoder.update_classifier(classifier)
        
        print("✅ Обучение завершено")
    
    def _extract_features(self, audio_data: np.ndarray) -> list:
        """Извлечение признаков из аудиоданных"""
        
        features = []
        
        # Спектральные признаки
        fft = np.fft.fft(audio_data)
        spectrum = np.abs(fft)
        
        # Энергия в целевых частотах (18-20 кГц)
        target_freq_energy = np.sum(spectrum[18000:20000])
        features.append(target_freq_energy)
        
        # Общая энергия сигнала
        total_energy = np.sum(spectrum)
        features.append(total_energy)
        
        # Отношение энергий
        if total_energy > 0:
            features.append(target_freq_energy / total_energy)
        else:
            features.append(0)
        
        # Пиковая частота
        peak_freq = np.argmax(spectrum)
        features.append(peak_freq)
        
        # Спектральная энтропия
        normalized_spectrum = spectrum / np.sum(spectrum)
        entropy = -np.sum(normalized_spectrum * np.log2(normalized_spectrum + 1e-10))
        features.append(entropy)
        
        return features

# Пример использования интеллектуального декодера
decoder = IntelligentDecoder(encryption_key)

# Декодирование с ML-улучшениями
result = decoder.decode_with_ml_enhancement("noisy_audio.mp3")

print(f"Команда: {result['command']}")
print(f"Уверенность: {result['confidence']:.2f}")
print(f"Метод: {result['method']}")
print(f"SNR: {result['noise_profile']['snr']:.1f} дБ")

if result['recommendations']:
    print("Рекомендации:")
    for rec in result['recommendations']:
        print(f"  • {rec}")

# Обучение на пользовательских данных (опционально)
# training_data = [
#     {'audio': audio_sample_1, 'has_command': True},
#     {'audio': audio_sample_2, 'has_command': False},
#     # ... больше данных
# ]
# decoder.train_on_custom_data(training_data)

Аппаратное ускорение

Поддержка GPU ускорения для обработки больших объемов данных и работы с множественными потоками.

# GPU-ускоренная обработка
from agentic_commands_stego.acceleration import GPUProcessor
import cupy as cp  # CUDA для Python
import torch

class AcceleratedProcessor:
    def __init__(self, key: bytes, use_gpu: bool = True):
        self.key = key
        self.use_gpu = use_gpu and torch.cuda.is_available()
        
        if self.use_gpu:
            self.device = torch.device('cuda')
            print(f"🚀 Используется GPU: {torch.cuda.get_device_name()}")
        else:
            self.device = torch.device('cpu