не все AI-сервисы должны быть самоуверенными: как мы сделали сервис для распознавания китов с режимом «не найдено»

Если у команды есть аэрофотосъёмка китов, дальше начинается не самая романтичная часть работы: сотни снимков, шум, нерелевантные кадры и ручной поиск совпадений по базе. Мы собрали веб-прототип, который берёт изображение, определяет вид, ищет совпадение по базе известных особей и, что важнее всего, умеет не выдумывать ответ там, где ответа пока нет.


Сервис работает через веб: можно загрузить файл, дать URL изображения или прогнать ZIP-архив. В текущей версии у проекта база на 13 837 особей из 30 видов. На выходе пользователь получает вероятный вид, кандидатов на совпадение и отдельный сигнал, если нужной особи в базе нет.

Экран загрузки изображения
Экран загрузки изображения

почему здесь важен режим «не найдено»


Во многих AI-сценариях основная проблема не в редких ошибках, а в слишком уверенных ошибках. Для исследовательской работы это плохой обмен: команда тратит время на ложный след, а система создаёт иллюзию точности. Поэтому мы изначально строили продукт так, чтобы он не только матчился, но и корректно отклонял кейсы, когда особи нет в базе или когда качество входного изображения не позволяет сделать нормальный вывод.


Именно эта дисциплина делает инструмент полезным в реальной работе. Лучше честно сказать «не нашли», чем красиво ошибиться и увести исследователя по неверному следу.

Корректное отклонение нерелевантного снимка
Корректное отклонение нерелевантного снимка

что уже видно по метрикам


По публично описанным метрикам в README у модели указаны TPR 0.950, TNR 0.902, Precision 0.905, F1 0.927 и ROC-AUC 0.984. Заявленная p95 latency — 519 мс. Отдельно команда описывает недельный мониторинг доступности с 23 по 29 марта 2026 года: 2016 проверок каждые 5 минут, итоговая availability — 99.40%.

Результат идентификации особи
Результат идентификации особи

что показал пилотный прогон


Команда уже провела внутренний пилотный прогон с участием 15 специалистов в области морской биологии и смежных дисциплин. Важно корректно назвать этот этап: это пока не независимая внешняя валидация, а продуктовый пилот и сбор обратной связи. Но даже в таком формате результаты выглядят обнадёживающе.


По внутреннему отчёту команды, в сценарии с одной фотографией участники справились в 15 из 15 случаев. В сценарии с ZIP-набором из 5 изображений — в 13 из 15. Корректное отклонение нерелевантных изображений подтвердили 14 из 15 участников, а скорость работы как приемлемую оценили 13 из 15.


зачем нужен batch-режим


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


Следующая логичная итерация — расширение базы особей и видов, доработка UX под полевые сценарии, работа с качеством входных изображений и более широкие пилоты на следующем уровне формализации. Но уже сейчас в этом проекте нравится не громкость обещаний, а дисциплина: он полезен не потому, что «всегда знает ответ», а потому, что умеет быстро помочь в типовом кейсе и не притворяется всезнающим там, где данных пока недостаточно.


Демо: https://72.56.238.38.nip.io/

GitHub: https://github.com/0x0000dead/whales-identification

Пакетная обработка ZIP-архива
Пакетная обработка ZIP-архива