Простой детектор FAS для Asterisk

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

FAS (False Answer Supervisor) это техника используемая различными провайдерами VoIP для увеличения длительности и соответственно стоимости звонка.

FAS бывает следующих видов:

  1. Ответ на звонок и трансляция в линию звонящего тишины или гудков

  2. Добавление тишины или записи разговора после того как тот кому звонили повесил трубку.

  3. Округление значения длинны звонка в биллинге оператора

Несмотря на то что вариант 1 является самым простым для детектирования он используется очень часто.

Детектирование гудков после ответа

Поскольку известны частоты для гудка в разных странах возможно понять что в аудио канале есть FAS по наличию следующих частот:

425Hz
440Hz - для Франции
450Hz - для Китая
480Hz - один из тонов оборудования Bell
400Hz - один из тонов используемых в UK

Для детектирования данных тонов необходимо взять запись звонка после ответа и разложить его с помощью FFT на составляющие частоты, если данные частоты являются превалирующими в окне измерения, то можно считать что мы слышим гудок.

Пример dialplan для asterisk

Для записи можно использовать простой пример dialplan для Asterisk который произведет вызов через оператора связи и запишет разговор в файл для дальнейшего анализа.

[fas]
exten => _XX.,1,Set(filename=${EXTEN}-${EPOCH})
exten => _XX.,n,MixMonitor(/tmp/${filename}.wav,b)
exten => _XX.,n,Dial(SIP/trunk/${EXTEN})

exten => h,1,GotoIf($["${DIALSTATUS}" = "ANSWER"]?detect:exit)
exten => h,n(detect),StopMixMonitor()
exten => h,n,Agi(/usr/local/bin/fas-detector,${filename})
exten => h,n,Set(CDR(fas_detected)=${FAS_DETECTED})
exten => h,n(exit),NoOp

Программа распознавания тонов

Для распознования тонов мной был написан простой детектор который проходит по файлу первые 5 секунд и смотрит в окнах размером в 500 миллисекунд есть ли там гудки. Результат детектора пишется в переменную FAS_DETECTED которая может быть использована для записи в CDR.

Исходный код расположен у меня на Github

Выводы

К сожалению данный метод детектирования не защищен от ложноположительной реакции при попадании на VoiceMail и не является решением которое можно использовать в операторской инфраструктуре.

Тем не менее он дает возможность найти вероятные проблемы и разобрать их уже в ручном режиме без необходимости проверять все звонки.

Дальнейшим улучшением может являтся обучение моделей глубинного обучения для улучшения детектирования. С помощью данного фильтра возможно собрать обучающую выборку.

Источник: https://habr.com/ru/post/726732/


Интересные статьи

Интересные статьи

Однажды я был маленьким, и задавался вопросом — вот если Unix way это (упрощенно) небольшие, довольно простые утилиты и библиотеки, которые делают одну вещь, но делают её хорошо (Peter H. Salus: &qu...
Любой телефон или планшет, работающий на Android, — это устройство, которое управляется ОС Linux. Да, очень модифицированной ОС, но все же основа Android — ядро Linux. Но, к сожа...
Пролог По сети сейчас гуляет видео — как автопилот Теслы видит дорогу. У меня давно чесались руки транслировать видео, обогащенное детектором, да и в реальном времени. Проблема в том, чт...
В 2019 году люди знакомятся с брендом, выбирают и, что самое главное, ПОКУПАЮТ через интернет. Сегодня практически у любого бизнеса есть свой сайт — от личных блогов, зарабатывающих на рекламе, до инт...
Сегодня мы поговорим о перспективах становления Битрикс-разработчика и об этапах этого пути. Статья не претендует на абсолютную истину, но даёт жизненные ориентиры.