Как мы бактерии измеряли

Всем привет! Мы компания Nord Clan, занимаемся разработкой ПО на основе технологий машинного зрения.
В этой статье мы хотим рассказать вам об одном интересном продукте, который мы разрабатывали для иностранного клиента, работающего в области лабораторной медицины.

Чтобы лучше прочувствовать крутость продукта, давайте окунемся в мир конечного пользователя. Вы - лаборант, который занимается определением антибиотикорезистентности, то есть измеряете динамику роста конкретного микроорганизма в присутствии стандартной концентрации антибиотиков в модельных условиях.

Как мы бактерии измеряли

Для таких исследований используются чашка Петри с питательной средой внутри, суспензия микроорганизмов и бумажные диски, пропитанные концентрацией антибиотика. Чашка с дисками помещается в инкубатор примерно на сутки. После этого производятся замеры диаметров окружностей, который образуются (или нет) вокруг диска с антибиотиком.

Благодаря таким замерам делается вывод об эффективности антибиотика (чем больше диаметр окружности) относительно микроорганизма.

Как мы бактерии измеряли

Таких чашек Петри может быть до 100 штук в день для одного лаборанта!

Итак, в начале нашей разработки мы имеем следующий показатель эффективности: измерение диаметров и запись показателей занимает около 2 минут. Посмотрим, как он изменится с помощью нашего продукта.

Приступаем к разработке

Срок разработки по запросу клиента должен был составить два месяца. Поэтому мы составили список фич, которые должны войти в MVP версию:

  • распознавание диаметра окружности
  • распознавание названия антибиотика по тексту на таблетке
  • калибровка изображения для точности измерений до 1 мм
  • распознавание при съемке с ракурсов от 90° до 80°

Разработка алгоритмов распознавания была направлена на достижение этих целей.

Мы начали с того, что стали изучать существующие технологии.

Задача 1. Распознавание окружности

Для начала мы стали анализировать готовые технологии. Мы моделировали распознавание кругов при помощи адаптивной бинаризации и выравнивания яркости изображения (т.е. преобразование в черно-белый вариант), преобразования Хафа (Hough Circle). Эти технологии не показали высоких результатов, т.к. круги низкоконтрастные и отделять пиксели круга от фона и различных шумов (тени, блики, посторонние объекты) сохраняя точность измерений практически невозможно. Нами также рассматривался вариант использования нейронной сети для обработки изображений. Но в данном случае, использование геометрических методов должно обеспечить большую точность поскольку форма объектов заранее известна.

После серии экспериментов мы разработали собственный метод определения окружностей. В нашем случае в центре круга находилась высококонтрастная таблетка, которую легко выделить, применяя технологию Blob Detector. Затем окружности выделялись с помощью анализа интенсивности градиентов изображения вокруг ее центра. Граница зоны задержки роста бактерии в области действия антибиотика находилась методом относительной высоты вершин (Topographic prominence).

Вокруг центра алгоритм измеряет среднюю яркость изображения в концентрических кольцах толщиной 0,3 мм. В такой толщине кольца умещается несколько пикселей изображения. Далее с помощью полученных значений строится график интенсивности в зависимости от расстояния от центра круга.

Как мы бактерии измеряли

То есть, как только построенный круг соприкасается с краем таблетки, график подскакивает вверх, потому что край таблетки ярко выражен на бледном фоне круга. Далее отслеживается второй скачок графика: как раз в том месте, где область действия антибиотика (конец окружности) прекращается.

Этот метод так же хорошо справлялся с распознаванием окружностей с искривленной круглой формой (см. изображение выше: на нем видно, что две окружности слились)

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

Разработка алгоритма и настройка параметров производилась на Python с использованием библиотеки Streamlit для упрощения визуализации и корректировки параметров. Но в последствии проверка качества распознавания показала, что время от загрузки изображения до выдачи результатов занимает от 5 до 10 секунд.

В итоговой версии алгоритмы были переписаны на C++ для увеличения скорости обработки и возможности использования под Андроид (React Native) c прослойкой на Java .

Сервер на С++ выдавал результаты значительно быстрее - 1 секунда.

Задача 2. Распознавание названия антибиотика по тексту на таблетке

Размеры текста на дисках с антибиотиками варьируются от 1,5 мм до 3 мм. В реальных условиях съемки разрешающих способностей камер смартфонов бывает недостаточно для однозначного распознавания. Дополнительным челленджем было хаотичное расположение таблеток, т.е. текст на них располагался и вверх ногами, и под разными углами.

Чтобы обеспечить точность распознавания мы сделали следующее:

  • Находим таблетку методом Blob Detector
  • Выравниваем цвет фона средним значением, чтобы уменьшить влияние шумов
  • Определяем область размещения текста
  • Выравниваем текст по горизонтали. Для этого мы определяем направление текста методом анализа интенсивности: идея в том, что буквы на таблетках сверху для большинства случаев больше, чем цифры.
  • Распознаем текст: мы использовали механизм распознавания текста Tesseract

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

Задача 3. Калибровка изображения для точности измерений до 1 мм и распознавание при съемке с ракурсов от 90° до 80°

С этими двумя условиями нам помог разобраться всего 1 лист бумаги.

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

Так как мы начали с MVP версии, мы оговорили с клиентом, что на этом этапе будут доступны для распознавания стандартные чашки Петри с диаметром 90 мм. Поэтому наша подложка имела заданный размер: 10 х 10 см. Размеры подложки определены, значит теперь возможно распознать точный диаметр окружностей.

Известные входные параметры сделали также возможным нормализацию изображения при разных углах съемки.

Помимо этого подложка выполняет и другую важную функцию. Зачастую на чашках имеются посторонние надписи. Фон подложки помогает устранить из видимости посторонние шумы.

Мобильное приложение

Помните, в начале статьи мы зафиксировали, что вручную измерение диаметров и запись показателей занимает около 2 минут? Давайте посмотрим, как автоматизация улучшила эффективность.

После запуска приложения открывается камера. Пользователь фотографирует чашку Петри и буквально через секунду открывается экран с результатами: на фотографии выделены окружности с указанием диаметра и анаграммы антибиотиков.

Пользователь вводит номер образца чашки Петри, род и вид питательной среды. На основании введенных данных о среде, приложение автоматически определяет эффективность антибиотика для микроорганизма представленного образца: устойчив к антибиотику (окружности вокруг таблетки нет или ее диаметр очень мал), чувствительный к антибиотику (диаметр окружности приближен к максимальным значениям), или промежуточный результат (по диаметру окружности сложно делать однозначные выводы).

Таким образом всего за один один клик за секунды собирается вся информация, которая передается в нужном формате в любую интегрируемую систему.

На видео вы может подробнее ознакомится с работой мобильного приложения:

55
2 комментария

Добрый день! Измерения программой как-то зависят от диаметра самой чашки? Что является эталоном? Если будет новый поставщик чашек с размерами, которые будут отличаться от текущих, - не повлияет ли этот факт на размерность получаемых данных?

1
Ответить

Добрый день!
Размер чашки в данном случае не имеет существенного значения. В нашем алгоритме мы можем задать различные геометрические параметры: например, максимальный размер кругов (для оптимизации) или размер подложки.
Ограничения заключаются только в том, что при увеличении размера наблюдаемой области мелкие детали сложнее обнаружить, поскольку их размер в пикселях становится меньше, что особенно существенно для надписей на таблетках.
Если требуется распознавать тип таблетки в таком случае, то может потребоваться установка отдельной камеры или использование смартфона с качественной камерой

1
Ответить