مكتبة لمنع الإعلانات على تيارات الراديو الحية والبودكاست. التعلم الآلي يجتمع شازام.
محرك adblockradio.com. لاعب مستقل تجريبي متاح هنا.
حالة البناء:
مساعدة المشروع على النمو:
مناقشة فنية متاحة هنا.
يتم تنزيل تدفقات الراديو في predictor.js مع وحدة AdBlockRadio/Stream-Tireless-Baler. يتم تنزيل البودكاست في predictor-file.js
في كلتا الحالتين ، يتم فك تشفير الصوت إلى قناة واحدة ، 22050 Hz PCM مع ffmpeg .
يتم تقسيم أجزاء من ثانية واحدة من صوت PCM إلى مداولين فرعيين:
predictor-ml/ml.js ) ، الذي يحلل المحتوى الطيفي مع شبكة عصبية.predictor-db/hotlist.js ) ، والتي تبحث عن الأحداث الدقيقة للإعلانات المعروفة أو الموسيقى أو المناطق. في post-processing.js ، يتم جمع النتائج لكل قطعة صوتية وتنظيفها.
واجهة قابلة للقراءة ، Analyser ، تتعرض للمستخدم النهائي. يقوم بتدفق الكائنات التي تحتوي على الصوت نفسه وجميع نتائج التحليل.
على وحدة المعالجة المركزية للكمبيوتر المحمول العادي ومع محلل التردد الزمني Python ، تعمل الحسابات في 5-10x للملفات وبنسبة 10-20 ٪ للبث المباشر.
تحتاج إلى node.js (> = v10.12.x ، ولكن <11) و NPM. قم بتنزيله هنا. Pro-Tip: لإدارة العديد من إصدارات العقدة على النظام الأساسي الخاص بك ، استخدم NVM.
على امتداد دبيان:
apt-get install -y git ssh tar gzip ca-certificates build-essential sqlite3 ffmpegملاحظة: يعمل على جيسي ، ولكن تثبيت FFMPEG مؤلم بعض الشيء. انظر هنا وهناك.
للحصول على أفضل أداء (~ 2x Speedup) ، يجب عليك اختيار جزء من الحسابات مع Python. المتطلبات الأساسية الإضافية هي ما يلي: Python (تم اختباره مع V2.7.9) ، Keras (تم اختباره مع V2.0.8) و TensorFlow (تم اختباره مع وحدة المعالجة المركزية V1.4.0 و GPU V1.3.0).
على دبيان:
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 French:
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 | ملف للتحليل (اختياري ، تحليل الدفق المباشر خلاف ذلك) | لا أحد |
يتم تحديث الطراز الصوتي وملفات القائمة الساخنة تلقائيًا عند بدء التشغيل. إذا كنت تخطط لتشغيل Algo بشكل مستمر لفترة طويلة ، فيمكنك تشغيل التحديثات اليدوية. لاحظ أن هذه الطرق متوفرة فقط في وضع تحليل البث المباشر.
| طريقة | حدود | وصف |
|---|---|---|
refreshPredictorMl | لا أحد | قم بتحديث طراز ML يدويًا (البث المباشر فقط) |
refreshPredictorHotlist | لا أحد | قم بتحديث القائمة الساخنة يدويًا DB (البث المباشر فقط) |
refreshMetadata | لا أحد | قم بتحديث مكشطة البيانات الوصفية يدويًا (البث المباشر فقط) |
stopDl | لا أحد | أوقف راديو Adblock (البث المباشر فقط) |
من المفترض أن يتم استخدام الخصائص التي تحمل علامة A * فقط مع تحليل دفق الراديو المباشر ، وليس تحليل الملف حيث يتم تجاهلها.
| ملكية | وصف | تقصير |
|---|---|---|
predInterval | أرسل حالة الدفق إلى المستمع كل ثوانٍ | 1 |
saveDuration* | إذا تم تمكينه ، احفظ ملف الصوت والبيانات الوصفية في كل أوقات 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 بالنسبة إلى modelPath | country + '_' + name + '/hotlist.sqlite' |
saveAudioPath* | مجلد الجذر حيث يتم حفظ الصوت والبيانات الوصفية | process.cwd() + '/records' |
تدفقات قابلة للقراءة مصنوعة من كائنات انبعاث Analyser مع الخصائص التالية. بعض الخصائص متاحة فقط عند إجراء تحليل الراديو المباشر. يتم تمييزها بـ * . يتم وضع علامة أخرى محددة لتحليل الملف مع ** .
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 في Bytes / S ، Audio Files Extension audioExt ( mp3 أو aac ) وعنوان URL homepage .
gain : قيمة DB التي تمثل متوسط حجم الدفق. مفيد إذا كنت ترغب في تطبيع حجم التشغيل. يحسب بواسطة mlpredict.py .
tBuffer* : ثواني من العازلة الصوتية. تحسب بواسطة Adblockradio/تيار لا يكل.
predictorStartTime* : الطابع الزمني لبدء الخوارزمية. مفيد للحصول على وقت التشغيل.
playTime* : الطابع الزمني التقريبي لمتى يتم تشغيل الصوت المعطى. تودو تحقق من هذا.
tStart** : الحدود السفلية للفاصل الزمني المرتبط بالتنبؤ (بالميلي ثانية)
tEnd** : الحدود العليا للفاصل الزمني المرتبط بالتنبؤ (بالميلي ثانية)
قائمة أجهزة الراديو المدعومة متوفرة هنا.
تكامل هذه الوحدة نرحب. الاقتراحات متوفرة هنا.
يتوفر لاعب تجريبي مستقل لمتصفحات الويب هنا.
انظر ملف الترخيص.
مساهمتك في هذا المشروع مرحب بها ، ولكن قد تخضع لاتفاقية ترخيص المساهم.