- PVSM.RU - https://www.pvsm.ru -
tl;dr: Adblock Radio [1] распознаёт аудиорекламу с помощью машинного обучения и Shazam-подобных техник. Основной движок с открытым исходным кодом [2]: используйте его в своих продуктах! Можно объединить усилия для поддержки большего количества радиостанций и подкастов.
Мало кому нравится слушать рекламу на радио. Я запустил проект AdblockRadio.com [3], чтобы слушатели могли пропускать рекламу на своём любимом интернет-радио. Алгоритм опубликован с открытым исходным кодом [4], а в этой статье описывается, как он работает.
Adblock Radio уже протестировали на реальных данных более 60 радиостанций в семи странах [5]. Он также совместим с подкастами и работает довольно хорошо!
По сравнению с предыдущими реализациями наш алгоритм предлагает универсальный подход, обрабатывая потоки из различных источников. Из предыдущих реализаций одна полагается на метаданные интернет-радио [6], но только небольшая часть радио совместима с этим методом. Другая реализация распознаёт известные джинглы [7], но во многих случаях начало и конец рекламных пауз не отмечены джинглом.
Помимо обнаружения рекламных роликов, предложенный алгоритм умеет отличать разговор от музыки. Поэтому он также позволяет избежать болтовни и слушать только музыку.
Это отчёт о моей личной работе почти за три года. Я запустил Adblock Radio в конце 2015 года, через несколько месяцев после окончания аспирантуры по физике термоядерной плазмы. Когда Adblock Radio приобрёл некоторую известность [8] в 2016 году, я получил угрозы от юристов из французских радиостанций (подробнее ниже). Мне пришлось частично закрыть сайт, изменить архитектуру системы, лучше изучить правовые последствия и т. д. Сегодня я считаю, что AdBlock Radio будет гораздо лучше развиваться в парадигме открытых инноваций [9].
Эта статья состоит из трёх частей. Они предназначены для разных аудиторий. Можете прокрутить вниз или щёлкнуть по названию, чтобы сразу перейти к нужному разделу.
Adblock Radio возвращает удовольствие от прослушивания радио
Чтобы заблокировать рекламу, сначала нужно её обнаружить. Цель состоит в том, чтобы обнаружить рекламу в аудиопотоке без какой-либо помощи радиостанции. Это непростая задача. Я опробовал несколько подходов, прежде чем получить хороший результат.
Первая идея в том, чтобы проверять громкость звука, потому что реклама такая громкая! Для рекламы часто используется акустическое сжатие [13]. Это интересный критерий, но его недостаточно, чтобы отличить рекламу. Например, такая стратегия довольно хорошо работает для классических музыкальных станций, где реклама обычно громче музыки. Но поп-музыка такая же громкая, как реклама. Более того, какую-то рекламу нарочно могут сделать тихой, чтобы избежать обнаружения.
Ещё одна идея заключается в том, что реклама транслируется по расписанию в конкретное время. В какой-то степени это верно, но здесь нет точности. Например, я наблюдал, как утреннее шоу [14] на французской станции не начиналось точно в одно и то же время, с вариациями до двух минут. Радиостанции могут легко обойти такую блокировку, случайным образом сдвигая свои программы на несколько десятков секунд.
Очевидное решение — полагаться на метаданные ICY/Shoutcast [15], по которым плееры вроде VLC [16] отображают информацию о потоке. К сожалению, эти данные в большинстве случаев сломаны. Можно было бы взять информацию из прямого эфира на веб-сайтах радиостанций (я разработал инструмент для этого [17]), но чаще всего реклама не идентифицируется как есть. Обычно во время рекламы на сайте отображается название предыдущей песни или программы. Одним примечательным исключением является Jazz Radio [18], которое во время рекламы пишет “la musique revient vite...” (музыка скоро вернётся). В заключение следует отметить, что это ненадёжная стратегия, поскольку радиостанции могут очень легко изменить метаданные.
В конце концов, обнаружение рекламы возможно вообще без какого-то алгоритма! Можно просто попросить некоторых слушателей нажать кнопку, когда начинается и заканчивается реклама. Другие слушатели выиграют от этого. Такова стратегия телеприставки TiVo Bolt [19]. Она позволяет удалять рекламу на установленных каналах в установленное время. Это даёт прекрасные результаты, но не очень масштабируется на тысячи радиостанций.
Недостаток в том, что трудно запустить систему с нуля. На новой станции может не хватать аудитории для правильной работы. Первые слушатели расстроятся и уйдут, так что станция никогда и не соберёт достаточно большой аудитории.
Ещё одна трудность в том, что радиостанциям захочется отправлять поддельные сигналы, чтобы саботировать систему. Тут требуется механизм модерации, система консенсуса или порог голосования.
Краудсорсинг — хорошая идея. Думаю, что она выглядит ещё лучше, если алгоритм выполнит бóльшую часть работы, оставляя минимум для людей. Это то, что я сделал.
Реклама — это всегда одна и та же тематика и лексическое поле: покупка автомобиля, получение купонов супермаркета, подписка на страховку и т. д. Если распознать речь, то можно применить стандартные инструменты для борьбы со спамом [20]. Это был мой первый путь исследования в конце 2015 года, но я не смог реализовать распознавание речи.
Будучи новичком в обработке речи, я начал с чтения «Обработки устной речи» Хуанга [21], отличной книги, хотя немного устаревшей. Я наложил свои грязные ручонки на CMU Sphinx [22], лучший на то время свободный движок для распознавания речи.
Первая попытка дала очень плохие результаты и требовала интенсивных вычислений на CPU. Я использовал параметры по умолчанию: стандартный французский словарь (список возможных слов и соответствующих фонем), языковая модель (вероятности последовательностей слов) и акустическая модель (связь фонем с формой звуковых волн).
Попытки улучшить систему оказались тщетными: распознавание всё равно работало плохо. Я настроил словарь и языковую модель на небольшом наборе данных, разделяя звук инструментом диаризации [23]. Также адаптировал акустическую модель MLLR [24] к радиостанции Europe 1 (French), на которой обучал систему.
В общем, от идеи распознавания речи пришлось отказаться. Наверное, это для экспертов. Впрочем, в будущем к ней можно вернуться. С 2015 года достигнут значительный прогресс в распознавании речи. Опубликованы новые инструменты с открытым исходным кодом, такие как Mozilla Deep Speech [25].
Первая версия [26] Adblock Radio в 2016 году работала с базой рекламных роликов. Система непрерывно прослушивала звуковой поток в поисках рекламы. Результаты были действительно многообещающими, но сложным оказалось поддержание такой базы в актуальном состоянии.
Техника поиска по звуковым отпечаткам похожа на то, что делает Shazam на своих серверах [27] для распознавания песен. Такой тип алгоритмов широко известен как landmark. Я адаптировал его для работы на потоковом вещании и открыл исходный код [28].
Фингерпринтинг подходит для обнаружения рекламных роликв, потому что они многократно транслируются в одинаковом виде. По той же причине он распознаёт и музыку. Но эта техника не будет работать на речи, потому что люди никогда не произносят слова одинаково. Это возможно только при повторной трансляции передач ночью, что нас не интересует. Таким образом, в базу отпечатков нужно вносить и рекламу, и музыку (как «не реклама»), но обрабатывать речь бессмысленно.
По сути, звуковые отпечатки — это преобразование некоторых звуковых характеристик в ряд чисел, называемых отпечатком. Если в прямом эфире много отпечатков совпадают с базой, можно сделать вывод, что передаётся реклама. Для оптимального разрешения, временного и частотного диапазона нужна некоторая настройка. Различные образцы должны хорошо различаться. Однако система должна работать даже при незначительном изменении алгоритмов сжатия звука или если радиостанция изменила настройки эквалайзера. Наконец, следует ограничить количество отпечатков, чтобы не загружать вычислительные ресурсы.
Пример расчёта звуковых отпечатков. Красный фон — спектрограмма. Она отражает изменение интенсивности звука по частоте (низкие частоты внизу). На этой карте спектральные пики идентифицируются (синие точки) и соединяются (серые линии). Положение, длина и ориентация каждой серой линии преобразуется в уникальное число, отпечаток
Двоичная классификация выдаёт результат: является образец рекламой или нет. Если анализировать случаи ошибок, то система почти всегда выдавала ложноотрицательный результат, то есть пропускала рекламу, и очень редко отмечала хороший контент как рекламу. Пользователи могут сообщать о незамеченных объявлениях одним щелчком мыши, что обеспечивает отличный пользовательский интерфейс. Соответствующий звук автоматически добавляется в БД. Я модерировал эти действия апостериори.
Было трудно поддерживать базу в актуальном состоянии, поскольку рекламные ролики часто меняются, а объявления транслируются с небольшими вариациями. Они также часто обновляются, в некоторых случаях каждые несколько дней. Некоторые потоки с недостаточным количеством слушателей очень плохо распознавались.
Я исследовал интересные стратегии для частичной автоматизации работы слушателей. Объявления одинаково транслируются много раз каждый день. Это можно использовать для их идентификации. В записях осуществлялся поиск максимально повторяющихся последовательностей (MRS). Другой контент тоже повторяется, например, песни и джинглы (заставки). Я отсортировал все последовательности по длине и взял образцы с длиной около 30 секунд, типичной для рекламных роликов. Таким образом очень часто удавалось выловить рекламу. Но иногда попадались припевы песен или даже записанные прогнозы погоды.
Я нашёл способ отфильтровать большинство музыкальных повторов: проанализировал плейлисты станций, скачал песни [29] и интегрировал их в базу с меткой «не реклама». Поэтому всё больше кандидатов в MRS оказывались реальными рекламными роликами. Но всё же не все, поэтому помощь пользователей оставалась необходимой.
Требовалось меньше ручной работы, но нагрузка на серверы уже стала проблемой. Оглядываясь назад, далеко не лучшим оказался выбор SQLite для этих ресурсоёмких, критичных по времени операций с БД.
К счастью, у алгоритма было несколько секунд, чтобы определить, является звук рекламой или нет. Это происходит потому, что интернет-радио используют аудиобуфер, обычно 4−30 секунд, который не сразу воспроизводится на устройстве конечного пользователя. Это помогает предотвратить обрывы трансляций в случае временной потери сети.
Я использовал эту задержку буфера для постпроцессинга, чтобы сделать прогнозы алгоритма более стабильными и контекстно-зависимыми. Непосредственно перед воспроизведением звука на устройстве конечного пользователя алгоритм просматривает результаты прогнозов, которые всё ещё находятся в буфере, а также более старые, которые уже воспроизведены. Он обрезает сомнительные точки данных с несколькими совпадениями отпечатков, демонстрируя гистерезис [30]. Он также учитывает средневзвешенное время, чтобы сгладить возможные сбои.
Adblock Radio на определённом этапе в 2016 году. Подсвечивание красным радиостанций, где в данный момент звучит реклама, выглядело действительно здорово! Пользователи могли отмечать пропущенную рекламу синей кнопкой. Кнопка music-in-a-cloud в верхней части позволяет экспортировать пользовательский MP3-поток с удалённой из него рекламой и, если настроена такая функция, плавными переходами между радиостанциями. Ниже представлены дополнительные кнопки и функции
Следующая версия алгоритма анализирует акустику: от низких до высоких звуков и их изменение во времени. Новые неизвестные рекламные ролики детектируются почти так же хорошо, как и старые, на которых происходило обучение, только по признакам шумности и назойливости. Это более сложный метод анализа громкости звука (см. предыдущее обсуждение).
Для этого я использовал инструменты машинного обучения, а именно библиотеку Keras [31], подключенную к Tensorflow [32]. Это дало очень хорошие результаты с малым использовании CPU. Эта версия работала в продакшне более года, с начала 2017 года до середины 2018 года. Теперь реально отличать разговоры и музыку, поэтому классификация стала более точной: вместо «реклама/не реклама» — «реклама/разговор/музыка».
Изучим детали. Звук преобразуется в 2D-карту, где интенсивность звука представлена как функция от частоты и времени (в масштабе около четырёх секунд). Эта карта концептуально похожа на красную карту в главе об отпечатках. Основное отличие в том, что вместо классического спектра Фурье я использовал Мел-кепстральные коэффициенты [33], актуальные в контексте распознавания речи.
Последовательные карты с разными метками времени затем анализировались как картинки в рекуррентной нейронной сети [34] типа LSTM [35] (long short-term memory). Каждая карта анализировалась независимо от другой (RNN без сохранения состояния), но карты перекрывали друг друга. Карты были длиной 4 секунды, и каждую секунду появлялась новая. Конечным результатом для каждой карты становился вектор softmax [36], например, ad: 72%, talk: 11%, music 17%
. Эти прогнозы затем обрабатывались тем же методом, который описан в разделе об отпечатках.
Предварительный просмотр типичных результатов машинного обучения для двух радиостанций. Горизонтальная ось представляет около 17 минут времени. Зелёная линия перемещается между тремя позициями: реклама вверху, разговор посередине и музыка внизу (самая ближняя к однородному серому фону). Красные области — интервалы прослушивания звука пользователем. Если алгоритм даёт неверный прогноз, пользователь может его исправить
Изначально я обучал нейросеть на очень маленьком наборе данных. Я разработал UI (см. рисунок выше) для визуализации прогнозов и мог бы добавить больше данных для обучения моделей с лучшей производительностью. На момент написания этой статьи обучающий набор данных содержит около десяти дней аудио: 66 часов рекламы, 96 ч разговоров и 73 ч музыки.
Несмотря на хорошую работу, точность классификации всё-таки оказалась чуть ниже ожиданий пользователей (см. ниже раздел о будущих улучшениях). При обучении точность прогноза категории составила 95%, но оставшиеся неверные классификации оставляли пользователей недовольными.
Примечание для специалистов по обработке данных: принято приводить формальные результаты, разбивая набор данных на подмножества обучения и тестирования. Думаю, что здесь это не имеет смысла, потому что набор данных постепенно выстраивается на данных, где ошибались предыдущие модели. Это означает, что набор данных содержит больше патологий, чем средняя радиопередача, и точность будет недооценена. Потребуется отдельная работа по измерению реальных показателей. Оператор может помечать непрерывные сегменты обычных аудиозаписей как тестовые данные, затем вычислить на них точность и recall. Такая регулярная проверка позволит контролировать работоспособность фильтров.
Разделение по категориям реклама/разговоры/музыка добавила слушателям удобства. Однако такая классификация усложнила пользовательский интерфейс, а с пользовательскими отчётами стало сложнее работать. Если флаг указывает, что какой-то контент не является музыкой, это реклама или разговор? Тут нужна немедленная модерация, а не постфактум.
Чтобы ещё улучшить качество, я разработал последнюю версию Adblock Radio, которая немного улучшает данную стратегию.
Мой самый лучший алгоритм опубликован на Github [2]. Для повышения надёжности он сочетает концепции из двух предыдущих попыток: акустическая классификация и база отпечатков.
Правильно обученный предиктор машинного обучения обеспечивает корректную классификацию большинства исходных материалов, но в некоторых ситуациях не работает (см. ниже в разделе о будущих улучшениях). Роль модуля сопоставления отпечатков заключается в снижении ошибок модуля машинного обучения.
В базу отпечатков заносятся не все известные обучающие данные, а только небольшое подмножество, где машинное обучение демонстрирует ошибки. Я называю её «базой хотлиста» (hotlist database). Небольшой размер помогает уменьшить общую частоту повторения ошибок, сохраняя низкой нагрузку на CPU.
На обычном ноутбуке алгоритм потребляет всего 5-10% CPU на файлах и 10-20% на прямом эфире.
Детектор неидеально работает на некоторых конкретных видах аудиоконтента:
Стабильность постобработки можно улучшить. В настоящее время используются только доверительные пороги. При достижении порогового значения берётся последний уверенный прогноз. Таким образом, система иногда сохраняет ошибку.
Циклы рекламы, разговоров и музыки довольно цикличны в каждом эфире. Например, реклама обычно длится несколько минут. Для каждого периода времени в рекламной паузе можно рассчитать вероятность перехода в другое состояние (разговор или музыка). Эта вероятность поможет лучше интерпретировать шумные предсказания алгоритма: это просто короткий сегмент музыки в объявлении или рекламный перерыв завершён? Здесь хорошим направлением исследований будут скрытые марковские модели [37].
Аналоговые сигналы (FM) не тестировались и в настоящее время не поддерживаются. Аналоговый шум аннулирует используемые здесь методы. Могут потребоваться фильтры и/или шумоустойчивые алгоритмы распознавания отпечатков. Если такое произойдёт, то программа способна найти более широкое применение у пользователей. Однако радио всё больше переходит на цифровые технологии без шума, такие как DAB [38] и интернет-радио.
В идеале Adblock Radio следует запускать только на оконечных устройствах. Но сейчас в моде облачные сервисы. Более того, это отличная бизнес-идея! Adblock Radio тестировал два варианта архитектуры с такой парадигмой. Однако опыт показывает, что это не лучший вариант по техническим и юридическим причинам.
Сервер может ретранслировать слушателям аудиоконтент с тегами ad/talk/music. Мы это тестировали в 2016 году. Тут возникают юридические проблемы, поскольку ретрансляция потока может рассматриваться как подделка и/или нарушение копирайта (хотя я не юрист). Также это плохо масштабируется, потому что теперь вы CDN и должны нести расходы.
Ради анекдота, в воскресенье, когда я отсутствовал по семейным обстоятельствам, Adblock Radio получил бешеную популярность, от которой и упал [39]. Забавный факт: через несколько дней France Inter, крупная французская общественная радиостанция, прорекламировала Adblock Radio [8] в прайм-тайм (впрочем, не называя его). Это неожиданное решение редакции в контексте того факта, что регуляторы решили в 2016 году ослабить ограничения на рекламу на государственных радиостанциях [40], что усугубило раздор между сотрудниками Radio France и руководством [41].
Спустя несколько недель я получил угрозы от адвоката французской частной радиосети Les Indés Radio [42], якобы на основании нарушения авторских прав и товарных знаков. Не имея финансовых ресурсов для серьёзной защиты, мне пришлось удалить с сайта некоторые потоки, частично закрыть сайт и изменить архитектуру системы. В то же время эта радиосеть отказалась сотрудничать в поисках компромисса. С тех я вижу в логах, что они продолжали следить за моим сайтом (иногда с псевдонимными учётными записями), ещё они консультировались со своими адвокатами [43]. Какая честь для меня! Оглядываясь назад, они успешно выиграли время, но не более того. Привет, ребята из Indés! Надеюсь, вам понравится читать это! xoxoxo [44].
Признание в любви от Les Indés, сети из 131 французской радиостанции
Здесь предполагается анализ на сервере и ретрансляция очищенного звука для конкретного пользователя. Такая система может подпадать под исключение из закона о копирайте как собственная частная копия средств массовой информации. Если сервер управляется конечным пользователем, а исходный источник легален и официально доступен в вашем регионе, вероятно, всё юридически чисто. Для дополнительной информации см. обсуждения Station Ripper [FR] [45] и VCast [FR] [46]. Но пользователи редко настолько технически подкованы, чтобы самостоятельно арендовать и установить сервер.
Очень заманчиво поставить сервер под управлением третьей стороны, но это приводит к юридическим проблемам, поскольку тогда оператор, делающий копию, и конечный пользователь не являются одним и тем же лицом. В этом случае накладываются юридические ограничения, по крайней мере, во Франции. Французский интернет-сервис Wizzgo [FR] [47] столкнулся с этим правилом в 2008 году. Совсем недавно в США телевизионный сервис Aereo [48] был закрыт, хотя принял меры предосторожности, раздав каждому клиенту отдельный тюнер [49] (!).
В данный момент сервис Molotov.TV [FR] [50] сражается с правообладателями, которые хотят ограничить его функции [FR] [51], несмотря на значительное влияние его соучредителей. Необходимо оплатить в официальную организацию налог на частную копию [FR] [52]. Сумма определяется довольно непрозрачными расчётами [FR] [53] и увеличивается [FR] [54] с каждым годом, достигая нескольких десятков евроцентов на пользователя в месяц. Эта плата стала настолько высокой, что Molotov.TV недавно удалил функции своего сервиса для бесплатных пользователей [FR] [55]. (Примечание: сердечно благодарю журналистов французского сайта NextINpact [56] за очень хорошее освещение этой темы).
Платить недостаточно: закон требует от субъектов вроде Molotov.TV подписать соглашения [FR] [57] с компаниями, обладающими авторскими правами, о функциональности своего сервиса. Попробуйте достичь соглашения с радиокомпаниями, если вы начнёте резать их рекламу.
Ещё один вариант состоит в том, чтобы и пользователь, и сервер одновременно прослушивали одно и то же интернет-радио. При этом сервер анализирует звук и отправляет пользователю классификационные метаданные (ad/talk/music), но не аудиоконтент. На такой архитектуре с 2017 года работает adblockradio.com [1]. Она опирается на CDN, так что не несёт никаких затрат в отношении трансляции аудио.
Эта архитектура снимает проблему с нарушением копирайта (дисклеймер: я не юрист). Тем не менее, всё ещё может существовать некоторая неопределённость в отношении законов о товарных знаках. Недавно (октябрь 2018 года) владельцы радио Skyrock [58] потребовали удалить контента на таком основании.
Романтическое послание от юридического отдела Skyrock
Помимо юридических соображений, есть техническая проблема правильной синхронизации между звуком и метаданными. В большинстве случаев всё работает нормально с интервалом синхронизации менее двух секунд. Но у некоторых радиостанций странные/вредоносные CDN или они динамически вводят рекламу в поток. Это означает, что потоки между сервером и разными клиентами могут значительно отличаться. Например, на Radio FG [59] наблюдались лаги до 20 секунд, а на Jazz Radio [18] — до 45 секунд. Это разочаровывает слушателей.
Синхронизацию можно жёстко внедрить сравнением блоков данных между сервером и пользователем. К сожалению, это не работает в веб-браузерах, потому что большинство CDN у интернет-радиостанций не используют заголовки CORS [60]. Поэтому JavaScript в браузере не сможет прочитать аудиоконтент для сравнения. Для работы понадобятся отдельные автономные модули (например, Electron [61]), модули Flash (ага) или веб-расширения, что кажется немного излишним.
Это проект не для конечных пользователей, а для компаний, которые выпускают массовый продукт. Вы можете сделать такой!
У разработчиков есть два варианта интеграции Adblock Radio. Во-первых, SDK [62] просто берёт метаданные с сервера adblockradio.com. Это не идеальное решение по причинам, описанным выше (юридические и проблемы синхронизации). Лучше запустить у себя полный алгоритм анализа [2].
Автомобиль — одно из самых популярных мест для прослушивания радио. Там людям реально нужен блокировщик рекламы. Но это и контекст, где реализовать Adblock Radio непросто. Ведь система должна получать обратную связь, чтобы эффективно фильтровать новую рекламу, поэтому программа нуждается в сетевом подключении. Я вижу три возможных концепции автомобильных продуктов с Adblock Radio.
У этого headless-устройства будет FM-тюнер и микрофон для анализа, какую станцию слушает пользователь (перекрёстная корреляция). Когда обнаружена реклама, устройство излучает [80] поддельные данные RDS [81] (например, дорожные объявления [82]), чтобы обмануть тюнер автомобиля и изменить станцию на время рекламы. Он также может транслировать тишину на текущей FM-частоте.
Интерфейс такого устройства очень прост, всего с несколькими кнопками. Так дешевле, чем полнофункциональный автомобильный адаптер. Однако неясно, будет ли это надёжно работать, поскольку без лицензии использование радиопередатчиков строго ограничено законом [83]. Наконец, неизвестно, можно ли адаптировать такую стратегию для работы с цифровыми потоками DAB.
Если удастся разработать дешёвое устройство, то такой продукт должен иметь коммерческий успех. Кроме того, он подходит для краудфандинга.
При интеграции Adblock Radio в продукт, пожалуйста, оставьте возможность для фидбека. О неправильных срабатываниях следует незамедлительно сообщать мне, чтобы я мог обновлять модели машинного обучения и базу хотлиста.
Отчёты просматриваются вручную: достаточно указать название радиостанции (радиостанций) и время, когда возникла проблема. В библиотеку заложен [2] механизм отправки отчётов.
Обработка отчётов отнимает время. Кроме расходов на сервер, это ещё одна причина, почему я не добавил больше радиостанций на adblockradio.com. Нужна помощь, чтобы прослушивать аудиодорожки и классифицировать контент в админском веб-интерфейсе. Благодаря этому мы сможем увеличить количество радиостанций и обеспечить поддержку подкастов. Если вы готовы помочь, пожалуйста, зарегистрируйтесь здесь [3] и следите за репозиторием [84], где будет проходить обсуждение поддерживаемых потоков.
Пропуск рекламы в подкасте тривиален: с точки зрения слушателя это как пропуск части песни. К сожалению, для радио так не работает. В прямом эфире мы не можем сделать перемотку вперёд!
Сейчас adblockradio.com предлагает три варианта фильтрации:
Я изо всех старался сделать максимально удобно, но система по-прежнему сложная. Не такая простая, как обычное радио или блокировщик рекламы на компьютере, который можно установить и забыть. Очень рассчитываю на помощь коллективного разума.
Текущий веб-интерфейс [3] Adblock Radio
Прежний прототип, который так и не вышел. Здесь у пользователя абсолютно полная свобода настроек. Только разговорные передачи с одной станции, только музыка с другой и т. д. Но тестеры так запутались! Оглядываясь назад, даже мне этот интерфейс с трудом понятен
Мне кажется интересным ещё один способ прослушивания контента. Я не мог реализовать его на adblockradio.com по юридическим причинам, указанным выше. Вместо этого я сделал автономный десктопный плеер (также доступный на Github [85]), в духе цифровых видеомагнитофонов [86]. Пользователи начинают слушать с сдвигом во времени около 10 минут (то есть, к примеру, в 7.30 утра начинают слушать аудиотрансляцию от 7.20). На каждой рекламной паузе происходит быстрая перемотка вперёд — и можно наслаждаться своей программой без перерывов. При типичном количестве рекламы десятиминутный сдвиг позволяет слушать радио без перерыва в течение часа или двух. В случае мобильного приложения этого бы хватило, чтобы доехать на работу.
Когда пользователь включает устройство, ему нужно доставить трансляцию десятиминутной давности. Как это сделать в контексте мобильности, с ограничениями по объёму энергии и данных? Обратите внимание, что закон запрещает нелицензированным третьим лицам (в облаке) транслировать радиозаписи.
Рабочий прототип [85] радиоплеера со сдвигом во времени. Аудиоблоки классифицируются по сегментам. Музыка синего цвета, разговоры зелёного, а реклама — красного. Когда розовый курсор достигает красной зоны (ads), то пропускает её
В долгосрочной перспективе система может принимать в себя широковещательный контент со всех станций — и полностью настраивать его в соответствии со вкусами каждого слушателя. Транслировать любимые передачи, музыку по вкусу пользователя, вставлять подкасты и т. д. По-моему, для такой «спотификации» оптимально подходит контент в прямом эфире, который трудно отложить и загрузить позднее: спортивные события, новости, прогноз погоды, живая музыка и т. д. Возможно, это станет альтернативной бизнес-моделью для радио [87].
Техническое решение для блокировки рекламы на радио и в подкастах оказалось более сложным, чем хотелось бы. Модели необходимо периодически обновлять с учётом новых роликов. Это значит, что система должна использоваться в устройствах, подключённых к интернету, таких как смартфоны и WiFi-радио. Сервис пока не подходит для обычных автономных радиоприёмников (FM, DAB+). К счастью, с повсеместным распространением мобильной связи люди меняют свои привычки, так что в будущем блокировка рекламы должна стать проще.
Вы можете помочь развитию Adblock Radio.
В будущем аудиореклама останется лишь в далёких воспоминаниях! Спасибо, что прочитали.
Автор: m1rko
Источник [89]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/kopirajt/304941
Ссылки в тексте:
[1] Adblock Radio: https://www.adblockradio.com/
[2] открытым исходным кодом: https://github.com/adblockradio/adblockradio
[3] AdblockRadio.com: https://www.adblockradio.com/player
[4] открытым исходным кодом: https://github.com/dest4/adblockradio
[5] более 60 радиостанций в семи странах: https://github.com/adblockradio/available-models/
[6] полагается на метаданные интернет-радио: https://github.com/quasoft/adblockradio
[7] распознаёт известные джинглы: https://blog.rekawek.eu/2016/02/24/radio-adblock/
[8] приобрёл некоторую известность: https://www.adblockradio.com/blog/2016/10/14/ils-parlent-dadblock-radio/
[9] открытых инноваций: https://en.wikipedia.org/wiki/Open_innovation
[10] Обнаружение рекламы: опробованные стратегии: #1
[11] Не рекомендуется запускать Adblock Radio в облаке: #2
[12] Можете интегрировать Adblock Radio в свой плеер: #3
[13] акустическое сжатие: https://en.wikipedia.org/wiki/Loudness_war
[14] утреннее шоу: http://www.europe1.fr/emissions/la-revue-de-presque-de-nicolas-canteloup
[15] метаданные ICY/Shoutcast: http://www.smackfu.com/stuff/programming/shoutcast.html
[16] VLC: https://www.videolan.org/
[17] инструмент для этого: https://github.com/adblockradio/webradio-metadata
[18] Jazz Radio: http://www.jazzradio.fr/
[19] TiVo Bolt: https://www.engadget.com/2015/09/30/tivo-bolt-4k-commercial-skipmode/
[20] инструменты для борьбы со спамом: https://spamassassin.apache.org/
[21] «Обработки устной речи» Хуанга: https://dl.acm.org/citation.cfm?id=560905
[22] CMU Sphinx: https://cmusphinx.github.io/
[23] инструментом диаризации: http://www-lium.univ-lemans.fr/diarization/doku.php/Welcome
[24] адаптировал акустическую модель MLLR: https://cmusphinx.github.io/wiki/tutorialadapt
[25] Mozilla Deep Speech: https://github.com/mozilla/DeepSpeech
[26] Первая версия: https://twitter.com/PierreCol/status/784851362207137792
[27] что делает Shazam на своих серверах: https://www.ee.columbia.edu/~dpwe/papers/Wang03-shazam.pdf
[28] открыл исходный код: https://github.com/adblockradio/stream-audio-fingerprint
[29] проанализировал плейлисты станций, скачал песни: https://github.com/dest4/radio-playlist-generator
[30] гистерезис: https://en.wikipedia.org/wiki/Hysteresis
[31] Keras: https://keras.io/
[32] Tensorflow: https://www.tensorflow.org/
[33] Мел-кепстральные коэффициенты: https://en.wikipedia.org/wiki/Mel-frequency_cepstrum
[34] рекуррентной нейронной сети: https://en.wikipedia.org/wiki/Recurrent_neural_network
[35] LSTM: https://en.wikipedia.org/wiki/Long_short-term_memory
[36] softmax: https://en.wikipedia.org/wiki/Softmax_function
[37] скрытые марковские модели: https://en.wikipedia.org/wiki/Hidden_Markov_model
[38] DAB: https://en.wikipedia.org/wiki/Digital_audio_broadcasting
[39] от которой и упал: https://en.wikipedia.org/wiki/Slashdot_effect
[40] ослабить ограничения на рекламу на государственных радиостанциях: https://www.radiofrance.fr/espace-pro/espace-presse/communiques-de-presse/2016/04/nouveau-decret-relatif-la-publicite-sur-radio
[41] раздор между сотрудниками Radio France и руководством: http://www.lepoint.fr/medias/les-antennes-de-radio-france-perturbees-par-la-greve-29-06-2016-2050464_260.php
[42] Les Indés Radio: https://en.wikipedia.org/wiki/Les_Ind%C3%A9s_Radios
[43] своими адвокатами: http://oxavocats.com/
[44] xoxoxo: https://www.youtube.com/watch?v=dQw4w9WgXcQ
[45] Station Ripper [FR]: http://www.feral-avocats.com/fr/publication/stream-ripping-la-question-de-la-liceite-de-la-copie-privee-a-lere-du-streaming-reste-posee/
[46] VCast [FR]: https://www.nextinpact.com/news/105549-lextension-copie-privee-dans-cloud-entre-mains-justice-europeenne.htm
[47] Wizzgo [FR]: https://fr.wikipedia.org/wiki/Wizzgo
[48] Aereo: https://en.wikipedia.org/wiki/Aereo
[49] каждому клиенту отдельный тюнер: http://www.worldtvpc.com/blog/aereo-plan-service-york/
[50] Molotov.TV [FR]: https://fr.wikipedia.org/wiki/Molotov_TV
[51] ограничить его функции [FR]: https://www.nextinpact.com/news/106506-bras-fer-entre-molotov-tf1-et-m6-pourquoi-nous-saisissons-hadopi.htm
[52] оплатить в официальную организацию налог на частную копию [FR]: https://www.legifrance.gouv.fr/affichCodeArticle.do?cidTexte=LEGITEXT000006069414&idArticle=LEGIARTI000006279076&dateTexte=&categorieLien=cid
[53] довольно непрозрачными расчётами [FR]: https://www.nextinpact.com/news/106731-copie-privee-bareme-molotov-sera-determine-sans-marche-public.htm
[54] увеличивается [FR]: https://www.nextinpact.com/news/106730-copie-privee-stream-ripping-prochaine-mine-dor-ayants-droit.htm
[55] удалил функции своего сервиса для бесплатных пользователей [FR]: https://www.nextinpact.com/news/106899-copie-privee-trop-chere-fin-bookmarks-sur-abonnements-molotovgratuits.htm
[56] NextINpact: https://www.nextinpact.com/
[57] подписать соглашения [FR]: https://www.legifrance.gouv.fr/affichCodeArticle.do?cidTexte=LEGITEXT000006069414&idArticle=LEGIARTI000020740176
[58] Skyrock: https://skyrock.fm/
[59] Radio FG: https://www.radiofg.com/
[60] заголовки CORS: https://en.wikipedia.org/wiki/Cross-origin_resource_sharing
[61] Electron: https://electronjs.org/
[62] SDK: https://github.com/adblockradio/adblockradio-sdk
[63] Tensorflow Lite для Android и iOS: https://www.tensorflow.org/lite/
[64] плагина React Native: https://www.npmjs.com/package/nodejs-mobile-react-native
[65] Termux: https://termux.com/
[66] Tensorflow JS: https://js.tensorflow.org/
[67] SQL.js: https://github.com/kripken/sql.js/
[68] TuneIn: https://tunein.com/
[69] Radio.de: http://www.radio.de/
[70] Raspbian: https://www.tensorflow.org/install/install_raspbian
[71] Sonos: https://musicpartners.sonos.com/?q=docs
[72] Apple Car Play: https://www.apple.com/ios/carplay/
[73] Android Auto: https://www.android.com/auto/
[74] MirrorLink: https://mirrorlink.com/
[75] DAB-адаптерам для автомобилей: https://www.autoexpress.co.uk/accessories-tyres/88304/best-dab-car-radio-adaptors-2018-group-test
[76] старые адаптеры iPod FM: https://duckduckgo.com/?q=ipod+fm+adapter&t=ffsb&iar=images&iax=images&ia=images
[77] Sigfox: https://www.sigfox.com/en
[78] LoRa: https://lora-alliance.org/
[79] переключатели на рулевом колесе: https://tacotunes.com/toyota-tacoma-double-access-cab-xrunner/how-to-install-steering-wheel-controls-to-work-with-new-stereo/
[80] излучает: https://www.adafruit.com/product/1958
[81] RDS: https://en.wikipedia.org/wiki/Radio_Data_System
[82] дорожные объявления: https://en.wikipedia.org/wiki/Traffic_announcement_(radio_data_systems)
[83] использование радиопередатчиков строго ограничено законом: https://en.wikipedia.org/wiki/Unlicensed_broadcasting
[84] репозиторием: https://github.com/adblockradio/available-models
[85] также доступный на Github: https://github.com/adblockradio/buffer-player
[86] цифровых видеомагнитофонов: https://en.wikipedia.org/wiki/Digital_video_recorder
[87] альтернативной бизнес-моделью для радио: https://www.adblockradio.com/blog/2018/07/25/better-radio-without-ads/
[88] репозиторий: https://github.com/adblockradio/adblockradio/
[89] Источник: https://habr.com/post/435720/?utm_source=habrahabr&utm_medium=rss&utm_campaign=435720
Нажмите здесь для печати.