В моём вопросе я спрашивал что мне делать во время рекламы? Наверно я что то пропустил в этой жизни, если человек элементарно не понимает о чём разговор. Кто же из нас тупит - вопрос.
его опять накрыло, пошел в каждой теме отмечаться и посты старые подымать.
не обращай ты внимания.
а у меня еще идейка появилась, можно еще нейроинтерфейс попытаться заточить под управление звуком, для этого я думаю будет достаточно испытывать негативные эмоции, и их то заметит… но это не точно… а как включать обратно надо подумать…
вооо даже готовый модуль продается https://aliexpress.ru/item/1005004567488199.html
что думать, по ИИ ТСу уже всю информацию выдали, работающий код тоже не проблема, просто он ленивая до нельзя задница это раз,
не в состоянии обучить модель своим хотелкам это два, да ещё и пургу несёт!
Код, рабочий, ESP32S3
#include "TFLiteMicro_ArduinoESP32S3.h"
#include "micro_speech_quantized_model.h"
#include "audio_provider.h"
#include "command_responder.h"
#include "feature_provider.h"
#include "micro_model_settings.h"
// Добавляем библиотеку для работы с IR
#include <IRremote.h>
// Пины для IR передатчика
#define IR_LED_PIN 15 // Пин для IR передатчика
// Globals
namespace
{
FeatureProvider *feature_provider = nullptr;
int32_t previous_time = 0;
int8_t feature_buffer[kFeatureElementCount];
int8_t *model_input_buffer = nullptr;
// Переменные для управления звуком телевизора
bool tv_muted = false;
bool last_command_sent = false;
unsigned long last_command_time = 0;
const unsigned long COMMAND_COOLDOWN = 2000; // Задержка между командами (мс)
// IR коды для Samsung TV (стандартные NEC коды)
const uint32_t SAMSUNG_POWER = 0xE0E040BF; // Кнопка Power
const uint32_t SAMSUNG_MUTE = 0xE0E0F00F; // Кнопка Mute (отключение звука)
const uint32_t SAMSUNG_VOL_UP = 0xE0E0E01F; // Громкость +
const uint32_t SAMSUNG_VOL_DOWN = 0xE0E0D02F; // Громкость -
// Создаем объект с уникальным именем, не конфликтующим с библиотекой
IRsend tv_ir_sender; // Изменено имя с IrSender на tv_ir_sender
} // namespace
// Функция управления звуком телевизора
void controlTvMute(bool mute)
{
if (mute) {
Serial.println("Выключение звука телевизора...");
tv_ir_sender.sendNEC(SAMSUNG_MUTE, 32);
tv_muted = true;
Serial.println("Звук выключен");
} else {
Serial.println("Включение звука телевизора...");
tv_ir_sender.sendNEC(SAMSUNG_MUTE, 32);
tv_muted = false;
Serial.println("Звук включен");
}
last_command_sent = true;
last_command_time = millis();
}
// Функция для определения команды по результатам распознавания
void processVoiceCommand(int detected_index, float score)
{
// Проверяем, не прошло ли еще время ожидания после последней команды
if (last_command_sent && (millis() - last_command_time) < COMMAND_COOLDOWN) {
Serial.println("Ожидание перед следующей командой...");
return;
}
if (score > 0.8f) {
const char* command = kCategoryLabels[detected_index];
if (strcmp(command, "yes") == 0) {
if (!tv_muted) {
Serial.println("Команда 'yes' - выключить звук");
controlTvMute(true);
} else {
Serial.println("Звук уже выключен");
}
}
else if (strcmp(command, "no") == 0) {
if (tv_muted) {
Serial.println("Команда 'no' - включить звук");
controlTvMute(false);
} else {
Serial.println("Звук уже включен");
}
}
}
}
void setup()
{
// Инициализируем последовательный порт для отладки
Serial.begin(115200);
while (!Serial);
Serial.println("Инициализация системы...");
// Инициализация IR передатчика
tv_ir_sender.begin(IR_LED_PIN);
Serial.print("IR передатчик инициализирован на пине ");
Serial.println(IR_LED_PIN);
// Инициализация TFLite модели
TFLMinterpreter = TFLMsetupModel<TFLMnumberOperators, 20000>(TFLM_micro_speech_quantized_model, TFLMgetResolver);
if (!TFLMinterpreter) {
Serial.println("The model was not setup correctly.");
for(;;){}
}
if ((TFLMinput->dims->size != 2) || (TFLMinput->dims->data[0] != 1) ||
(TFLMinput->dims->data[1] != (kFeatureCount * kFeatureSize)) ||
(TFLMinput->type != kTfLiteInt8))
{
Serial.println("Bad input tensor parameters in model");
return;
}
model_input_buffer = tflite::GetTensorData<int8_t>(TFLMinput);
static FeatureProvider static_feature_provider(kFeatureElementCount, feature_buffer);
feature_provider = &static_feature_provider;
previous_time = 0;
Serial.println("Система готова. Жду команд 'yes' (выкл звук) или 'no' (вкл звук)");
}
void loop()
{
const int32_t current_time = LatestAudioTimestamp();
int how_many_new_slices = 0;
TfLiteStatus feature_status = feature_provider->PopulateFeatureData(previous_time, current_time, &how_many_new_slices);
if (feature_status != kTfLiteOk)
{
Serial.println("Feature generation failed");
return;
}
previous_time = current_time;
if (how_many_new_slices == 0)
{
return;
}
for (int i = 0; i < kFeatureElementCount; i++)
{
model_input_buffer[i] = feature_buffer[i];
}
TFLMpredict();
float output_scale = TFLMoutput->params.scale;
int output_zero_point = TFLMoutput->params.zero_point;
int max_idx = 0;
float max_result = 0.0;
for (int i = 0; i < kCategoryCount; i++)
{
float current_result =
(tflite::GetTensorData<int8_t>(TFLMoutput)[i] - output_zero_point) *
output_scale;
if (current_result > max_result)
{
max_result = current_result;
max_idx = i;
}
}
if (max_result > 0.8f)
{
Serial.print("Detected ");
Serial.print(kCategoryLabels[max_idx]);
Serial.print(", score: ");
Serial.println(max_result);
// Обрабатываем голосовую команду
processVoiceCommand(max_idx, max_result);
}
// Небольшая задержка для стабильности
delay(50);
}
и чтобы не говорил, что не компилируется
Скетч использует 574758 байт (43%) памяти устройства. Всего доступно 1310720 байт.
Глобальные переменные используют 100516 байт (30%) динамической памяти, оставляя 227164 байт для локальных переменных. Максимум: 327680 байт.
Включать/выключать и регулировать громкость голосом у меня и сейчас работает через Алису. Опять оппонент пургу несёт, не понимая в чём состоит задача. Может кто то сможет объяснить ему (не хочу опускаться до его один два три в комментариях кто он) что задачу он не понял. Ну да ладно. Видно чел так мир видит. Не буду разочаровывать его в фантазиях.
я как понял с питоном он предлагает делать интернет тв… и так будет работать, и собрать относительно легко… в принципе наверное реально, только вникать надо… и может не совсем то… если вам понравился вариант с нейроинтерфесом… то возможно вам подойдет вариант с mpu6050, фишка в том что крепим на палец, или на браслет, чуть наклоняем и звук выключается,
такое предлагал использовать для протезов, парень предлагал 0 зп в месяц, 10к на датчики мышц, и 50к по факту, ну я ему и выдал результат на эти деньги)))) как же сладко он матюкался)))) и дебилом называл))) кстате 50к за результат разработки протеза не только он предлагал, я в шоке куда катиться мир… так что если это не подходит, не расстраивайтесь, и не ругайтесь, я просто предложил))))
это своеобразный вариант как жать большую кнопку))) только может чуть удобнее…
при чем тут голосом, подключаете в скетч модель по голосу определяющую рекламу, хотите через видео, в примерах есть распознавание рукописного теста 28х28 пикселей и распознавайте маркер рекламы, это библиотека для ИИ, какую модель ей зададите, то она и сделает, делайте что-нибудь уже
Видимо скучно, поговорить захотелось
Для того чтобы кинуться начинать что то делать, надо иметь инструмент, которого пока нет. И потом, уже изучать практически как подключать к вашему скетчу модели рекламные. Всё кроется в нюансах о которых вы не рассказываете, а может и сами не знаете как это делается (пока только теория) Если есть уже проект, то поделитесь. А пока в ваших словах какая то бравада сквозит (смотрите какой я великий). Заказал на всякий случай S3.
поэтому я и сказал, что модели ИИ нет, выделить сигнатуру из видео потока и по ней отработать, как делают все, значительно проще…
ua6em как бы он сейчас ругаться не начал…
доведете же человека…
самое время освоить новую Уно Q
Она появилась на Али примерно за 5-6 тыр
Там и линукс на борту, и какой-то модуль для ИИ, вроде ![]()