Поиск аналогов по фото: AI-распознавание мебели в мобильном приложении

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

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

Услуги, которые мы предлагаем
Показано 1 из 1Все 1734 услуг
Поиск аналогов по фото: AI-распознавание мебели в мобильном приложении
Сложный
~1-2 недели
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    858
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    745
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1162
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    1034
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    968
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    563

Поиск аналогов по фото: AI-распознавание мебели в мобильном приложении

Клиент хочет, чтобы пользователь сфотографировал диван и получил похожие модели с ценами. Но мебель — не одежда: одинаковые с виду кресла могут отличаться по стилю и размерам. Ошибка на этапе классификации изображений ведёт к ложным рекомендациям. Мы решаем эту задачу с помощью комбинации Transfer Learning на свёрточных сетях и векторного поиска. Наш опыт показывает, что правильно настроенная модель экономит до 40% времени на ручной обработке каталога, а стоимость поддержки каталога снижается на 25% за счёт автоматизации.

Почему мебель сложнее одежды?

У мебели жёсткая геометрия и узнаваемые формы — это упрощает классификацию. Но поиск «похожего за меньшие деньги» требует не только визуального совпадения, но и понимания стиля (скандинавский минимализм, лофт, классика) и масштаба. Диван на фото без контекста — не позволяет понять, трёхместный он или двухместный. Мы решаем это с помощью дополнительных классификаторов стиля мебели и фильтрации по атрибутам.

Источник: рекомендации по обработке изображений мебели из открытых датасетов (например, Furniture-180).

Проблемы, которые мы решаем

  1. Категоризация: Большинство готовых моделей (Google Cloud Vision, AWS Rekognition) обучены на ImageNet — там мебели достаточно. Но точность падает для редких форм. Мы дообучаем EfficientNet или MobileNetV3 на каталоге магазина: 50 000 изображений (по 200–300 на категорию) дают уверенную классификацию основных категорий: диван, кресло, стол, стул, шкаф, кровать, тумба.
  2. Определение стиля: Категория — только первый шаг. Для поиска аналогов важен стиль. Используем CLIP, который понимает текстовые описания: "скандинавский минимализм", "лофт", "классика". CLIP сравнивает эмбеддинг изображения с эмбеддингами текстовых стилей и возвращает наиболее вероятный.
  3. Поиск с фильтрами: Архитектура та же, что и для одежды: эмбеддинг → vector search. Но для мебели важна фильтрация по материалу (дерево, металл, ткань), цвету, размерной группе. Размерный класс без AR определяется приблизительно — по соотношению сторон и типичным пропорциям для категории.

Сравнение подходов к классификации

Подход Точность Время на обучение Набор данных
Готовый API (Google Cloud Vision) 75-85% 0 Не требуется
Transfer Learning (MobileNetV3) 92-96% 2-4 дня 500–1000 на категорию
Обучение с нуля (ResNet) 96%+ 2-4 недели 10000+ на категорию

Transfer Learning — оптимальный выбор для большинства ритейлеров: точность 92% при минимальных затратах времени. Он точнее готового API в среднем на 15% по нашим тестам. При этом Transfer Learning требует в 2-3 раза меньше данных, чем обучение с нуля, при сравнимой точности. Мы используем MobileNetV3 или EfficientNet-Lite — они работают прямо на устройстве.

Как определить стиль мебели?

Метод Точность определения стиля Необходимость разметки
Только визуальные признаки (CNN) 70-80% 500+ изображений на стиль
CLIP (текст+изображение) 85-95% Текстовые описания стилей
Гибрид (CLIP + кастомный классификатор) 90-97% 200 изображений на стиль

CLIP позволяет быстро подстроиться под новый стиль без переобучения — достаточно добавить текстовое описание. Подробнее о CLIP можно узнать в официальном репозитории.

Как мы это делаем: стек и примеры

Для Android используем TFLite с XNNPACK оптимизацией. Пример классификатора:

// Android: TFLite классификация мебели
class FurnitureClassifier(context: Context) {

    private val interpreter: Interpreter by lazy {
        val model = FileUtil.loadMappedFile(context, "furniture_classifier_v2.tflite")
        Interpreter(model, Interpreter.Options().apply {
            numThreads = 4
            useXNNPACK = true
        })
    }

    fun classify(bitmap: Bitmap): List<FurnitureClassification> {
        val resized = Bitmap.createScaledBitmap(bitmap, 224, 224, true)
        val input = TensorImage.fromBitmap(resized)
        val output = TensorBuffer.createFixedSize(intArrayOf(1, NUM_CLASSES), DataType.FLOAT32)

        interpreter.run(input.buffer, output.buffer)

        return output.floatArray
            .mapIndexed { index, score -> FurnitureClassification(LABELS[index], score) }
            .filter { it.score > 0.1f }
            .sortedByDescending { it.score }
    }
}

Для iOS — Core ML. CLIP позволяет определять стиль через текстовые промпты:

// iOS: CLIP-based style detection через Core ML
// CLIP модель конвертирована в .mlpackage
func detectStyle(_ image: UIImage) async throws -> [StyleScore] {
    let styleDescriptions = [
        "scandinavian minimalist furniture",
        "industrial loft style furniture",
        "classic traditional furniture",
        "mid-century modern furniture",
        "boho eclectic furniture"
    ]

    // CLIP сравнивает image embedding с text embeddings стилей
    let imageEmbedding = try await clipEncoder.encodeImage(image)
    return styleDescriptions.enumerated().map { i, desc in
        let textEmbedding = clipEncoder.encodeText(desc)
        let similarity = cosineSimilarity(imageEmbedding, textEmbedding)
        return StyleScore(style: desc, score: similarity)
    }.sorted { $0.score > $1.score }
}

Как работает поиск аналогов по каталогу?

Эмбеддинги товаров хранятся в векторной БД (например, FAISS или Pinecone). Поиск включает несколько этапов:

  1. Извлечение эмбеддинга: изображение пользователя проходит через ту же модель, что и каталог.
  2. Векторный поиск: косинусное расстояние до всех эмбеддингов каталога.
  3. Применение фильтров: отсев по категории, стилю, материалу, цвету, размеру и цене.
  4. Постобработка: сортировка по схожести и вывод топ-10 результатов.
struct FurnitureSearchFilters {
    let category: FurnitureCategory
    let style: StyleTag?
    let colorFamily: ColorFamily?        // warm, cool, neutral
    let material: MaterialType?          // wood, metal, upholstered
    let maxDimensionClass: SizeClass?    // compact, standard, large
    let priceRange: ClosedRange<Int>?
    let inStockOnly: Bool
}

Процесс интеграции

Внедрение функции распознавания и поиска аналогов проходит несколько этапов:

Подробнее об этапах
  1. Анализ каталога: оценка объёма изображений, категорий, стилей.
  2. Подготовка данных: разметка 200–500 изображений на категорию/стиль (если требуется дообучение).
  3. Обучение модели: Transfer Learning на TensorFlow/Keras или Create ML.
  4. Интеграция в приложение: подключение TFLite/Core ML, настройка векторного хранилища.
  5. Тестирование: A/B тест точности распознавания и скорости поиска.
  6. Деплой: релиз через App Store/Google Play, мониторинг.

Минимально жизнеспособный продукт (MVP) можно запустить за 1 неделю, используя готовое API распознавания и облачное векторное хранилище. Полное решение с собственной моделью, CLIP и AR-размерами занимает 1–2 месяца. Например, для одного из клиентов с каталогом 10 000 товаров мы дообучили MobileNetV3 на 500 изображениях на категорию. Точность классификации выросла с 72% до 94%.

Объем работ

  • MVP: интеграция с готовым API (Google Cloud Vision + векторный поиск) — срок от 1 недели.
  • Полное решение: дообученная TFLite/CoreML модель, CLIP-классификатор стиля, векторное хранилище с фильтрами, AR-размеры (LiDAR) — срок 1–2 месяца.
  • Документация по модели и API.
  • Обучение команды заказчика.
  • Пост-релизная поддержка 2 недели.

Наша команда имеет 7+ лет опыта в мобильной разработке и машинном обучении. Мы выполнили 30+ проектов по распознаванию изображений. Гарантируем качество: модель будет работать офлайн, без задержек. Если вы хотите реализовать аналогичную функцию, свяжитесь с нами — мы подберём оптимальное решение. Получите консультацию по интеграции — оценим ваш проект бесплатно.

AI и ML в мобильных приложениях: CoreML, TFLite и on-device модели

Мы различаем два принципиально разных подхода: приложение с on-device AI и приложение, которое просто вызывает облачное API. Первое работает без интернета, не отправляет данные пользователя на сторонние серверы и отвечает за 50 миллисекунд. Второе зависит от задержки сети и тарифного плана. Выбор архитектуры — ключевой этап, который напрямую влияет на стоимость, приватность и пользовательский опыт. Наш опыт показывает: в 70% проектов on-device инференс оказывается дешевле в долгосрочной перспективе за счёт исключения серверных затрат.

Как выбрать между CoreML и TFLite для on-device инференса?

CoreML — нативный фреймворк Apple для запуска ML-моделей на устройстве. Поддерживает Neural Engine (начиная с A11 Bionic), GPU и CPU как fallback. Модели конвертируются в формат .mlmodel через coremltools из PyTorch, ONNX или TensorFlow. Конвертация — не всегда тривиальна: кастомные слои требуют реализации MLCustomLayer, а квантизация до INT8 иногда заметно роняет точность на специфических данных. Мы гарантируем, что итоговая модель проходит валидацию на реальных данных до и после конвертации.

TensorFlow Lite — кросс-платформенная альтернатива для Android и Flutter. На Android использует NNAPI (Neural Networks API) для хардварного ускорения — с Android 10 NNAPI стабильнее, до этого лучше явно использовать GPU delegate через GpuDelegate. Типичная ошибка: модель обучена на нормализованных данных в диапазоне [0,1], а в приложении на вход подаётся [0,255] — инференс работает, но с бессмысленными результатами без ошибки. Мы включаем модуль автоматической валидации входных данных в SDK.

Для задач классификации изображений, детекции объектов и сегментации доступны готовые оптимизированные модели. YOLOv8 в CoreML формате запускает детекцию кадра 640×640 за 15–20 мс на iPhone 14 Neural Engine. MobileNetV3 на TFLite с GPU delegate — около 8 мс на Pixel 7 при классификации.

Параметр CoreML TFLite
Платформы iOS, macOS, watchOS Android, iOS, Linux, embedded
Хардварное ускорение Neural Engine, GPU, CPU NNAPI, GPU (OpenCL/OpenGL), CPU
Поддержка квантизации FP16, INT8 (с coremltools) FP16, INT8, dynamic range
Кастомные операции Через MLCustomLayer (Swift) Через делегаты (Java/Kotlin)
Размер бандла модели ~3–5 МБ (MobileNetV2 quantized) ~2–4 МБ

Что делать, если нужна генерация текста на устройстве?

Запуск небольших языковых моделей на устройстве стал реальностью в последние несколько лет. Apple Intelligence использует собственные модели через Private Cloud Compute, но для сторонних разработчиков доступны другие пути.

llama.cpp с Metal backend на iOS — работающий подход для phi-3-mini (3.8B параметров, 4-bit квантизация, ~2.3 ГБ). Инференс: 15–25 токенов/секунду на iPhone 15 Pro. Для интеграции в Swift используем Swift Package llama.swift или обёртку через C-интерфейс llama.h. Бинарник к приложению не прикладываем — модель скачивается при первом запуске и хранится в Application Support. Наши сертифицированные разработчики настраивают инкрементальную загрузку, чтобы не блокировать первый запуск.

На Android аналог — Google AI Edge (бывший MediaPipe LLM Inference API) с поддержкой Gemma-2B. Работает через GPU delegate, на Tensor G3 чипе Pixel 8 Pro — около 20 токенов/секунду.

Ограничения реальны: модели больше 4B параметров на мобильных устройствах по-прежнему медленны. Для сложных задач рассуждения on-device LLM уступает GPT-4o в качестве. Гибридный подход — on-device для коротких задач и приватных данных, облако для сложных запросов — часто оптимален. Оценим ваш кейс и предложим баланс производительности и приватности — пишите.

Интеграция OpenAI API и других облачных моделей

Для сценариев, где cloud inference допустим, интеграция OpenAI, Anthropic или Google Gemini — это HTTP клиент + streaming SSE. В Swift удобно через AsyncThrowingStream для стриминговых ответов. В Kotlin — через Flow.

Критически важно: API-ключи никогда не хранятся в бандле приложения. Даже обфусцированный ключ извлекается из IPA за 10 минут через strings или frida. Правильная архитектура: мобильное приложение → собственный backend → OpenAI API. Backend контролирует rate limiting, логирует запросы, защищает ключ.

Что входит в работу (deliverables)

  • Обученная и квантизированная модель под целевое устройство (документация по метрикам)
  • SDK для интеграции (Swift/Kotlin/Flutter) с примерами вызова
  • Тесты производительности на 3–5 реальных устройствах
  • Инструкция по обновлению модели OTA
  • Поддержка при прохождении модерации App Store / Google Play (проверка соответствия Guidelines 4.2, 5.1)
  • 2 недели технической поддержки после релиза

Типичный пайплайн проекта

  1. Анализ задачи — замеряем latency, privacy, size, поддерживаемые устройства.
  2. Прототипирование модели — в Python, оценка accuracy на целевых данных.
  3. Конвертация и квантизация — под CoreML/TFLite с валидацией.
  4. Интеграция в приложение — модель оборачивается в сервисный слой (легко подменять CoreML → TFLite → облако).
  5. Тестирование — на реальных девайсах, замер FPS, RAM, батареи.
  6. Деплой — через TestFlight / Firebase App Distribution, мониторинг метрик.

Сроки: интеграция готовой CoreML/TFLite модели — 1–2 недели, разработка кастомной модели с мобильной оптимизацией — от 6 недель, on-device LLM чат с персонализацией — 4–8 недель.

Почему мы беремся за сложные кейсы?

10+ лет опыта в мобильной разработке, 50+ внедрённых AI/ML решений, гарантия совместимости с актуальными версиями iOS и Android. Все проекты проходят code review и нагрузочное тестирование. В стоимость уже входит подготовка документации для модерации и обучение вашей команды.

Свяжитесь с нами — мы поможем выбрать архитектуру и внедрить ML в ваше приложение под ключ. Закажите аудит существующего решения — бесплатно оценим потенциал экономии серверных затрат (в некоторых проектах экономия достигает $10k в месяц).