라이브 라디오 스트림 및 팟 캐스트의 광고를 차단하는 라이브러리. 머신 러닝은 Shazam을 만납니다.
adblockradio.com의 엔진. 데모 독립형 플레이어는 여기에서 사용할 수 있습니다.
상태 빌드 :
프로젝트 성장을 돕기 :
기술 토론은 여기에서 제공됩니다.
무선 스트림은 모듈 AdBlockradio/Stream-Tireless-Baler와 함께 predictor.js 에서 다운로드됩니다. 팟 캐스트는 predictor-file.js 로 다운로드됩니다.
두 경우 모두 오디오는 ffmpeg 와 함께 단일 채널 22050 Hz PCM으로 디코딩됩니다.
PCM 오디오의 약 1 초 덩어리는 두 개의 하위 모듈로 파이프됩니다.
predictor-ml/ml.js ).predictor-db/hotlist.js ). post-processing.js 에서는 각 오디오 세그먼트에 대해 결과가 수집되어 청소됩니다.
읽기 쉬운 인터페이스 인 Analyser 는 최종 사용자에게 노출됩니다. 오디오 자체와 모든 분석 결과가 포함 된 객체를 스트리밍합니다.
일반 노트북 CPU 및 Python Time-Frequency Analyzer를 사용하여 계산은 파일의 경우 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참고 : Jessie에서 작동하지만 FFMPEG를 설치하는 것은 약간 고통 스럽습니다. 여기 저기 참조하십시오.
최상의 성능 (~ 2 배 속도)을 위해서는 Python으로 계산의 일부를 수행하도록 선택해야합니다. 추가 전제 조건은 다음과 같습니다. 파이썬 (v2.7.9로 테스트), 케라 (v2.0.8로 테스트) 및 텐서 플로우 (CPU 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 라이브 라디오 스트림에서 데모를 실행하십시오.
node demo.js다음은 DEMO 스크립트의 샘플 출력으로 감지 된 광고를 보여줍니다.
{
"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 Radio 중지 (라이브 스트림 만 해당) |
a * 로 표시된 속성은 무시되는 파일 분석이 아니라 라이브 무선 스트림 분석과 함께 사용됩니다.
| 재산 | 설명 | 기본 |
|---|---|---|
predInterval | n 초마다 리스너에게 스트림 상태를 보냅니다 | 1 |
saveDuration* | 활성화 된 경우 오디오 파일과 메타 데이터를 매번 N predInterval 시간으로 저장하십시오. | 10 |
modelUpdatesInterval | 활성화 된 경우 N 분마다 모델 파일을 업데이트하십시오 | 60 |
| 재산 | 설명 | 주기성 | 기본 |
|---|---|---|---|
enablePredictorMl | 기계 학습 추론을 수행하십시오 | predInterval | true |
JSPredictorMl | ML 추론에 Python 대신 TFJ를 사용하십시오 (느린) | false | |
enablePredictorHotlist | 오디오 지문을 계산하고 DB에서 검색하십시오 | predInterval | true |
saveAudio* | 하드 드라이브의 세그먼트에 스트림 오디오 데이터를 저장하십시오 | saveDuration | true |
saveMetadata | 예측으로 JSON을 저장하십시오 | saveDuration | true |
fetchMetadata* | 라디오 웹 사이트에서 메타 데이터를 수집하십시오 | saveDuration | true |
modelUpdates | ML 및 핫리스트 파일을 최신 상태로 유지하십시오 | modelUpdatesInterval | true |
| 재산 | 설명 | 기본 |
|---|---|---|
modelPath | ML 모델과 핫리스트 DBS가 저장되는 디렉토리 | 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을 사용할 수없는 경우 null , 그렇지 않으면 시간-주파수 분석기의 결과를 포함하는 객체
softmaxraw : 광고, 연설 및 음악 사이의 SoftMax를 나타내는 3 개의 숫자 배열.softmax : SoftMaxRaw와 동일하지만 앞으로 slotsFuture 데이터 포인트와 slotsPast Data Points에서 시간이 매끄 럽습니다. 스무딩 무게는 post-processing.js 에서 consts.MOV_AVG_WEIGHTS 에 의해 정의됩니다.class : 0-ads , 1-speech , 2-music 또는 9-unsure 중 하나입니다. softmax 에 따른 분류. hotlist : NULL을 사용할 수없는 경우 NULL, 그렇지 않으면 지문 마칭 자의 결과가 포함 된 개체입니다.
file : 클래스가 "9-unsure"가 아닌 경우 파일의 참조가 인식됩니다.total : 주어진 오디오 세그먼트에 대해 계산 된 지문 수.matches : 오디오 세그먼트와 지문 데이터베이스 사이의 일치하는 지문 수.class : 0-ads , 1-speech , 2-music , 3-jingles 또는 9-unsure UNSURE가 충분하지 않은 경우 발견되었습니다. class : 알고리즘의 최종 예측. 0-ads , 1-speech , 2-music , 3-jingles 또는 9-unsure .
metadata* : 모듈 Adblockradio/Webradio-Metadata에 의해 가져오고 구문 분석 된 라이브 메타 데이터.
streamInfo* : 스트림에 대한 정적 메타 데이터. 스트림 url , favicon , bytes / s의 bitrate , 오디오 파일 확장 audioExt ( mp3 또는 aac ) 및 homepage URL이 포함되어 있습니다.
gain : 스트림의 평균 부피를 나타내는 DB 값. 재생 볼륨을 정상화하려면 유용합니다. mlpredict.py 에 의해 계산됩니다.
tBuffer* : 오디오 버퍼의 초. adblockradio/스트림-불신-볼러에 의해 계산됩니다.
predictorStartTime* : 알고리즘 시작의 타임 스탬프. 가동 시간을 얻는 데 유용합니다.
playTime* : 주어진 오디오를 재생할 때의 대략적인 타임 스탬프. TODO 이것을 확인하십시오.
tStart** : 예측과 연결된 시간 간격의 하한 (밀리 초)
tEnd** : 예측과 연결된 시간 간격의 상한 (밀리 초)
지원되는 라디오 목록은 여기에서 제공됩니다.
이 모듈의 통합을 환영합니다. 제안은 여기에서 제공됩니다.
웹 브라우저 용 독립형 데모 플레이어는 여기에서 제공됩니다.
라이센스 파일을 참조하십시오.
이 프로젝트에 대한 귀하의 기여는 환영하지만 기부자의 라이센스 계약이 적용될 수 있습니다.