اذهب إلى المحتوى
  • 0

كيفية تنفيذ ميزة Image Similarity Search

أحمد مصطفى.

السؤال

السلام عليكم
انا اعمل على مشروع بلغه برمجه php 
وهناك جزئيه في الموقع تحتاج الى استخدام سكريبت بايثون

وهي انه يوجد لدي صور كثيرة (dataset images)
وأريد ان ارفع صورة او اختار صورة ومن خلال سكريبت بايثون يخرج لي الصور المشابهة لهذه الصورة وانا ساقوم بعرضها باستخدام php

كيف يمكنني تنفيذ هذا الاسكريبت وهل يوجد مكتبه جاهزة يمكن استخدامها 

وشكرا..

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

ستحتاج إلى مكتبات بايثون المتخصصة في معالجة الصور ومطابقتها، وواحدة من المكتبات الشائعة والمناسبة للغرض هي مكتبة OpenCV  ومكتبة scikit-image.

بعد تثبيت المكتبات:

pip install opencv-python
pip install scikit-image

عليك كتابة سكريبت يقوم بتحميل الصور من مجموعة البيانات dataset، واستخدام تقنيات مثل استخراج الميزات (feature extraction) لمقارنة الصور.

للتوضيح بمثال بسيط حول كيفية مقارنة الصور باستخدام OpenCV:

import cv2
import os
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity

def load_images_from_folder(folder):
    images = []
    for filename in os.listdir(folder):
        img = cv2.imread(os.path.join(folder, filename))
        if img is not None:
            images.append((filename, img))
    return images

def extract_features(image):
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    sift = cv2.SIFT_create()
    keypoints, descriptors = sift.detectAndCompute(gray, None)
    return descriptors

def find_similar_images(image_path, dataset_folder, top_n=5):
    input_image = cv2.imread(image_path)
    input_features = extract_features(input_image)

    dataset_images = load_images_from_folder(dataset_folder)
    similarities = []

    for filename, dataset_image in dataset_images:
        dataset_features = extract_features(dataset_image)
        if dataset_features is not None and input_features is not None:
            similarity = cosine_similarity(input_features, dataset_features)
            similarities.append((filename, np.mean(similarity)))

    similarities.sort(key=lambda x: x[1], reverse=True)
    return similarities[:top_n]

if __name__ == "__main__":
    dataset_folder = 'path/to/dataset'
    input_image_path = 'path/to/input/image.jpg'
    
    similar_images = find_similar_images(input_image_path, dataset_folder)
    print("Similar Images:")
    for filename, similarity in similar_images:
        print(f"Filename: {filename}, Similarity: {similarity}")

بعد ذلك تأتي خطوة دمج بايثون مع PHP، مثلاً من خلال استخدام shell_exec لتنفيذ سكريبت بايثون وإرجاع النتائج أو من خلال API بايثون أو subprocess في PHP اختر ما تريد، وللتوضيح ساستخدم shell_exec  كالتالي:

<?php
$input_image_path = 'path/to/input/image.jpg';
$output = shell_exec("python3 path/to/your/script.py $input_image_path");
echo "<pre>$output</pre>";
?>

بعد أن تحصل على قائمة الصور المشابهة من سكريبت بايثون، تستطيع عرض الصور باستخدام PHP، كالتالي:

<?php
$similar_images = json_decode($output, true);

echo "<h1>Similar Images:</h1>";
foreach ($similar_images as $image) {
    echo "<div>";
    echo "<img src='path/to/dataset/{$image['filename']}' alt='{$image['filename']}'>";
    echo "<p>Similarity: {$image['similarity']}</p>";
    echo "</div>";
}
?>

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

@Mustafa Suleiman

شكرا لك على الاجابة
انا عندي مشروع يحتوى على الاف الصور اعتقد انه هذه الطريقة ستحتاج وقتا طويلا للبحث واستخراج الصور المشاببة

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...