sabuj073/laravel-ecommerce-image-search

Ecommerce image search using OpenAI Vision + Embeddings API for Laravel

Maintainers

Package info

github.com/sabuj073/ecommerce-image-search

pkg:composer/sabuj073/laravel-ecommerce-image-search

Statistics

Installs: 0

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

dev-main 2026-03-10 05:19 UTC

This package is auto-updated.

Last update: 2026-03-10 05:27:33 UTC


README

Ecommerce এ ইমেজ দিয়ে প্রোডাক্ট খুঁজতে OpenAI Vision + Embeddings API ব্যবহার করুন।

Installation

composer require sabuj073/laravel-ecommerce-image-search
php artisan vendor:publish --tag=ecommerce-image-search-config

Configuration

.env:

OPENAI_API_KEY=sk-...
OPENAI_VISION_MODEL=gpt-4o-mini
OPENAI_EMBEDDING_MODEL=text-embedding-3-small
OPENAI_EMBEDDING_DIMENSION=1536

Flow

  1. প্রোডাক্টগুলোর জন্য একবার embedding বানান (title + description দিয়ে)।
  2. ইউজার ইমেজ আপলোড করলে সেই ইমেজের জন্য Vision দিয়ে বর্ণনা নিন, তারপর সেই বর্ণনার embedding নিন।
  3. প্রোডাক্ট embeddings এর সাথে cosine similarity দিয়ে মিলিয়ে টপ রেজাল্ট দিন।

Usage

ইমেজ থেকে সার্চ ভেক্টর:

use Sabuj073\EcommerceImageSearch\OpenAIImageSearch;

$search = app(OpenAIImageSearch::class);
$embedding = $search->embedImageForSearch('/path/to/uploaded.jpg');
// or URL: $search->embedImageForSearch('https://example.com/image.jpg');

টেক্সট থেকে embedding (প্রোডাক্ট সেভ করার সময়):

$embedding = $search->embedText($product->title . ' ' . $product->description);
// Save $embedding in products table (JSON column or separate table)

ইমেজ দিয়ে সরাসরি সার্চ:

$products = Product::all()->map(fn ($p) => [
    'id' => $p->id,
    'name' => $p->name,
    'embedding' => $p->embedding, // array from DB
])->toArray();

$results = $search->searchByImage(request()->file('image')->getRealPath(), $products, 10);
foreach ($results as $r) {
    echo $r['product']['name'] . ' - score: ' . $r['score'];
}

শুধু embedding দিয়ে সার্চ:

$results = $search->searchByEmbedding($queryEmbedding, $products, 10);

Cosine similarity (স্ট্যাটিক):

$sim = OpenAIImageSearch::cosineSimilarity($vecA, $vecB);

Database

প্রোডাক্ট টেবিলে embedding রাখতে একটা JSON/array column যোগ করুন:

$table->json('embedding')->nullable();

মাইগ্রেশন চালানোর পর প্রোডাক্ট আপডেট করার সময় embedText() দিয়ে embedding পেয়ে সেভ করুন।