2010-09-23 12 views
1

chercher une photo avec des couleurs dominantes en utilisant mysql est assez simple. en supposant que le r, g, les valeurs b des couleurs les plus dominantes de la photo est déjà stockée dans la base de données, cela pourrait se faire par exemple par quelque chose comme:comment implémenter la recherche de couleur avec sphinx?

SELECT * FROM colors 
WHERE ABS(dominant_r - :r) < :threshold 
AND  ABS(dominant_g - :g) < :threshold 
AND  ABS(dominant_b - :b) < :threshold 

Je me demande, si elle est de toute façon possible de stocker les couleurs en sphinx et effectuer l'interrogation en utilisant le moteur de recherche sphinx?

merci!

Répondre

1

J'ai fait une recherche de couleurs avec sphinx. C'est là http://code.google.com/p/hppg/. Comment ça marche? Très simple, pour chaque couleur je stocke ses couleurs dominantes dans la base de données. table de base de données, sorcière est utilisé pour l'indexation sphynx, a colonne nommée « couleurs », son contenu est rempli de la manière suivante:

/** 
    * This part was changed based on formula 
    * 
    * It fits here better than algorithm 
    * 
    * http://en.wikipedia.org/wiki/Tag_cloud 
    * 15400 is number of maximum matches based on indexed thumbnail size 120x130 px. 
    * */ 

    $max = 15400; 
    $min = 25; 
    $rmax = 50; 
    $rmin = 1; 

    $colorIndex = array(); 
    foreach ($colorsMaximumImage as $color) 
    { 
     $colorIndexString = trim(str_repeat(' pld'.$color['pallete_id'],round((($rmin*($color['count']-25))/($max-$min))*100))); 
     if ($colorIndexString != '') 
     $colorIndex[] = $colorIndexString; 
    } 

J'utilise le marquage formule ici, pour éviter l'indice très grand. Le nombre est le nombre de fois que l'objet personnalisé a été apparié. Cela fonctionne très bien, quelques exemples de sites en direct peuvent être trouvés sur la page d'accueil du projet. De cette façon, nous pouvons rechercher par couleur et mot-clé en même temps :). Actuellement j'expérimente encore pour obtenir le meilleur résultat ...

+0

mon approche est de générer un histogramme avec imagemagick et d'extraire les 10 couleurs les plus fréquentes et les 10 couleurs les plus dominantes et de les stocker dans mysql. donc je dois indexer 10 lignes pour chaque photo en sphinx - l'indice est assez énorme avec cette approche. vous pouvez le voir par exemple ici http://photo.clipdealer.com/media/499332 en cliquant sur l'une des "jauges de couleurs" dans la boîte d'info. merci pour votre réponse de toute façon, je lui donne un «oui» parce que c'est très utile pour moi. Merci beaucoup! – aurora

+0

Encore une chose. Sphinx depuis 0.9.9 support sélectionnez comme le filtrage. Donc, il conviendrait parfaitement à vos besoins. – Remdex

+0

Je travaille actuellement sur une solution à un problème similaire. Bien que les deux approches soient utiles, j'aimerais savoir si quelqu'un a trouvé un moyen de stocker toutes les informations de couleur sur chaque enregistrement (comme le fait Remdex) SANS avoir à utiliser une palette de couleurs prédéfinie. Ai-je raison de penser que la solution de Remdex ne permet que la recherche par correspondance exacte? –

Questions connexes