Eine Bibliothek, um Anzeigen in Live -Radio -Streams und Podcasts zu blockieren. Maschinelles Lernen trifft Shazam.
Motor von adblockRadio.com. Demo Standalone Player hier verfügbar.
Status erstellen:
Helfen Sie dem Projekt zu wachsen:
Hier finden Sie eine technische Diskussion.
Radio-Streams werden in predictor.js mit dem Modul AdblockRadio/Stream-Tirslosen-Baler heruntergeladen. Podcasts werden in predictor-file.js heruntergeladen.
In beiden Fällen wird Audio dann mit ffmpeg in einkanales, 22050 Hz PCM entschlüsselt.
Brocken von etwa einer Sekunde PCM-Audio werden in zwei Submodules geleitet:
predictor-ml/ml.js ), der spektrale Inhalte mit einem neuronalen Netzwerk analysiert.predictor-db/hotlist.js ), der nach genauen Ereignissen bekannter Anzeigen, Musik oder Jingles sucht. In post-processing.js werden die Ergebnisse für jedes Audiosegment gesammelt und gereinigt.
Eine lesbare Schnittstelle, Analyser , ist dem Endbenutzer ausgesetzt. Es streams Objekte, die das Audio selbst und alle Analyseergebnisse enthalten.
Bei einer regulären Laptop-CPU und dem Python-Zeitfrequenzanalysator werden die Berechnungen bei 5-10x für Dateien und bei 10-20% verwendet.
Sie benötigen node.js (> = v10.12.x, aber <11) und npm. Laden Sie es hier herunter. Pro-Tip: Verwenden Sie NVM, um mehrere Knotenversionen auf Ihrer Plattform zu verwalten.
Auf Debian Stretch:
apt-get install -y git ssh tar gzip ca-certificates build-essential sqlite3 ffmpegHinweis: Arbeitet an Jessie, aber die Installation von FFMPEG ist etwas schmerzhaft. Siehe hier und da.
Für die beste Leistung (~ 2x Beschleunigung) sollten Sie einen Teil der Berechnungen mit Python durchführen. Zusätzliche Voraussetzungen sind Folgendes: Python (getestet mit V2.7.9), Keras (getestet mit V2.0.8) und Tensorflow (getestet mit CPU V1.4.0 und GPU V1.3.0).
Auf Debian:
apt-get install python-dev portaudio19-dev
pip install python_speech_features h5py numpy scipy keras tensorflow zerorpc sounddevice psutilHINWEIS: Wenn Sie keine PIP haben, befolgen Sie diese Anweisungen, um diese zu installieren.
git clone https://github.com/adblockradio/adblockradio.git
cd adblockradio
npm installValidieren Sie Ihre Installation mit der Testsuite:
npm test
Bei Startup und regelmäßig während der Laufzeit werden Filterkonfigurationsdateien automatisch von adblockRadio.com/models/ aktualisiert:
model.keras oder model.json + group1-shard1of1 ) für den Zeitfrequenzanalysator.hotlist.sqlite ) für den Fingerabdruck -Match. Führen Sie die Demo auf dem französischen RTL Live -Radio -Stream aus:
node demo.jsHier ist eine Beispielausgabe des Demo -Skripts, das eine angegebene Anzeige zeigt:
{
"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": ...
}
Es ist auch möglich, Radioaufnahmen zu analysieren. Führen Sie die Demo mit einer Aufnahme von französischem RTL -Radio durch, einschließlich Anzeigen, Gespräch und Musik:
node demo-file.jsDie allmählichen Ausgaben ähneln denen der Live -Stream -Analyse. Eine zusätzliche Nachbearbeitungspezifikation für Aufnahmen verbirgt die Unsicherheiten in Vorhersagen und zeigt große Stücke für jede Klasse mit Zeitstempeln in Millisekunden, wodurch es für das Schneiden bereit ist.
[
{
"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
}
]
Beachten Sie, dass Sie bei der Analyse von Audiodateien weiterhin den Namen eines Funkstreams angeben müssen, da der Algorithmus akustische Parameter und dB bekannte Proben laden muss. Die Analyse von Podcasts, die nicht an ein Radio gebunden sind, wird noch nicht unterstützt, kann jedoch möglicherweise in Zukunft sein.
Unten finden Sie ein einfaches Nutzungsbeispiel. In den Tests sind gründlichste Beispiele verfügbar:
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 ) {
...
} ) ;| Eigentum | Beschreibung | Standard |
|---|---|---|
country | Country of the Radio Stream nach Radio-Browser.info | Keiner |
name | Name des Funkstreams nach Radio-Browser.info | Keiner |
file | Datei zu analysieren (optional, ansonsten den Live -Stream analysieren) | Keiner |
Akustisches Modell und Hotlist -Dateien werden beim Start automatisch aktualisiert. Wenn Sie das Algo für lange Zeit kontinuierlich ausführen möchten, können Sie manuelle Aktualisierungen auslösen. Beachten Sie, dass diese Methoden nur im Live -Stream -Analysemodus verfügbar sind.
| Verfahren | Parameter | Beschreibung |
|---|---|---|
refreshPredictorMl | Keiner | Aktualisieren Sie das ML -Modell manuell (nur Live -Stream) |
refreshPredictorHotlist | Keiner | Aktualisieren Sie die Hotlist DB manuell (nur Live -Stream) |
refreshMetadata | Keiner | Erfrischen Sie den Metadatenschaber manuell (nur Live -Stream) |
stopDl | Keiner | Stoppen Sie Adblock Radio (nur Live -Stream) |
Die mit A * gekennzeichneten Eigenschaften sollen nur mit Live -Funkstromanalyse verwendet werden, nicht mit der Dateianalyse, in der sie ignoriert werden.
| Eigentum | Beschreibung | Standard |
|---|---|---|
predInterval | Senden Sie den Stream -Status alle n Sekunden an den Hörer | 1 |
saveDuration* | Wenn Sie aktiviert sind, speichern Sie die Audiodatei und Metadaten in jeder N predInterval | 10 |
modelUpdatesInterval | Wenn aktiviert, aktualisieren Sie Modelldateien alle n Minuten | 60 |
| Eigentum | Beschreibung | Periodizität | Standard |
|---|---|---|---|
enablePredictorMl | Führen Sie maschinelles Lerneninferenz durch | predInterval | true |
JSPredictorMl | Verwenden Sie TFJs anstelle von Python für ML -Inferenz (langsamer) | false | |
enablePredictorHotlist | Berechnen Sie Audiofingerabdrücke und suchen Sie sie in einem DB | predInterval | true |
saveAudio* | Speichern Sie Stream -Audiodaten in Segmenten auf der Festplatte | saveDuration | true |
saveMetadata | Speichern Sie einen JSON mit Vorhersagen | saveDuration | true |
fetchMetadata* | Sammeln Sie Metadaten von Radio -Websites | saveDuration | true |
modelUpdates | Halten Sie ML und HotList -Dateien auf dem neuesten Stand | modelUpdatesInterval | true |
| Eigentum | Beschreibung | Standard |
|---|---|---|
modelPath | Verzeichnis, in dem ML -Modelle und Hotlist DBs gespeichert werden | process.cwd() + '/model' |
modelFile | Pfad der ML -Datei im Vergleich zum modelPath | country + '_' + name + '/model.keras' |
hotlistFile | Pfad der Hotlist DB relativ zum modelPath | country + '_' + name + '/hotlist.sqlite' |
saveAudioPath* | Root -Ordner, in dem Audio und Metadaten gespeichert werden | process.cwd() + '/records' |
Mit Analyser konstruierte lesbare Streams emittieren Objekte mit den folgenden Eigenschaften. Einige Eigenschaften sind nur bei Live -Radioanalysen verfügbar. Sie sind mit einem * gekennzeichnet. Andere spezifische für die Dateianalyse sind mit ** gekennzeichnet.
audio* : Puffer mit einem Stück Original -Audiodaten (komprimiert).
ml : null , wenn nicht verfügbar, sonst ein Objekt, das die Ergebnisse des Zeitfrequenzanalysators enthält
softmaxraw : Eine Reihe von drei Zahlen, die die Softmax zwischen Anzeigen, Sprache und Musik darstellen.softmax : Wie Softmaxraw, aber in Zukunft mit slotsFuture -Datenpunkten und slotsPast -Datenpunkten in der Vergangenheit geglättet. Glättungsgewichte werden durch consts.MOV_AVG_WEIGHTS in post-processing.js definiert.class : Entweder 0-ads , 1-speech , 2-music oder 9-unsure . Die Klassifizierung nach softmax . hotlist : NULL, wenn nicht verfügbar, sonst ein Objekt, das die Ergebnisse des Fingerabdrucks enthält.
file : Wenn die Klasse nicht "9-Unsure" ist, ist die Referenz der Datei erkannt.total : Anzahl der Fingerabdrücke, die für das angegebene Audiosegment berechnet wurden.matches : Anzahl der passenden Fingerabdrücke zwischen dem Audiosegment und der Fingerabdruck -Datenbank.class : Entweder 0-ads , 1-speech , 2-music , 3-jingles oder 9-unsure wenn nicht genügend Übereinstimmungen gefunden wurden. class : Abschließende Vorhersage des Algorithmus. Entweder 0-ads , 1-speech , 2-music , 3-jingles oder 9-unsure .
metadata* : Live-Metadaten, abgerufen und analysiert vom Modul AdblockRadio/Webadio-Metadata.
streamInfo* : Statische Metadaten über den Strom. Enthält Stream url , favicon , bitrate in Bytes / s, Audio -Dateien -Erweiterungs audioExt ( mp3 oder aac ) und homepage -URL.
gain : Ein DB -Wert, der das durchschnittliche Volumen des Streams darstellt. Nützlich, wenn Sie die Wiedergabevolumen normalisieren möchten. Berechnet von mlpredict.py .
tBuffer* : Sekunden von Audiopuffer. Berechnet durch AdblockRadio/Stream-Tirto-Baler.
predictorStartTime* : Zeitstempel des Algorithmus -Startups. Nützlich, um die Verfügbarkeit zu bekommen.
playTime* : Ungefähr Zeitstempel des gegebenen Audios, der gespielt werden soll. TODO Überprüfen Sie das.
tStart** : Untergrenze des Zeitintervalls verbunden mit der Vorhersage (in Millisekunden)
tEnd** : Obergrenze des Zeitintervalls verbunden mit der Vorhersage (in Millisekunden)
Die Liste der unterstützten Radios ist hier verfügbar.
Die Integrationen dieses Moduls sind willkommen. Vorschläge sind hier verfügbar.
Ein eigenständiger Demo -Player für Webbrowser ist hier verfügbar.
Siehe Lizenzdatei.
Ihr Beitrag zu diesem Projekt ist willkommen, könnte jedoch einer Lizenzvereinbarung eines Mitwirkenden unterliegen.