Полное руководство для разработчиков
Скрытая передача AI команд через ультразвуковые частоты
Добро пожаловать в мир Ultrasonic Agentics - революционной технологии стеганографии, которая позволяет скрывать зашифрованные AI команды в ультразвуковых частотах. Эта технология открывает новые горизонты для безопасной и незаметной передачи данных.
Данная технология требует базового понимания Python, работы с командной строкой и основ цифровой обработки сигналов. Все команды в этом руководстве приведены на английском языке для совместимости с международными стандартами.
Ultrasonic Agentics - это передовой фреймворк стеганографии, который встраивает зашифрованные AI команды в ультразвуковые частоты от 18 до 20 кГц. Эти частоты находятся за пределами человеческого слуха, но могут быть обнаружены и обработаны программным обеспечением.
Команды скрываются в фоновом шуме и полностью невидимы для обнаружения стандартными методами анализа аудио.
Оптимизирована для работы на батарейных устройствах и встроенных системах с минимальным потреблением энергии.
AM/FM радио
Spotify потоки
YouTube видео
Домофоны
Встраивание данных в частоты 18-20 кГц, которые находятся за пределами человеческого слуха
AES-256 шифрование с HMAC аутентификацией для максимальной безопасности
Работает с любыми форматами аудио и видео файлов
Интеграция с MCP (Model Context Protocol) для AI агентов
Потоковая или пакетная обработка с минимальной задержкой
Оптимизировано для Arduino, ESP32, Raspberry Pi и подобных платформ
Ultrasonic Agentics использует сложный конвейер обработки сигналов, состоящий из нескольких последовательных этапов. Каждый этап оптимизирован для обеспечения максимальной безопасности и надежности передачи данных.
Использует алгоритм 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")
Эффективная упаковка битов с коррекцией ошибок для повышения надежности передачи в условиях помех.
Частотная манипуляция (FSK) в диапазоне 18.5-19.5 кГц для представления цифровых данных.
FSK параметры:
• Частота для бита '0': 18.5 кГц
• Частота для бита '1': 19.5 кГц
• Длительность бита: 10-50 мс (настраивается)
• Амплитуда: 0.05-0.2 от максимального уровня
Психоакустическая маскировка для бесшовной интеграции ультразвукового сигнала в существующий аудиоконтент.
ML-улучшенное обнаружение и извлечение сигнала с автоматической адаптацией к условиям среды.
Процесс установки Ultrasonic Agentics довольно прост и занимает всего несколько минут. Система поддерживает различные способы установки в зависимости от ваших потребностей.
Самый простой способ установки - использование пакетного менеджера 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 образа
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
Ultrasonic Agentics предоставляет три основных инструмента командной строки для различных задач. Каждый инструмент оптимизирован для конкретных сценариев использования.
Главный инструмент для встраивания и декодирования команд в аудио и видео файлах.
# Базовое встраивание команды
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
Сервер для интеграции с 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
MCP сервер позволяет AI агентам (таким как Claude) напрямую взаимодействовать с Ultrasonic Agentics для встраивания и декодирования команд в реальном времени.
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
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: Справка по любой команде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 включает современный веб-интерфейс на React, который предоставляет удобный графический интерфейс для всех основных функций системы. Это идеальное решение для пользователей, предпочитающих визуальный интерфейс командной строке.
# Переход в директорию с веб-интерфейсом
cd ui
# Установка зависимостей (выполняется один раз)
npm install
# Запуск в режиме разработки
npm run dev
# Запуск в production режиме
npm run build
npm run preview
📍 Адрес: После запуска веб-интерфейс будет доступен по адресу
http://localhost:5173
Центральная панель с быстрым доступом ко всем основным функциям системы.
Реальновременный мониторинг качества ультразвукового сигнала и достоверности декодирования.
Интуитивное управление ключами шифрования и параметрами безопасности.
• Генерация криптографически стойких ключей
• Импорт/экспорт ключей
• Проверка целостности данных
Веб-интерфейс использует 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 доступа
📁 Файлы: Загружаемые файлы временно хранятся в памяти и не сохраняются на сервере
Веб-интерфейс полностью адаптирован для мобильных устройств и планшетов. Поддерживаются сенсорные жесты, адаптивная разметка и оптимизированное управление для сенсорных экранов.
Model Context Protocol (MCP) интеграция позволяет AI агентам (таким как Claude) напрямую взаимодействовать с Ultrasonic Agentics. Это открывает новые возможности для автоматизации и интеллектуального управления ультразвуковыми коммуникациями.
Model Context Protocol - это стандартный протокол, который позволяет AI моделям взаимодействовать с внешними инструментами и сервисами. Через MCP, AI агенты могут выполнять сложные задачи, используя специализированные инструменты без необходимости прямого программирования.
# Базовый запуск 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
После запуска MCP сервера, AI агенты могут использовать Ultrasonic Agentics через стандартные MCP команды:
# AI агент может выполнить:
ultrasonic-agentics encode "AI: process customer data" audio.mp3
AI агент автоматически обработает аудиофайл и встроит указанную команду
# AI агент может выполнить:
ultrasonic-agentics decode audio.mp3
AI агент извлечет скрытую команду и может принять решение о дальнейших действиях
AI анализирует медиаконтент и автоматически встраивает соответствующие команды на основе содержания.
AI автоматически проверяет медиафайлы на наличие скрытых команд и анализирует их на предмет безопасности.
AI оптимизирует параметры кодирования на основе характеристик входного аудио и целевой среды.
AI анализирует эффективность передачи команд и предлагает улучшения для конкретных сценариев.
Пример настройки интеграции с 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"
AI может создавать сложные пайплайны обработки, комбинируя множественные операции:
1. Анализ входного аудио 2. Выбор оптимальных параметров 3. Встраивание команды 4. Верификация результата 5. Генерация отчета
AI может генерировать подробные отчеты о качестве встраивания, вероятности обнаружения и рекомендации по улучшению.
AI учитывает контекст использования (например, тип медиа, целевая аудитория, условия воспроизведения) для оптимизации параметров.
🔐 Безопасность: MCP сервер должен быть защищен от несанкционированного доступа
📈 Производительность: При высокой нагрузке рассмотрите масштабирование сервера
🔄 Мониторинг: Ведите логи всех MCP операций для аудита и отладки
⚡ Ограничения: Установите лимиты на размер файлов и частоту запросов
Ultrasonic Agentics предлагает множество расширенных возможностей для профессиональных разработчиков и специфических случаев использования. Эти функции обеспечивают максимальную гибкость и производительность системы.
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