Perpustakaan untuk memblokir iklan di streaming radio dan podcast langsung. Pembelajaran mesin bertemu Shazam.
Mesin adblockradio.com. Pemain mandiri demo tersedia di sini.
Status Bangun:
Membantu proyek tumbuh:
Diskusi teknis tersedia di sini.
Streaming radio diunduh dalam predictor.js dengan modul adblockradio/stream-tireless-baler. Podcast diunduh di predictor-file.js .
Dalam kedua kasus, audio kemudian diterjemahkan ke saluran tunggal, 22050 Hz PCM dengan ffmpeg .
Potongan sekitar satu detik audio PCM disalurkan ke dalam dua sub-modul:
predictor-ml/ml.js ), yang menganalisis konten spektral dengan jaringan saraf.predictor-db/hotlist.js ), yang mencari kejadian yang tepat dari iklan, musik atau jingle yang diketahui. Di post-processing.js , hasilnya dikumpulkan untuk setiap segmen audio dan dibersihkan.
Antarmuka yang dapat dibaca, Analyser , terpapar dengan pengguna akhir. Ini mengalirkan objek yang berisi audio itu sendiri dan semua hasil analisis.
Pada CPU laptop biasa dan dengan penganalisa frekuensi waktu Python, perhitungan berjalan pada 5-10x untuk file dan pada 10-20% penggunaan untuk streaming langsung.
Anda memerlukan node.js (> = v10.12.x, tetapi <11) dan npm. Unduh di sini. Pro-Tip: Untuk mengelola beberapa versi node di platform Anda, gunakan NVM.
Di debian stretch:
apt-get install -y git ssh tar gzip ca-certificates build-essential sqlite3 ffmpegCatatan: Bekerja di Jessie, tetapi memasang FFMPEG agak menyakitkan. Lihat di sana -sini.
Untuk kinerja terbaik (~ 2x speedup) Anda harus memilih untuk melakukan bagian dari perhitungan dengan Python. Prasyarat tambahan adalah sebagai berikut: Python (diuji dengan v2.7.9), keras (diuji dengan v2.0.8) dan TensorFlow (diuji dengan CPU V1.4.0 dan GPU v1.3.0).
Di Debian:
apt-get install python-dev portaudio19-dev
pip install python_speech_features h5py numpy scipy keras tensorflow zerorpc sounddevice psutilCatatan: Jika Anda tidak memiliki PIP, ikuti instruksi ini untuk menginstalnya.
git clone https://github.com/adblockradio/adblockradio.git
cd adblockradio
npm installValidasi instalasi Anda dengan test suite:
npm test
Saat startup dan secara berkala selama runtime, filter file konfigurasi secara otomatis diperbarui dari adblockradio.com/models/:
model.keras atau model.json + group1-shard1of1 ), untuk penganalisa frekuensi waktu.hotlist.sqlite ), untuk pencocokan sidik jari. Jalankan demo di streaming radio langsung RTL Prancis:
node demo.jsBerikut adalah output sampel dari skrip demo, menunjukkan iklan yang terdeteksi:
{
"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": ...
}
Dimungkinkan juga untuk menganalisis rekaman radio. Jalankan demo pada rekaman radio RTL Prancis, termasuk iklan, pembicaraan dan musik:
node demo-file.jsOutput bertahap mirip dengan analisis stream langsung. Sebuah pasca pemrosesan tambahan khusus untuk rekaman menyembunyikan ketidakpastian dalam prediksi dan menunjukkan potongan besar untuk setiap kelas, dengan perangko waktu dalam milidetik, membuatnya siap untuk mengiris.
[
{
"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
}
]
Perhatikan bahwa ketika menganalisis file audio, Anda masih perlu memberikan nama aliran radio, karena algoritma harus memuat parameter akustik dan DB sampel yang diketahui. Analisis podcast yang tidak terikat pada radio belum didukung, tetapi mungkin di masa depan.
Di bawah ini adalah contoh penggunaan sederhana. Contoh penggunaan yang lebih menyeluruh tersedia dalam tes:
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 ) {
...
} ) ;| Milik | Keterangan | Bawaan |
|---|---|---|
country | Country of the Radio Stream Menurut radio browser.info | Tidak ada |
name | Nama stream radio menurut radio-browser.info | Tidak ada |
file | File untuk menganalisis (opsional, analisis streaming langsung) | Tidak ada |
Model akustik dan file daftar panas disegarkan secara otomatis saat startup. Jika Anda berencana untuk terus menjalankan algo untuk waktu yang lama, Anda dapat memicu pembaruan manual. Perhatikan metode -metode tersebut hanya tersedia dalam mode analisis aliran langsung.
| Metode | Parameter | Keterangan |
|---|---|---|
refreshPredictorMl | Tidak ada | Segarkan secara manual model ML (hanya stream langsung) |
refreshPredictorHotlist | Tidak ada | Segarkan secara manual DB Hotlist (hanya streaming langsung) |
refreshMetadata | Tidak ada | Segarkan secara manual scraper metadata (hanya streaming langsung) |
stopDl | Tidak ada | Stop Adblock Radio (hanya streaming langsung) |
Properti yang ditandai dengan * dimaksudkan untuk digunakan hanya dengan analisis aliran radio langsung, bukan analisis file di mana mereka diabaikan.
| Milik | Keterangan | Bawaan |
|---|---|---|
predInterval | Kirim Status Aliran ke Pendengar Setiap N Detik | 1 |
saveDuration* | Jika diaktifkan, simpan file audio dan metadata setiap n waktu predInterval | 10 |
modelUpdatesInterval | Jika diaktifkan, perbarui file model setiap n menit | 60 |
| Milik | Keterangan | Periodisitas | Bawaan |
|---|---|---|---|
enablePredictorMl | Melakukan inferensi pembelajaran mesin | predInterval | true |
JSPredictorMl | Gunakan TFJ bukan Python untuk inferensi ML (lebih lambat) | false | |
enablePredictorHotlist | Hitung sidik jari audio dan cari di DB | predInterval | true |
saveAudio* | Simpan data audio stream di segmen di hard drive | saveDuration | true |
saveMetadata | Simpan JSON dengan prediksi | saveDuration | true |
fetchMetadata* | Kumpulkan metadata dari situs web radio | saveDuration | true |
modelUpdates | Pertahankan ML dan file daftar panas terkini | modelUpdatesInterval | true |
| Milik | Keterangan | Bawaan |
|---|---|---|
modelPath | Direktori di mana model ML dan DBS hotlist disimpan | process.cwd() + '/model' |
modelFile | Jalur file ml relatif ke modelPath | country + '_' + name + '/model.keras' |
hotlistFile | Jalur Hotlist DB relatif terhadap modelPath | country + '_' + name + '/hotlist.sqlite' |
saveAudioPath* | Folder root di mana audio dan metadata disimpan | process.cwd() + '/records' |
Aliran yang dapat dibaca dibangun dengan Analyser memancarkan objek dengan sifat -sifat berikut. Beberapa properti hanya tersedia saat melakukan analisis radio langsung. Mereka ditandai dengan * . Spesifik lain untuk analisis file ditandai dengan ** .
audio* : Buffer yang berisi sepotong data audio asli (terkompresi).
ml : null JIKA TIDAK TERSEDIA, Kalau tidak, objek yang berisi hasil dari Analyzer Frekuensi Waktu
softmaxraw : Array dari tiga angka yang mewakili softmax antara iklan, ucapan dan musik.softmax : Sama seperti SoftMaxRaw, tetapi dihaluskan dalam waktu dengan titik data slotsFuture di masa mendatang dan titik data slotsPast di masa lalu. Bobot smoothing didefinisikan oleh consts.MOV_AVG_WEIGHTS di post-processing.js .class : baik 0-ads , 1-speech , 2-music atau 9-unsure . Klasifikasi menurut softmax . hotlist : NULL jika tidak tersedia, jika tidak objek yang berisi hasil pencocokan sidik jari.
file : Jika kelas bukan "9-unsure", referensi file yang dikenali.total : Jumlah sidik jari yang dihitung untuk segmen audio yang diberikan.matches : Jumlah sidik jari yang cocok antara segmen audio dan database sidik jari.class : baik 0-ads , 1-speech , 2-music , 3-jingles atau 9-unsure jika tidak cukup kecocokan telah ditemukan. class : Prediksi akhir algoritma. Baik 0-ads , 1-speech , 2-music , 3-jingles atau 9-unsure .
metadata* : Metadata hidup, diambil dan diuraikan oleh modul Adblockradio/Webradio-Metadata.
streamInfo* : metadata statis tentang aliran. Berisi url Stream, favicon , bitrate in Bytes / S, Audio Files Extension audioExt ( mp3 atau aac ) dan URL homepage .
gain : Nilai DB yang mewakili volume rata -rata aliran. Berguna jika Anda ingin menormalkan volume pemutaran. Dihitung oleh mlpredict.py .
tBuffer* : Detik buffer audio. Dihitung oleh adblockradio/stream-tireless-baler.
predictorStartTime* : Cap waktu startup algoritma. Berguna untuk mendapatkan waktu kerja.
playTime* : Perkiraan waktu saat audio yang diberikan akan dimainkan. Todo periksa ini.
tStart** : Batas bawah interval waktu yang terkait dengan prediksi (dalam milidetik)
tEnd** : Batas atas interval waktu yang terkait dengan prediksi (dalam milidetik)
Daftar radio yang didukung tersedia di sini.
Integrasi modul ini dipersilakan. Saran tersedia di sini.
Pemain demo mandiri untuk browser web tersedia di sini.
Lihat file lisensi.
Kontribusi Anda untuk proyek ini dipersilakan, tetapi mungkin tunduk pada perjanjian lisensi kontributor.