Skip to content

About

Распознавание зубной формулы из аудио, интерфейс в виде телеграм бота

Resources

Stars

0 stars

Watchers

1 watching

Forks

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Описание задачи

Распознавание зубной формулы из аудио. Сделано в виде бота. Он принимает войс и аудио файл. Присылает в ответ зубную формулу. Звучит это примерно как "один семь кариес один шесть кариес". Но все говорят по-разному.

  • Иногда между зубами говорят "зуб"
  • Иногда говорят не "один семь", а "семнадцать", а иногда "тридцать семь"
  • Иногда вместо "семнадцать пломба" говорят "семнадцать лечен"
  • Иногда говорят "имплант", иногда "искусственный"
  • Диагноз может состоять из одного слова или из нескольких, например "зубные отложения", "вторичный кариес" или "подвижность второго типа"
  • Диагноз "пломба кариес" - это "П/С", при этом есть отдельные дефекты "пломба" и "кариес"
  • Может быть несколько дефектов на один зуб, например "пломба скол"
  • Есть детская зубная формула, там зубы начинаются с пятьдесят, есть взрослая, с единицы.

Алгоритм

Основной файл с решением -- это ml.py и const.py, где лежат словари. На вход подаётся распознанное аудио через yandex speech kit (файл speech.py).

  1. Заменяем все ошибки распознавания (словарь REPLACE_MISTAKES), такие как карис => кариес, а так же заменяем синонимы лечен => пломба
  2. Мы хотим работать с терминами как со словами, поэтому все устойчивые понятия которые звучат в нескольких словах преобразуем в одно (словарь REPLACE_WORDS). Например "дефект пломба" => "дефектпломбы". Замечу что на прошлом этапе мы заменили ошибки и если изначально звучало "дефекты пломбы", то это после двух операций преобразовалось в "дефект пломба", а потом в "дефектпломбы".
  3. Распознаём названия зубов. Тут есть 3 варианта: "семнадцать" и "один семь", "сорок три". Когда в одном слове произносят сразу полное название зуба, это перечислено в словаре DOUBLE_NUMBER. Если произносят два слова, то они закидрованы в SINGLE_NUMBER, "сорок" имеет такое же значение маппинга как и "четыре".
  4. Названия зубов мы валидируем. Возможные значения перечислены в VALID_NUMBERS, мы ведь знаем какие номера зубов бывают у детей и взрослых.
  5. Когда обнаруживаем валидное значение зуба, то добавляем в строку перед ним знак |
  6. Сплитим по | и обрабатываем каждый зуб отдельно, составляем словарь из названия зуба и распознанных дефектов, которые снова преобразуем по VALUE_MAPPING и объединяем по запятой
  7. Чтобы вывести формулу, мы понимаем это детская или взрослая, проходимся по списку с зубами и если находим в словаре нужный зуб, то выводим дефект

Тесты в файле test.py

About

Распознавание зубной формулы из аудио, интерфейс в виде телеграм бота

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages