sabuj073 / laravel-ecommerce-image-search
Ecommerce image search using OpenAI Vision + Embeddings API for Laravel
Package info
github.com/sabuj073/ecommerce-image-search
pkg:composer/sabuj073/laravel-ecommerce-image-search
dev-main
2026-03-10 05:19 UTC
Requires
- php: ^8.1
- illuminate/http: ^10.0|^11.0
- illuminate/support: ^10.0|^11.0
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
- প্রোডাক্টগুলোর জন্য একবার embedding বানান (title + description দিয়ে)।
- ইউজার ইমেজ আপলোড করলে সেই ইমেজের জন্য Vision দিয়ে বর্ণনা নিন, তারপর সেই বর্ণনার embedding নিন।
- প্রোডাক্ট 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 পেয়ে সেভ করুন।