ライブラジオストリームやポッドキャストの広告をブロックするライブラリ。機械学習はShazamに会います。
adblockradio.comのエンジン。ここでデモスタンドアロンプレーヤーが入手可能です。
ステータスの構築:
プロジェクトの成長を支援します:
技術的な議論はこちらから入手できます。
ラジオストリームは、モジュールAdBlockRadio/Stream-Tireless-Balerを使用してpredictor.jsでダウンロードされます。ポッドキャストはpredictor-file.jsでダウンロードされます。
どちらの場合も、オーディオはffmpegを使用してシングルチャネル、 22050 Hz PCMにデコードされます。
PCMオーディオの約1秒のチャンクは、2つのサブモジュールに配管されています。
predictor-ml/ml.js )。predictor-db/hotlist.js )。 post-processing.jsでは、各オーディオセグメントの結果が収集され、クリーニングされます。
読みやすいインターフェイスであるAnalyserがエンドユーザーにさらされます。オーディオ自体とすべての分析結果を含むオブジェクトをストリーミングします。
通常のラップトップCPUおよびPython時間周波数アナライザーを使用して、ファイルの場合は5〜10倍、ライブストリームでは10〜20%の使用量で計算が実行されます。
node.js(> = v10.12.x、<11)およびnpmが必要です。ここからダウンロードしてください。 Pro-Tip:プラットフォーム上のいくつかのノードバージョンを管理するには、NVMを使用します。
Debianストレッチ:
apt-get install -y git ssh tar gzip ca-certificates build-essential sqlite3 ffmpeg注:Jessieで動作しますが、FFMPEGをインストールするのは少し苦痛です。あちこちを参照してください。
最高のパフォーマンス(〜2倍のスピードアップ)には、Pythonで計算の一部を実行することを選択する必要があります。追加の前提条件は次のとおりです。Python(V2.7.9でテスト)、Keras(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ライブラジオストリームでデモを実行します:
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ラジオの録音でデモを実行します。
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
}
]
オーディオファイルを分析する場合、アルゴリズムは既知のサンプルのアコースティックパラメーターとDBをロードする必要があるため、ラジオストリームの名前を提供する必要があることに注意してください。ラジオに結び付けられていないポッドキャストの分析はまだサポートされていませんが、将来的にはサポートされている可能性があります。
以下は簡単な使用例です。より徹底的な使用例をテストで利用できます。
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 | なし | ホットリストDB(ライブストリームのみ)を手動で更新する |
refreshMetadata | なし | メタデータスクレーパーを手動で更新します(ライブストリームのみ) |
stopDl | なし | adblockラジオを停止する(ライブストリームのみ) |
A *でマークされたプロパティは、無視されているファイル分析ではなく、ライブ無線ストリーム分析でのみ使用することを目的としています。
| 財産 | 説明 | デフォルト |
|---|---|---|
predInterval | N秒ごとにストリームステータスをリスナーに送信します | 1 |
saveDuration* | 有効にする場合は、nectio predInterval時間ごとにオーディオファイルとメタデータを保存します | 10 |
modelUpdatesInterval | 有効にする場合は、N分ごとにモデルファイルを更新します | 60 |
| 財産 | 説明 | 周期性 | デフォルト |
|---|---|---|---|
enablePredictorMl | 機械学習の推論を実行します | predInterval | true |
JSPredictorMl | ML推論にはPythonの代わりにTFJSを使用します(遅い) | false | |
enablePredictorHotlist | オーディオフィンガープリントを計算し、DBで検索します | predInterval | true |
saveAudio* | ハードドライブのセグメントにストリームオーディオデータを保存します | saveDuration | true |
saveMetadata | 予測でJSONを保存します | saveDuration | true |
fetchMetadata* | ラジオWebサイトからメタデータを収集します | saveDuration | true |
modelUpdates | MLとHotListファイルを最新の状態に保ちます | modelUpdatesInterval | true |
| 財産 | 説明 | デフォルト |
|---|---|---|
modelPath | MLモデルとホットリストDBが保存されるディレクトリ | process.cwd() + '/model' |
modelFile | modelPathに対するMLファイルのパス | country + '_' + name + '/model.keras' |
hotlistFile | modelPathに対するホットリストDBのパス | country + '_' + name + '/hotlist.sqlite' |
saveAudioPath* | オーディオとメタデータが保存されているルートフォルダー | process.cwd() + '/records' |
Analyserで構築された読み取り可能なストリームは、次のプロパティを備えたオブジェクトを発します。一部のプロパティは、ライブ無線分析を行うときにのみ使用できます。それらは*でマークされています。ファイル分析に固有のその他のものには**がマークされています。
audio* :オリジナル(圧縮)オーディオデータのチャンクを含むバッファー。
ml :利用できない場合はnull 、それ以外の場合は時間周波数アナライザーの結果を含むオブジェクト
softmaxraw :広告、スピーチ、音楽の間のSoftMaxを表す3つの数字の配列。softmax :SoftMaxRawと同じですが、将来のslotsFutureデータポイントと過去のslotsPastデータポイントで間に合わせることができました。スムージングウェイトは、 consts.MOV_AVG_WEIGHTS in 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、Audio Files Extension audioExt ( mp3またはaac )、およびhomepage URLが含まれています。
gain :ストリームの平均ボリュームを表すDB値。再生ボリュームを正規化する場合に便利です。 mlpredict.pyによって計算されました。
tBuffer* :秒のオーディオバッファー。 Adblockradio/Stream-Tireless-Balerによって計算されます。
predictorStartTime* :アルゴリズムの起動のタイムスタンプ。稼働時間を得るのに便利です。
playTime* :指定されたオーディオが再生される時期の概算タイムスタンプ。 TODOこれを確認してください。
tStart** :予測にリンクされた時間間隔の下位境界(ミリ秒単位)
tEnd** :予測にリンクされた時間間隔の上限(ミリ秒単位)
サポートされている無線のリストはこちらから入手できます。
このモジュールの統合は大歓迎です。提案はこちらから入手できます。
Webブラウザ用のスタンドアロンデモプレーヤーはこちらからご覧いただけます。
ライセンスファイルを参照してください。
このプロジェクトへの貢献は歓迎されますが、貢献者のライセンス契約の対象となる可能性があります。