Looking to hire Laravel developers? Try LaraJobs

laravel-ecommerce-image-search maintained by sabuj073

Description
Ecommerce image search using OpenAI Vision + Embeddings API for Laravel
Last update
2026/03/10 06:19 (dev-main)
License
Links
Downloads
0

Comments
comments powered by Disqus

Laravel Ecommerce Image Search (OpenAI)

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 পেয়ে সেভ করুন।