AI-класифікація фотографій у галереї мобільного застосунку

Користувачі губляться в тисячах знімків, а галерея гальмує та нагріває пристрій. Ми розробляємо AI-класифікацію фотографій під ключ: від аудиту галереї до передачі регламентів. Сортування за подіями, людьми та місцями скорочує час пошуку потрібного кадру в рази.

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
AI-класифікація фотографій у галереї мобільного застосунку
Середній
~5 днів
Часті запитання

Чому AI-класифікація фотографій ламається на реальних галереях

AI-класифікація фотографій на демо-стенді виглядає переконливо: десяток чистих знімків, охайні категорії, миттєвий відгук. На реальній галереї та сама модель розвалюється за лічені дні.

Користувач знімає серії по 10-20 кадрів підряд, половина з них — майже однакові, частина змазана на бігу, частина знята в темряві з шумом.

Модель бачить у цьому не «дублікати знімків», а різні зображення, і розмітка зображень перетворюється на хаос: та сама сцена розкидана по трьох категоріях, а поруч лежать кадри, які взагалі нікуди не потрапили.

Окрема біда — хибні категорії. Знімок їжі в теплому світлі від'їжджає в «документи», дитина в басейні — в «тварини», скриншот із текстом — у «пейзажі».

Чим більше файлів, тим помітніша помилка: при десятках тисяч знімків навіть 3-5% промахів дають тисячі фотографій не на своєму місці, і користувач перестає довіряти сортуванню галереї. Далі ламається пошук по фото: людина шукає «море», не знаходить, гортає вручну і йде з застосунку.

Є й суто інженерна сторона. Наївна реалізація проганяє через модель кожен файл при кожному відкритті галереї — час відгуку зростає лінійно і на великих обсягах стає нестерпним.

Розмиті та темні знімки додатково забивають індекс сміттєвими векторами, а дублікати плодять однакові записи, між якими модель не може вибрати.

Розбираємо, як це закривається: де ставити фільтр якості до моделі, як згортати серії в один кадр, чим обмежувати хибні спрацювання і як рахувати ознаки один раз, а не при кожному показі.

Що дає коректна класифікація: ефект у метриках

Класифікація перестає бути «фічею для галочки», коли її ефект видно в метриках продукту. Ми дивимося на три вимірювані величини: швидкість пошуку потрібного знімка, частку помилкових категорій і час обробки нової партії фотографій.

Саме вони показують, чи окупається модель на реальній галереї користувача, а не на демо-наборі з десятка картинок.

Швидкість пошуку — перше, що відчуває людина. Коли знімки розкладені за категоріями на пристрої, а не відправлені на сервер, результат з'являється за частки секунди: користувач вводить «документи» або «чеки» і одразу бачить потрібне.

На галереї в кілька тисяч знімків це різниця між «гортаю і чекаю» та «знайшов з першого запиту» — і саме вона утримує людину в застосунку.

Точність категорій вимірюється часткою помилкових спрацювань: скільки знімків потрапило не до своєї групи. Ми тримаємо цей показник низьким завдяки дообученню на фотографіях конкретного продукту, а не на універсальному наборі.

Чим менше помилок, тим рідше користувач перестає довіряти добіркам і повертається до ручного гортання.

Час обробки нової партії знімків визначає, як швидко галерея залишається актуальною. Класифікація йде інкрементально: обробляється тільки те, що додалося, а не вся бібліотека заново.

Тому навіть після зйомки сотні нових кадрів добірки оновлюються без помітної паузи, а навантаження на пристрій залишається передбачуваним.

Ці три метрики пов'язані: швидкий пошук марний при високій частці помилок, а висока точність втрачає сенс, якщо обробка гальмує інтерфейс. Ми налаштовуємо їх спільно і перевіряємо на реальних сценаріях — так користувацький досвід стає вимірюваним, а не декларативним.

Як влаштована AI-класифікація фотографій у мобільному застосунку

Класифікація починається з вилучення ознак: модель проганяє знімок і віддає вектор — набір чисел, що описують вміст кадру. За ним знімки й порівнюються між собою, а не за іменем файлу чи датою.

Для цього використовуємо Core ML на iOS та аналог на Android — inference відбувається на пристрої, фото не залишають телефон.

Далі вектори потрапляють в індекс галереї — локальне сховище, де кожному знімку відповідає запис із вектором і метаданими. Групування знімків будується на близькості векторів: схожі кадри збираються в кластери, які користувач бачить як «Пляж», «Документи», «Діти».

Індекс перебудовується інкрементально — при додаванні нових фото обробляються лише вони, а не вся бібліотека.

Синхронізація між пристроями — найчутливіша ділянка. Вектори передаються на сервер у стисненому вигляді й прив'язуються до ідентифікатора знімка, а не до самого файлу: так метадані не розростаються до розмірів галереї.

Якщо користувач видалив фото на одному пристрої, запис інвалідується за ідентифікатором, і кластер перезбирається без нього.

На практиці це дає галерею, яка шукає за змістом, а не за тегами: «покажи чеки за місяць» працює без ручної розмітки. Точність групування залежить від якості моделі — ми дообучаємо її на реальних знімках замовника, а не залишаємо базову.

Порівняння підходів: на пристрої, у хмарі, гібридно

Вибір між обробкою на пристрої, у хмарі та гібридною схемою визначається не «модністю» підходу, а тим, де фізично лежать фото і скільки обчислень потребує модель.

Обробка на пристрої виконується на нейромережевому прискорювачі телефона: зображення не покидає галерею, приватність фото зберігається за замовчуванням, затримка мінімальна, але модель обмежена пам'яттю та тепловим бюджетом пристрою.

Хмарна обробка знімає ці обмеження — доступні великі моделі та регулярне оновлення словника класів, зате кожен кадр іде на сервер, а розпізнавання залежить від мережі.

Варіант Коли підходить Обмеження
На пристрої Приватність критична, потрібна робота офлайн, класи стабільні Модель урізана за розміром, слабкі пристрої гріються й гальмують
У хмарі Велика бібліотека класів, часті оновлення моделі, потужна аналітика Затримка залежить від каналу, витрати на трафік і обчислення зростають з обсягом
Гібридно Потрібен баланс: швидкий відгук і розумні сценарії Складніша логіка: два контури, синхронізація результатів, розподіл за типами кадрів

Гібридна схема зазвичай виглядає так: легка модель на пристрої розмічає основну масу знімків одразу, а спірні та рідкісні кадри надсилаються в хмару на дообогачення.

Це знижує навантаження на канал і зберігає приватність для чутливих фото, але потребує продуманого правила маршрутизації — інакше користувач побачить розбіжність між локальними та хмарними тегами.

Окремо варто закласти міграцію: зміна підходу не повинна ламати вже розмічену галерею. Ми проєктуємо схему так, щоб результати класифікації зберігалися окремо від вихідників і переіндексація проходила без втрати користувацьких правок.

Етапи впровадження: від аудиту галереї до передачі регламентів

Роботу починаємо з аудиту галереї: дивимося, що реально зберігається у користувачів — частка дублікатів і скриншотів, розкид роздільних здатностей, пошкоджені та недовантажені файли, розподіл за альбомами.

На цих даних будуємо схему таксономії: скільки класів заводимо, що йде в «інше», як обробляємо прикордонні випадки на кшталт селфі у дзеркалі або скриншота листування.

  1. Аудит галереї. Вивантажуємо знеособлену вибірку, рахуємо статистику за типами контенту та знаходимо класи, які класифікатор буде плутати. Результат — перелік категорій і критерії, за якими знімок належить до кожної.
  2. Проєктування схеми. Фіксуємо дерево категорій, правила пріоритету при збігу та поведінку при низькій впевненості: фото йде в «інше», а не у випадковий альбом.
  3. Налаштування класифікатора. Підбираємо модель під профіль галереї та обмеження пристрою, налаштовуємо поріг впевненості та правила групування. Частина обчислень іде на пристрої — фото не залишають телефон.
  4. Перевірка на реальних даних. Проганяємо класифікатор на вибірці, рахуємо частку правильних віднесень за кожною категорією та розбираємо помилки. Поріг і правила коригуємо до прийнятної точності.
  5. Інтеграція в застосунок. Вбудовуємо обробку у фонові задачі, щоб класифікація йшла під час заряджання і не заважала роботі інтерфейсу.
  6. Передача документації. Віддаємо регламенти: схему категорій, налаштування, порядок перенавчання та розбору спірних випадків.

Після передачі команда замовника може змінювати категорії та пороги без нашої участі. Опишіть задачу — повернемося з оцінкою та планом для вашої галереї.

Що замовник отримує на руки після впровадження

Впровадження AI-класифікації фотографій закінчується не демонстрацією працюючого прототипу, а передачею комплекту, за яким застосунок можна розвивати й супроводжувати без нас. Нижче — що саме фіксується в документах і репозиторіях на момент здачі.

  • Конфігурації моделі та сервісу класифікації. Файли параметрів інференсу, пороги впевненості за категоріями, правила віднесення знімка до «інше» — з коментарями, чому обрано саме такі значення.
  • Схеми даних. Структура зберігання ембедингів і міток, формат обміну між застосунком і сервісом, міграції при зміні таксономії категорій.
  • Політики доступу. Розмежування прав на читання метаданих, вивантаження датасету для донавчання, доступ до логів обробки; окремо — правила обробки користувацьких фото та строки їх зберігання.
  • Документація по моделі. Картка моделі: на яких даних навчалася, які категорії розрізняє впевнено, де помиляється, як інтерпретувати метрики якості на валідації.
  • Регламенти супроводу. Порядок донавчання при появі нових категорій, періодичність перевірки якості на свіжих знімках, правила відкату на попередню версію моделі.
  • Інструкції для команди замовника. Як запустити переіндексацію галереї, як читати звіти щодо частки нерозпізнаних фото, куди дивитися при зростанні часу обробки.
  • План розвитку. Список покращень з оцінкою впливу на якість — від розширення таксономії до підключення пошуку за вмістом знімка.

Кожен артефакт прив'язаний до конкретного сценарію експлуатації: оновлення категорій, розбір скарг на неправильне сортування, підготовка вибірки для донавчання.

Такий комплект дозволяє вашій команді вносити зміни самостійно, а нас підключати точково — на задачах, де потрібна переробка самої моделі.

Чим відрізняється класифікація на пристрої від хмарної обробки

Межа проходить по тому, де фізично лежать дані та обчислювальні ресурси.

При класифікації на пристрої модель працює прямо в застосунку: фото не покидає пам'ять телефона, інференс іде на нейропроцесорі або графічному прискорювачі, а результат — теги, групи, пошукові індекси — залишається локально.

При хмарній обробці знімок вирушає на сервер, там проганяється через модель і повертається розміткою. Звідси й розходяться всі чотири параметри: приватність, якість, затримка, трафік.

Приватність даних — головний аргумент на користь пристрою. Знімок не перетинає межу застосунку, немає передачі по мережі, немає зберігання на чужій стороні, а отже, немає й зобов'язань щодо захисту персональних даних у тому обсязі, який тягне за собою серверна обробка.

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

Якість моделі — те, за що платять хмарі. Серверна модель більша, навчається на свіжих даних і оновлюється без випуску нової версії застосунку. Локальна модель обмежена ресурсами телефона, тому її доводиться квантувати й урізати.

На типових категоріях — люди, їжа, тварини, пейзажі — різниця майже непомітна, але на рідкісних або специфічних класах хмара виграє.

Затримка обробки та трафік пов'язані напряму. Локальний інференс дає відгук за частки секунди й не залежить від якості зв'язку: розмітка з'являється, навіть коли телефон офлайн.

Хмара додає мережеве коло — на слабкому каналі це секунди очікування, а в роумінгу ще й витрата трафіку. При галереї в тисячі знімків різниця в трафіку стає відчутною.

На практиці межу ставлять не «або-або», а гібридно: базова класифікація йде на пристрої, а важкі або рідкісні випадки — коли користувач сам ініціює пошук за змістом — вирушають у хмару з явної згоди. Так приватність залишається за замовчуванням, а якість підключається там, де вона реально потрібна.

Кейс: як галерея на 40 000 знімків перестала гальмувати

Що було до змін

До нас прийшла команда з застосунком-галереєю: 40 000 знімків у активного користувача, класифікація виконувалася на пристрої в один потік прямо при відкритті розділу.

На холодному старті галерея показувала порожні плитки 4-6 секунд, пошук за категорією «документи» віддавав результат за 3,5 секунди, а частка помилкових категорій сягала 22% — знімки чеків і візитівок потрапляли в «інше». Користувачі просто гортали стрічку вручну, бо довіри до фільтрів не було.

Що змінили

Рознесли роботу на два етапи. Важку модель інференсу винесли у фонову чергу: вона обробляє нові знімки пачками, поки застосунок не на передньому плані, і не конкурує з відрисовкою інтерфейсу.

Легкий класифікатор за метаданими та мініатюрами дає попередню категорію одразу — користувач бачить результат миттєво, а точна мітка підставляється пізніше.

Результати інференсу складаємо в локальний індекс поруч із медіатекою, тому повторний запуск не перераховує вже оброблене.

Для помилкових категорій додали поріг впевненості: якщо модель не впевнена, знімок потрапляє в «нерозібране», а не у випадкову папку — це прибрало основну масу хибних спрацювань.

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

Метрики до і після

Показник До Після
Час пошуку за категорією 3,5 с 0,4 с
Частка помилкових категорій 22% 6%
Холодний старт галереї 4-6 с 1,2 с
Навантаження на пристрій при відкритті пікове, з просіданням кадрів рівне, без просідань

Окремо відстежували частку знімків у «нерозібраному» — вона тримається в межах 4-5% і слугує чесним індикатором якості моделі: зростання означає, що з'явився новий тип контенту, під який потрібне донавчання.

Обговоримо ваше завдання класифікації фотографій

Щоб повернутися з оцінкою та планом, а не із загальними словами, нам потрібні вихідні дані про вашу галерею.

Розкажіть, звідки надходять фотографії (камера, месенджери, імпорт із хмари), скільки їх в активного користувача та які категорії ви хочете виділяти — люди, документи, їжа, тварини, скриншоти.

Від цього залежить, чи будуємо ми класифікацію на готовій моделі, чи дообучаємо її під ваші сценарії.

Окремо уточнимо, де саме працює класифікація: на пристрої чи на сервері. Це впливає на приватність, швидкість відгуку та вимоги до підключення. Якщо фото не повинні залишати телефон, рахуємо на пристрої — тоді розмітка з'являється миттєво й без мережі.

  • Приклади фотографій із розміткою: 200-500 знімків по кожній категорії, якщо є — з поточними помилками класифікації.
  • Опис категорій: що вважаємо «документом», що «скриншотом», як бути з пограничними кадрами.
  • Поточний стек застосунку: платформа, мова, як влаштовано зберігання та відображення галереї.
  • Сценарій користувача: де показуємо категорії — у пошуку, в альбомах, у розумних добірках.
  • Обмеження: вимоги до приватності, робота офлайн, цільові пристрої.
  • Метрики успіху: яку частку кадрів класифікація повинна розмічати правильно і що вважаємо промахом.

За цими даними ми прикидаємо обсяг робіт, називаємо терміни та показуємо, де класифікація дасть ефект одразу, а де потребуватиме дообучення на ваших даних. Опишіть завдання — повернемося з оцінкою та планом.

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

Останні роботи

  • Розробка мобільного додатка для компанії FEEDME
    Розробка мобільного додатка для компанії FEEDME
    1010
  • Розробка мобільного додатку для компанії XOOMER
    Розробка мобільного додатку для компанії XOOMER
    903
  • Розробка мобільного додатку для компанії RHL
    Розробка мобільного додатку для компанії RHL
    1332
  • Розробка мобільного додатку для компанії ZIPPY
    Розробка мобільного додатку для компанії ZIPPY
    1180
  • Розробка мобільного додатку для компанії Affhome
    Розробка мобільного додатку для компанії Affhome
    1107
  • Розробка мобільного додатку для компанії FLAVORS
    Розробка мобільного додатку для компанії FLAVORS
    714