Распознавание животных по фотографии в мобильном приложении
Пользователь фотографирует птицу на ветке — она улетает, пока он поднимает телефон. Мы сталкиваемся с этой проблемой постоянно: помимо точности классификации нужно думать о скорости захвата кадра. Мы реализуем буферизацию кадров и выбираем наименее смазанный снимок — это ключевое отличие от распознавания статичных объектов. Задача ещё усложняется, если животное движется или освещение недостаточное. Наша команда с более чем 5-летним опытом в мобильной разработке и 30+ реализованными AI-проектами помогает клиентам внедрить распознавание животных с точностью до 85%+ для популярных видов. Пользователи часто жалуются, что приложение не распознаёт животное, если оно частично скрыто или в тени. Мы решаем это с помощью предобработки изображения: автоматическое выравнивание яркости и контраста, а также использование моделей, обученных на разнообразных условиях съёмки. Свяжитесь с нами — оценим ваш проект за один день.
Как выбрать модель для распознавания?
Задача сильно зависит от целевого класса животных. Готовые API охватывают тысячи видов, но для редких пород может потребоваться кастомная модель.
| Категория | Готовое API / модель | Кол-во видов |
|---|---|---|
| Птицы | Merlin Bird ID (Cornell Lab API), iNaturalist | 10 000+ |
| Дикие животные | iNaturalist API, INat Seek SDK | 100 000+ таксонов |
| Рыбы | iNaturalist, FishVerify API | 30 000+ |
| Домашние питомцы (порода) | Google Cloud Vision, кастомная CoreML | 200–400 пород |
| Насекомые | iNaturalist, iNat Seek | 500 000+ видов |
Для смешанной аудитории iNaturalist API — оптимальный выбор: широкая таксономическая база, confidence score на уровне вида/рода/семейства, и есть on-device SDK — Seek для iOS и Android. Использование готового API вместо кастомной модели экономит от $10,000 до $30,000 на этапе разработки. Лицензия iNaturalist для коммерческого использования стоит от $500 в месяц, что значительно дешевле создания собственной базы таксонов.
"iNaturalist API provides access to over 400,000 species observations" — iNaturalist Docs
Интеграция iNaturalist Seek SDK на Android
class AnimalRecognitionManager(private val context: Context) {
// Seek использует TFLite модель ~15MB
private val seekModel by lazy {
SeekClassifier(context, modelPath = "seek_v2.tflite")
}
fun recognizeFromBitmap(bitmap: Bitmap): List<TaxonResult> {
val resized = Bitmap.createScaledBitmap(bitmap, 299, 299, true)
val results = seekModel.classify(resized)
return results
.filter { it.score > 0.15f }
.sortedByDescending { it.score }
.map { result ->
TaxonResult(
taxonId = result.taxonId,
name = result.name,
commonName = result.commonName,
rank = result.rank, // SPECIES, GENUS, FAMILY
confidence = result.score,
photoUrl = result.defaultPhotoUrl
)
}
}
}
Rank важен для UI: если уверенность на уровне вида 30%, честнее показать «Семейство Вьюрковые (85%)», чем конкретный вид с низкой точностью.
Почему буферизация кадров критична?
Буферизация кадров — единственный способ получить чёткое фото движущегося животного. Сравните со стандартным захватом:
| Метод захвата | Доля нечётких снимков | Задержка | Рекомендация |
|---|---|---|---|
capturePhoto() (стандартный) |
~30% | мгновенно | Для статичных объектов |
| Буферизация кадров + оценка резкости | ~10% | задержка 0.3–0.5 с | Для движущихся животных |
Буферизация снижает долю нечётких снимков втрое по сравнению со стандартным захватом.
Быстрый capture для движущихся объектов
// iOS: буферизация кадров для выбора лучшего
class AnimalCaptureViewController: UIViewController {
private var frameBuffer: [CMSampleBuffer] = []
private let bufferSize = 10 // последние 10 кадров
func captureOutput(_ output: AVCaptureOutput,
didOutput sampleBuffer: CMSampleBuffer,
from connection: AVCaptureConnection) {
frameBuffer.append(sampleBuffer)
if frameBuffer.count > bufferSize {
frameBuffer.removeFirst()
}
}
// При нажатии кнопки — выбрать наименее смазанный кадр из буфера
func captureWithMotionCompensation() -> UIImage? {
return frameBuffer
.compactMap { UIImage(from: $0) }
.max(by: { sharpnessScore($0) < sharpnessScore($1) })
}
}
Такой подход снижает долю нечётких снимков втрое по сравнению с обычным capturePhoto().
Лицензирование и юридические аспекты
При использовании iNaturalist API соблюдайте их условия: некоммерческое использование бесплатно, коммерческое — требуется подписка. Для App Store Review нужно указать использование ATT (App Tracking Transparency), если собираете данные для обучения.
Процесс работы над функцией
- Анализ требований — определение классов животных, условий съёмки, целевого количества видов.
- Выбор модели — iNaturalist, кастомная CoreML или TFLite в зависимости от задачи.
- Интеграция SDK — под ключ для iOS (Swift) и Android (Kotlin).
- Оптимизация захвата — буферизация кадров, оценка резкости, адаптация для низкой освещённости.
- Тестирование на реальных фото — оценка точности, A/B-тесты с пользователями.
- Поддержка после релиза — обновление базы таксонов, доработки под новые версии ОС.
Что входит в работу
- Документация по интеграции и настройке.
- Доступы к сторам (App Store Connect, Google Play Console).
- Обучение команды работе с SDK.
- Пост-релизная поддержка в течение 30 дней.
Почему стоит выбрать нас?
У нас есть сертифицированные разработчики iOS и Android, опыт работы с iNaturalist API, и мы гарантируем точность классификации на уровне 85%+ для востребованных видов. Реализуем под ключ: от выбора модели до публикации в сторах. Свяжитесь — оценим проект за один день. Закажите внедрение распознавания животных уже сегодня.
Ориентиры по срокам
Интеграция одного API или Seek SDK с базовым UI — 1 день. Добавление буферизации кадров, карточки животного с описанием и ссылками на iNaturalist, история распознаваний — до 2 дней на базовой задаче, до 1.5 недель при нестандартных требованиях.







