Module / AI Search

SiteZilla Image Searcher — AI-пошук товарів за фото для OpenCart

Локальний пошук товарів за фотографією, URL, drag-and-drop або зображенням із буфера з індексацією каталогу у vector DB.

opencart_module stable v0.1.0
Версія OpenCartOpenCart 2.3 Спосіб встановленняЧерез адмін-панель РозповсюдженняПлатно

Що входить

Пошук за фотоOpenCart 2.3Локальний AI serverQdrant / Vector DBBatch indexingУкраїнськаросійськаанглійська

SiteZilla Image Searcher додає в OpenCart 2.3 пошук товарів за зображенням. Покупець може завантажити фотографію, перетягнути файл у модальне вікно, вставити картинку з буфера обміну або передати прямий URL. Модуль надсилає зображення на локальний AI-сервер, отримує список схожих product_id та показує повноцінні картки товарів засобами самого OpenCart.

Що бачить покупець

Біля звичайного пошуку з’являється окрема кнопка пошуку за фото. Вона відкриває адаптивне модальне вікно, ізольоване від стандартного Journal/OpenCart typeahead. Користувач додає зображення одним із доступних способів, бачить попередній перегляд і запускає пошук.

Файл із пристрою

Підтримуються дозволені адміністратором формати, стандартно JPG, JPEG, PNG та WEBP.

Drag-and-drop

Фотографію можна перетягнути безпосередньо в область завантаження.

Буфер обміну

Користувач може вставити скопійоване зображення без попереднього збереження у файл.

Прямий URL

Окреме поле дозволяє передати посилання на доступне зображення.

Як формуються результати

AI-сервер повертає масив результатів у форматі {product_id, score} або список product_ids. Модуль нормалізує відповідь, групує дублікати за товаром, сортує позиції за оцінкою схожості та відсіює результати нижче встановленого min_score. Після цього OpenCart сам завантажує назву, ціну, акційну ціну, опис, посилання і мініатюру через стандартну модель каталогу.

Елемент карткиДжерелоКерування
Фото, назва, описКаталог OpenCartАвтоматично
Звичайна та акційна цінаМодель товару OpenCartАвтоматично
Відсоток схожостіScore AI-сервераМожна приховати
Кнопка «До кошика»Стандартний cart.add()Увімкнення в адмінці
Перегляд товаруSEO-посилання товаруУвімкнення в адмінці
Обране та порівнянняСтандартні функції OpenCartОкремі перемикачі

Локальний AI-сервер

OpenCart-модуль не генерує embeddings самостійно. Він підключається до окремого HTTP-сервісу, який приймає фотографії, будує вектори ознак і працює з векторною базою. Адреса сервера, API-ключ і timeout задаються в адміністративній частині.

  1. OpenCart готує товар

    Формується payload із product_id, головним і додатковими зображеннями, їхніми hash, назвою, model, SKU, категоріями, виробником, статусом, кількістю, мовою та магазином.

  2. AI-сервер індексує зображення

    Сервіс отримує POST /index/product, обчислює embeddings і записує точки у Qdrant або іншу vector DB.

  3. Покупець надсилає фото

    Модуль викликає POST /search/image та передає limit, min_score, language_id, store_id, status, категорію й ознаку наявності.

  4. OpenCart рендерить товари

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

Підтримувані API-методи

МетодEndpointПризначення
GET/healthПеревірка доступності AI-сервера
GET/statsСтатистика серверного індексу
POST/index/productДодавання або оновлення товару та його зображень
POST/search/imageПошук найближчих товарів за завантаженим зображенням
POST/delete/productВидалення точок товару з векторного індексу

Індексація каталогу

Адміністратор може відправити один конкретний товар, попередньо переглянути сформований JSON payload або запустити пакетну обробку каталогу. Стан кожного зображення зберігається локально, тому можна відрізнити нові, проіндексовані, змінені, пропущені, видалені та помилкові записи.

Фільтри індексації

  • один або кілька виробників;
  • одна або кілька категорій;
  • опційне включення підкатегорій;
  • пошук за Product ID, model, SKU або назвою;
  • тільки активні, тільки вимкнені або всі товари;
  • тільки в наявності, тільки відсутні або всі;
  • товари з головним, додатковим або будь-яким зображенням;
  • за станом локального індексу: not indexed, indexed, error, skipped, deleted або changed;
  • розмір пакета від 1 до 100 товарів;
  • максимальна кількість товарів за запуск;
  • пауза між пакетами для зменшення навантаження.

Попередній перегляд перед запуском

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

Адміністративна діагностика

Модуль створює локальні таблиці індексу, журналу та API-викликів. Адміністратор бачить дату, endpoint, HTTP-статус, product_id, відповідь backend і текст помилки. Також доступні перевірка /health, запит /stats, очищення журналу та тестовий пошук.

Локальна таблицяЩо зберігається
oc_sitezilla_image_searcher_indexproduct_id, image_path, hash, point ID, модель вектора, версія, статус, тестовий score та остання помилка
oc_sitezilla_image_searcher_logтип події, повідомлення та дата
oc_sitezilla_image_searcher_api_callendpoint, HTTP-статус, product_id, відповідь і помилка

Налаштування пошуку

Для фронтенду можна визначити кількість результатів, мінімальний score, максимальний розмір файлу, дозволені типи зображень, категорію пошуку та правило «тільки в наявності». URL-пошук, вставка з буфера й drag-and-drop вмикаються незалежно один від одного.

Дизайн і теми

У комплекті передбачено шістнадцять готових кольорових тем: green, pink, rose, coral, peach, apricot, mint, sage, olive, sky, azure, lavender, lilac, berry, graphite та cocoa. Окремо можна задати основний колір, hover, м’який фон і колір тексту кнопки. Підписи кнопки та заголовок модального вікна підтримують мовні значення.

Desktop

Широке модальне вікно, зона завантаження, preview та картки результатів у сітці.

Tablet

Блоки перебудовуються в одну колонку, а картки зберігають читабельність.

Mobile

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

Мови інтерфейсу

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

Безпека та валідація

  • перевірка дозволу modify для адміністративних AJAX-дій;
  • валідація розміру завантаження;
  • перевірка реального MIME через getimagesize();
  • обмеження дозволених форматів;
  • перевірка HTTP/HTTPS URL;
  • API key для звернення до backend;
  • контроль timeout;
  • зручний режим debug, який можна вимкнути на production.

Що входить у OpenCart-частину

  • контролер і шаблон адміністративної сторінки;
  • українська, російська та англійська локалізації;
  • frontend-кнопка, модальне вікно і рендер результатів;
  • HTTP-клієнт для AI API;
  • OCMOD-вставка кнопки біля стандартного або Journal-пошуку;
  • створення службових таблиць;
  • інструменти індексації, фільтрації та журналювання.

Що потрібно окремо

Для реальної роботи необхідний окремий AI backend, який завантажує модель комп’ютерного зору, генерує embeddings і взаємодіє з Qdrant або іншою vector DB. Його можна розгорнути на окремій Ubuntu VM, у Docker або на виділеному сервері. Ресурси залежать від моделі, розміру каталогу, кількості зображень і потрібної швидкості.

Рекомендована послідовність впровадження

  1. Аудит каталогу

    Оцінити кількість товарів і фотографій, формати, дублікати, якість зображень та структуру категорій.

  2. Розгортання backend

    Підняти API, модель embeddings і vector DB, додати healthcheck та API key.

  3. Тестова індексація

    Відправити 10–50 товарів, перевірити payload, відповіді й якість найближчих сусідів.

  4. Підбір threshold

    Налаштувати min_score та limit на реальних фотографіях користувачів.

  5. Повна індексація

    Запустити пакетну обробку з безпечним batch size і паузами.

  6. Запуск на фронтенді

    Увімкнути кнопку, перевірити мобільний вигляд, аналітику та журнал помилок.

Приклади сценаріїв

Одяг і взуття

Пошук схожої моделі за фотографією, навіть коли користувач не знає артикул чи колір.

Запчастини

Пошук деталі за формою, роз’ємами або зовнішнім виглядом.

Меблі та декор

Підбір виробів із близьким стилем, кольором і силуетом.

Маркетплейс

Швидкий перехід від фотографії покупця до набору найближчих пропозицій.

Обмеження поточної версії

  • якість залежить від обраної embedding-моделі та фотографій каталогу;
  • AI backend не входить у звичайний OpenCart runtime і розгортається окремо;
  • cron endpoint у поточній базі підтверджує доступ, а повне керування індексацією виконується в адмінці;
  • точне видалення й синхронізація потребують узгодженого контракту з backend;
  • для великого каталогу потрібні черги, контроль повторів і моніторинг ресурсів.

Поширені запитання

Чи працює модуль без Google Vision?

Так. Ця версія спеціально відокремлена від старої Google Vision-реалізації та очікує локальний AI API.

Чи можна використовувати Qdrant?

Так. README прямо передбачає Qdrant або іншу векторну базу, а конкретна реалізація залишається на стороні AI-сервера.

Чи індексуються додаткові фото?

Так. Кількість додаткових зображень задається в налаштуваннях.

Чи можна обмежити пошук категорією?

Так. Для фронтенду доступний category_id, а для індексації — вибір кількох категорій і включення підкатегорій.

Чи показується відсоток схожості?

Так, але badge можна вимкнути в адміністративній частині.

Чи підтримується Journal?

OCMOD передбачає вставку кнопки біля стандартного header search і Journal search. Після встановлення потрібно оновити модифікації та перевірити конкретну тему.

Потрібен пошук товарів за фото?

Надішліть версію OpenCart, тему, кількість товарів і фотографій, а також інформацію про сервер. Після цього можна оцінити AI backend, індексацію та адаптацію фронтенду.

Обговорити впровадження

Демонстрація всіх блоків сторінки модуля

Цей імпорт навмисно заповнений максимально щільно: картка, галерея, SEO, технічні атрибути, довгий HTML-опис і всі типи конструктора content_blocks.

Призначення

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

  • мінімум змін у каталозі;
  • окремий backend;
  • керування через знайому адмінку;
  • адаптивний frontend.
Модальне вікно пошуку товару за фото
Файл, URL, drag-and-drop і вставка з буфера в одному сценарії

Пошук без назви товару

Користувач додає фотографію та отримує список схожих товарів. Відсоток схожості, кнопка кошика, перегляд, wishlist і compare налаштовуються окремо.

Вигода: менше тупикових запитів у каталозі.

Результати OpenCart

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

Результати OpenCart

Чотири способи передати зображення

Файл

Завантаження JPG, JPEG, PNG або WEBP із пристрою.

URL

Пошук за прямим HTTP/HTTPS посиланням на картинку.

Буфер

Вставка скопійованого зображення без збереження.

Drag-and-drop

Перетягування фотографії в активну область модального вікна.

Демонстраційні показники великого каталогу

12 480 проіндексованих товарів
38 900 векторів зображень
0.20 мінімальний score
12 результатів за запит
Принцип архітектури
OpenCart керує товарами, AI-сервер знаходить схожість, а покупець бачить звичайні актуальні картки магазину.
Команда SiteZilla

Адміністративна панель

Адміністративні налаштування SiteZilla Image Searcher
Сервер, frontend, індексація, фільтри, логи й діагностика

Групи налаштувань

AI-сервер

Base URL, API key, timeout, /health і /stats.

Пошук

Limit, min_score, MIME, розмір файлу, категорія та залишок.

Дизайн

16 пресетів, кастомні кольори й локалізовані підписи.

Індекс

Головне фото, додаткові фото, batch і фільтри.

Логи

Події модуля, статуси товарів і помилки індексації.

API calls

Endpoint, HTTP status, product_id, response та error.

Безпечна пакетна індексація

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

Фільтри зберігаються у налаштуваннях модуля.

Фільтри каталогу

Виробники, категорії, підкатегорії, status, stock, image state і локальний index state.

Фільтри каталогу

Стани локального індексу

СтатусЗначення
not_indexedтовар ще не відправлявся
indexedbackend прийняв товар
changedhash фотографії змінився
skippedнемає придатних зображень
errorпомилка OpenCart або AI API
deletedтовар позначено видаленим у vector DB

Технічна схема

Архітектура OpenCart AI server Qdrant
OpenCart передає дані через HTTP API, AI-сервер працює з векторною базою

Контракт backend API

GET /health

Швидка перевірка доступності backend.

GET /stats

Статистика серверного індексу.

POST /index/product

Індексація товару та масиву його зображень.

POST /search/image

Пошук найближчих product_id за файлом або URL.

POST /delete/product

Видалення векторних точок конкретного товару.

API key

Авторизація запитів між магазином і backend.

AI backend не є частиною PHP-процесу OpenCart. Його потрібно розгорнути окремо — наприклад, у Docker на Ubuntu VM — і підключити до Qdrant або іншої vector DB.

Мобільний вигляд

Мобільний пошук товарів за фото
Послідовність: додати фото, запустити пошук, відкрити знайдений товар

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

  • модальне вікно займає майже всю доступну ширину;
  • зона завантаження й preview стають одноколонковими;
  • картки результатів переходять в один стовпець;
  • кнопки мають збільшені touch-зони;
  • додаткові дії рівномірно розподіляються по ширині.

Технічна діагностика

Журнал API викликів і помилок
Історія endpoint, HTTP-кодів, product_id та відповідей backend

Що контролює адміністратор

3 локальні службові таблиці
5 основних API endpoint
16 готових кольорових тем
3 мови інтерфейсу
Для чого потрібні логи
Векторний пошук складається з кількох систем. Журнал повинен показувати, на якому етапі виникла помилка: підготовка товару, HTTP-запит, модель embeddings чи vector DB.
Технічна примітка

Кому підходить модуль

Одяг

Пошук моделі за фото, силуетом і кольором.

Взуття

Підбір схожої пари без точного артикула.

Запчастини

Пошук деталі за формою та візуальними ознаками.

Меблі

Пошук схожих товарів за стилем і фактурою.

Чесні обмеження

  1. Результат залежить від embedding-моделі та якості фотографій.
  2. Backend і vector DB потрібно встановити окремо.
  3. Для великого каталогу потрібні черги, повторні спроби й моніторинг.
  4. Після OCMOD Refresh потрібно перевірити конкретну тему та Journal header search.
  5. Демонстраційні числа на цій сторінці не є виміряними показниками production-магазину.

Потрібно перевірити модуль на вашому каталозі?

Надішліть версію OpenCart, тему, кількість товарів і фотографій та доступні серверні ресурси. Ми підготуємо тестову індексацію і перевіримо якість пошуку.

Обговорити впровадження

Характеристики

Сумісність

Версія OpenCart
OpenCart 2.3
Версія PHP
PHP 7.4

Встановлення та вимоги

Спосіб встановлення
Через адмін-панель
Формат модифікації
OCMOD
Формат модифікації
Події

Ліцензування та розповсюдження

Розповсюдження
Платно
Обсяг ліцензії
Один сайт

Локалізація

Мови інтерфейсу
Англійська
Мови інтерфейсу
Українська
Мови інтерфейсу
Російська

Підтримка та оновлення

Період підтримки
12 місяців
Доступ до оновлень
12 місяців
Contact

Потрібен сайт, CRM або технічна доробка?

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

Технічна доробка Сайт або магазин CRM / адмінка