ห้องสมุดเพื่อบล็อกโฆษณาบนสตรีมวิทยุสดและพอดคาสต์ การเรียนรู้ของเครื่องพบกับ Shazam
เครื่องยนต์ของ Adblockradio.com ผู้เล่นแบบสแตนด์อโลนสาธิตมีอยู่ที่นี่
สร้างสถานะ:
ช่วยให้โครงการเติบโต:
มีการสนทนาทางเทคนิคที่นี่
สตรีมวิทยุจะถูกดาวน์โหลดใน predictor.js พร้อมโมดูล Adblockradio/Stream-Tireless-Baler พอดคาสต์ถูกดาวน์โหลดใน predictor-file.js
ในทั้งสองกรณีเสียงจะถูกถอดรหัสเป็นช่องทางเดียว 22050 Hz PCM พร้อม ffmpeg
ชิ้นส่วนของเสียง PCM ประมาณหนึ่งวินาทีจะถูกส่งเป็นสองโมดูลย่อย:
predictor-ml/ml.js ) ซึ่งวิเคราะห์เนื้อหาสเปกตรัมด้วยเครือข่ายประสาทpredictor-db/hotlist.js ) ที่ค้นหาเหตุการณ์ที่เกิดขึ้นที่แน่นอนของโฆษณาที่รู้จัก Musics หรือ jingles ใน post-processing.js ผลลัพธ์จะถูกรวบรวมสำหรับแต่ละเซ็กเมนต์เสียงและทำความสะอาด
อินเทอร์เฟซที่อ่านได้คือ Analyser ได้สัมผัสกับผู้ใช้ปลายทาง มันสตรีมวัตถุที่มีเสียงและผลการวิเคราะห์ทั้งหมด
ในซีพียูแล็ปท็อปปกติและด้วยเครื่องวิเคราะห์ความถี่ Python การคำนวณทำงานที่ 5-10x สำหรับไฟล์และที่การใช้งาน 10-20% สำหรับสตรีมสด
คุณต้องการ 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หมายเหตุ: ทำงานกับ Jessie แต่การติดตั้ง FFMPEG นั้นค่อนข้างเจ็บปวด ดูที่นี่และที่นั่น
เพื่อประสิทธิภาพที่ดีที่สุด (~ 2x Speedup) คุณควรเลือกที่จะทำส่วนหนึ่งของการคำนวณด้วย 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 | Country of the Radio Stream ตาม Radio-browser.info | ไม่มี |
name | ชื่อสตรีมวิทยุตาม Radio-browser.info | ไม่มี |
file | ไฟล์เพื่อวิเคราะห์ (ไม่บังคับวิเคราะห์สตรีมสดเป็นอย่างอื่น) | ไม่มี |
โมเดลอะคูสติกและไฟล์ Hotlist จะถูกรีเฟรชโดยอัตโนมัติเมื่อเริ่มต้น หากคุณวางแผนที่จะเรียกใช้ Algo อย่างต่อเนื่องเป็นเวลานานคุณสามารถเรียกใช้การอัปเดตด้วยตนเอง หมายเหตุวิธีการเหล่านั้นมีเฉพาะในโหมดการวิเคราะห์สตรีมสด
| วิธี | พารามิเตอร์ | คำอธิบาย |
|---|---|---|
refreshPredictorMl | ไม่มี | รีเฟรชโมเดล ML ด้วยตนเอง (สตรีมสดเท่านั้น) |
refreshPredictorHotlist | ไม่มี | รีเฟรช DB Hotlist ด้วยตนเอง (สตรีมสดเท่านั้น) |
refreshMetadata | ไม่มี | รีเฟรชเครื่องตรวจจับข้อมูลเมตาด้วยตนเอง (สตรีมสดเท่านั้น) |
stopDl | ไม่มี | หยุด Adblock Radio (สตรีมสดเท่านั้น) |
คุณสมบัติที่ทำเครื่องหมายด้วย A * นั้นมีไว้เพื่อใช้เฉพาะกับการวิเคราะห์สตรีมวิทยุสดไม่ใช่การวิเคราะห์ไฟล์ที่พวกเขาถูกละเว้น
| คุณสมบัติ | คำอธิบาย | ค่าเริ่มต้น |
|---|---|---|
predInterval | ส่งสถานะสตรีมไปยังผู้ฟังทุก ๆ N | 1 |
saveDuration* | หากเปิดใช้งานให้บันทึกไฟล์เสียงและข้อมูลเมตาทุกครั้ง n predInterval | 10 |
modelUpdatesInterval | หากเปิดใช้งานให้อัปเดตไฟล์โมเดลทุก ๆ นาที | 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 Hotlist เมื่อเทียบกับ modelPath | country + '_' + name + '/hotlist.sqlite' |
saveAudioPath* | โฟลเดอร์รูทที่บันทึกเสียงและข้อมูลเมตา | process.cwd() + '/records' |
สตรีมที่อ่านได้ซึ่งสร้างขึ้นด้วยวัตถุ Emit Analyser ที่มีคุณสมบัติต่อไปนี้ คุณสมบัติบางอย่างมีเฉพาะเมื่อทำการวิเคราะห์วิทยุสด พวกเขาถูกทำเครื่องหมายด้วย * การวิเคราะห์ไฟล์เฉพาะอื่น ๆ จะถูกทำเครื่องหมายด้วย **
audio* : บัฟเฟอร์ที่มีข้อมูลเสียงต้นฉบับ (บีบอัด)
ml : null ถ้าไม่พร้อมใช้งานมิฉะนั้นวัตถุที่มีผลลัพธ์ของเครื่องวิเคราะห์ความถี่เวลา
softmaxraw : อาร์เรย์ของตัวเลขสามตัวที่แสดงถึง softmax ระหว่างโฆษณาคำพูดและเพลงsoftmax : เหมือนกับ Softmaxraw แต่ปรับให้เรียบในเวลาด้วยจุดข้อมูล slotsFuture ในอนาคตและจุดข้อมูล slotsPast ในอดีต น้ำหนักที่เรียบถูกกำหนดโดย consts.MOV_AVG_WEIGHTS ใน post-processing.jsclass : 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-Tireless-Baler
predictorStartTime* : การประทับเวลาของการเริ่มต้นอัลกอริทึม มีประโยชน์ในการรับเวลา
playTime* : การประทับเวลาโดยประมาณของเมื่อจะเล่นเสียงที่กำหนด ต้องตรวจสอบสิ่งนี้
tStart** : ขอบเขตล่างของช่วงเวลาที่เชื่อมโยงกับการทำนาย (เป็นมิลลิวินาที)
tEnd** : ขอบเขตบนของช่วงเวลาที่เชื่อมโยงกับการทำนาย (เป็นมิลลิวินาที)
รายการวิทยุที่รองรับมีอยู่ที่นี่
ยินดีต้อนรับการรวมโมดูลนี้ มีคำแนะนำที่นี่
เครื่องเล่นสาธิตแบบสแตนด์อโลนสำหรับเว็บเบราว์เซอร์มีให้ที่นี่
ดูไฟล์ใบอนุญาต
การบริจาคของคุณในโครงการนี้ยินดีต้อนรับ แต่อาจอยู่ภายใต้ข้อตกลงใบอนุญาตของผู้สนับสนุน