Библиотека для блокировки рекламы на радиочастотах и подкастах. Машинное обучение встречает Шазама.
Двигатель adblockradio.com. Демонстрационный автономный игрок доступен здесь.
Статус сборки:
Помогите проекту расти:
Техническое обсуждение доступно здесь.
Радиотехты загружаются в predictor.js с модулем Adblockradio/Stream-Teless-Baler. Подкасты загружаются в predictor-file.js .
В обоих случаях звук затем декодируется в одноканальный, 22050 Hz ПКМ с ffmpeg .
Куски около одной секунды от аудио PCM переводятся в два подмодуля:
predictor-ml/ml.js ), который анализирует спектральное содержание с нейронной сетью.predictor-db/hotlist.js ), который ищет точные случаи известных рекламных объявлений, музыки или джинглов. В post-processing.js .
Читаемый интерфейс, Analyser , подвергается воздействию конечного пользователя. Он транслирует объекты, содержащие сам звук и все результаты анализа.
На регулярном процессоре ноутбука и с частотным анализатором Python вычисления работают в 5-10x для файлов и при использовании 10-20% для Live Stream.
Вам нужен node.js (> = v10.12.x, но <11) и NPM. Загрузите его здесь. Pro-Tip: Чтобы управлять несколькими версиями узла на вашей платформе, используйте NVM.
На Debian Stretch:
apt-get install -y git ssh tar gzip ca-certificates build-essential sqlite3 ffmpegПримечание: работает над Джесси, но установка FFMPEG немного болезненна. Смотрите здесь и там.
Для достижения наилучшей производительности (~ 2x ускорения) вы должны выбрать часть вычислений с Python. Дополнительные предпосылки являются следующими: Python (протестирован с помощью V2.7.9), керас (протестированные с помощью v2.0.8) и tensorflow (протестировано с помощью CPU V1.4.0 и GPU V1.3.0).
На Debian:
apt-get install python-dev portaudio19-dev
pip install python_speech_features h5py numpy scipy keras tensorflow zerorpc sounddevice psutilПримечание. Если у вас нет PIP, следуйте этим инструкциям, чтобы установить его.
git clone https://github.com/adblockradio/adblockradio.git
cd adblockradio
npm installПроверить свою установку с помощью тестового набора:
npm test
При запуске и периодически во время выполнения файлы конфигурации фильтра автоматически обновляются с adblockradio.com/models/:
model.keras или model.json + group1-shard1of1 ), для частотно-временного анализатора.hotlist.sqlite ), для сопоставления отпечатков пальцев. Запустите демонстрацию на французском RTL Live Radio Stream:
node demo.jsВот пример вывода демонстрационного скрипта, показывающий обнаруженную рекламу:
{
"gain": 74.63,
"ml": {
"class": "0-ads",
"softmaxraw": [
0.996,
0.004,
0
],
"softmax": [
0.941,
0.02,
0.039
],
"slotsFuture": 4,
"slotsPast": 5
},
"hotlist": {
"class": "9-unsure",
"file": null,
"matches": 1,
"total": 7
},
"class": "0-ads",
"metadata": {
"artist": "Laurent Ruquier",
"title": "L'été des Grosses Têtes",
"cover": "https://cdn-media.rtl.fr/cache/wQofzw9SfgHNHF1rqJA3lQ/60v73-2/online/image/2014/0807/7773631957_laurent-ruquier.jpg"
},
"streamInfo": {
"url": "http://streaming.radio.rtl.fr/rtl-1-44-128",
"favicon": "https://cdn-static.rtl.fr/versions/www/6.0.637/img/apple-touch-icon.png",
"homepage": "http://www.rtl.fr/",
"audioExt": "mp3"
},
"predictorStartTime": 1531150137583,
"playTime": 1531150155250,
"tBuffer": 15.98,
"audio": ...
}
Также возможно проанализировать записи радио. Запустите демонстрацию по записи французского RTL Radio, включая рекламу, разговор и музыку:
node demo-file.jsПостепенные результаты аналогичны анализам в прямом эфире. Дополнительная пост-обработка, специфичная для записей, скрывает неопределенности в прогнозах и показывает большие куски для каждого класса, с марками времени в миллисекундах, что готовит его к нарезку.
[
{
"class": "1-speech",
"tStart": 0,
"tEnd": 58500
},
{
"class": "0-ads",
"tStart": 58500,
"tEnd": 125500
},
{
"class": "1-speech",
"tStart": 125500,
"tEnd": 218000
},
{
"class": "2-music",
"tStart": 218000,
"tEnd": 250500
},
{
"class": "1-speech",
"tStart": 250500,
"tEnd": 472949
}
]
Обратите внимание, что при анализе аудиофайлов вам все равно необходимо предоставить имя радиочастота, потому что алгоритм должен загружать акустические параметры и дБ известных образцов. Анализ подкастов, не связанных с радио, еще не поддерживается, но, возможно, может быть в будущем.
Ниже приведен простой пример использования. В тестах доступны более тщательные примеры использования:
test/file.jstest/online.jstest/offline.js const { Analyser } = require ( "adblockradio" ) ;
const abr = new Analyser ( {
country : "France" ,
name : "RTL" ,
config : {
...
}
} ) ;
abr . on ( "data" , function ( obj ) {
...
} ) ;| Свойство | Описание | По умолчанию |
|---|---|---|
country | Страна радиочастота в соответствии с Radio-browser.info | Никто |
name | Название радиочастота в соответствии с Radio-browser.info | Никто |
file | Файл для анализа (необязательно, иначе проанализируйте прямую трансляцию) | Никто |
Акустическая модель и файлы горячего списка автоматически обновляются при запуске. Если вы планируете постоянно запускать алго в течение длительного времени, вы можете запустить ручные обновления. Обратите внимание, что эти методы доступны только в режиме анализа в прямом эфире.
| Метод | Параметры | Описание |
|---|---|---|
refreshPredictorMl | Никто | Вручную обновить модель ML (только в прямом эфире) |
refreshPredictorHotlist | Никто | Вручную обновить Hotlist DB (только в прямом эфире) |
refreshMetadata | Никто | Вручную обновить скребок метаданных (только в прямом эфире) |
stopDl | Никто | Остановите Adblock Radio (только в прямом эфире) |
Свойства, помеченные * , предназначены для использования только с анализом радиочастота, а не анализом файлов, где они игнорируются.
| Свойство | Описание | По умолчанию |
|---|---|---|
predInterval | Отправить статус потока слушателю каждые n секунд | 1 |
saveDuration* | Если включено, сохраняйте аудиофайл и метаданные каждые время N predInterval | 10 |
modelUpdatesInterval | Если включено, обновляйте файлы модели каждые n минут | 60 |
| Свойство | Описание | Периодичность | По умолчанию |
|---|---|---|---|
enablePredictorMl | Выполнить вывод машинного обучения | predInterval | true |
JSPredictorMl | Используйте TFJS вместо Python для вывода ML (медленнее) | false | |
enablePredictorHotlist | Вычислить отпечатки аудио пальцев и ищите их в БД | predInterval | true |
saveAudio* | Сохранить аудиоданные потока в сегментах на жестком диске | saveDuration | true |
saveMetadata | Сохраните JSON с прогнозами | saveDuration | true |
fetchMetadata* | Соберите метаданные с радио -сайтов | saveDuration | true |
modelUpdates | Держите ML и Hotlist в курсе | modelUpdatesInterval | true |
| Свойство | Описание | По умолчанию |
|---|---|---|
modelPath | Каталог, где хранятся модели ML и Hotlist DBS | process.cwd() + '/model' |
modelFile | Путь ML -файла по сравнению с modelPath | country + '_' + name + '/model.keras' |
hotlistFile | Путь горячего списка DB по сравнению с modelPath | country + '_' + name + '/hotlist.sqlite' |
saveAudioPath* | Корневая папка, где сохранены аудио и метаданные | process.cwd() + '/records' |
Читаемые потоки, построенные с Analyser Emit -объектами со следующими свойствами. Некоторые свойства доступны только при анализе в прямом эфире. Они отмечены * . Другие специфичные для анализа файлов отмечены ** .
audio* : буфер, содержащий кусок оригинальных (сжатых) аудиоданных.
ml : null если не доступно, в противном случае объект, содержащий результаты частотно-временного анализатора
softmaxraw : массив из трех чисел, представляющих Softmax между рекламой, речью и музыкой.softmax : То же, что и SoftmaxRaw, но во времени сглажен с точками данных slotsFuture в будущем и точками данных slotsPast в прошлом. Веса сглаживания определяются consts.MOV_AVG_WEIGHTS в post-processing.js .class : либо 0-ads , 1-speech , 2-music или 9-unsure . Классификация в соответствии с softmax . hotlist : Null, если нет, в противном случае объект, содержащий результаты сопоставления отпечатков пальцев.
file : Если класс не является «9-Unsure», ссылка на распознанный файл.total : количество отпечатков пальцев, рассчитанных для данного аудио -сегмента.matches : количество соответствующих отпечатков пальцев между сегментом аудио и базой данных отпечатков пальцев.class : либо 0-ads , 1-speech , 2-music , 3-jingles , или 9-unsure , если не было достаточно совпадений. class : Окончательный прогноз алгоритма. Либо 0-ads , 1-speech , 2-music , 3-jingles или 9-unsure .
metadata* : живые метаданные, полученные и анализируемые модулем adblockradio/webradio-metadata.
streamInfo* : статические метаданные о потоке. Содержит потоковой url , favicon , bitrate In Bytes / S, аудиофайлы расширения audioExt ( mp3 или aac ) и URL -адреса homepage .
gain : значение DB, представляющее средний объем потока. Полезно, если вы хотите нормализовать громкость воспроизведения. Рассчитано mlpredict.py .
tBuffer* : секунды аудио буфера. Рассчитано Adblockradio/Stream-Teless-Baler.
predictorStartTime* : TimeStamp Algorithm Startup. Полезно, чтобы получить время работы.
playTime* : приблизительная метка времени, когда должна быть воспроизведена данная аудио. Тодо проверить это.
tStart** : Нижняя граница временного интервала, связанная с прогнозом (в миллисекундах)
tEnd** : верхняя граница временного интервала, связанная с прогнозом (в миллисекундах)
Список поддерживаемых радиоприемников доступен здесь.
Интеграции этого модуля приветствуются. Предложения доступны здесь.
Здесь доступен отдельный демонстрационный игрок для веб -браузеров.
См. Файл лицензии.
Ваш вклад в этот проект приветствуется, но может быть подлежит лицензионному соглашению о участнике.