sql >> データベース >  >> RDS >> Mysql

(純粋な)PHP/MySQLで類似の画像を検索する

    私はこれを正確に持っています 以前に同じ問題。

    私がしたことを自由にコピーしてください。うまくいけば、それがあなたの助けになる/あなたの問題を解決するでしょう。

    解決方法

    あなたが考えているのと同じように、失敗した私の最初のアイデアは、(サイズに関係なく)すべての画像に対して文字列を作成することになったということです。しかし、私はすぐにこれがあなたのデータベースを非常に速くいっぱいにすることを理解しました、そして効果的ではありませんでした。

    次のオプション(機能します)は、小さい画像( 5px など)でした アイデア)、そして私はまさにそれをしましたが、 10px * 10px 画像。各画像の「ハッシュ」を作成した方法は、 imagecolorat()でした。 機能。

    ここで、php.netを参照してください。

    rgbを受信したとき 画像の色は、最も近い 50に丸めました。 、そのため、色はあまり具体的ではありませんでした。その数( 50 )は、具体的な方法に応じて変更したいものです 検索を行いたい。

    例:

    // Pixel RGB
    rgb(105, 126, 225) // Original
    rgb(100, 150, 250) // After rounding numbers to nearest 50
    

    すべてのピクセルに対してこれを行った後( 10px * 10px 100個のrgb()が表示されます に戻って)、それらを配列に変換し、 base64_encode()としてデータベースに保存しました。 およびserialize()

    類似の画像を検索するときは、アップロードしたい画像に対してまったく同じプロセスを実行し、データベースから画像「ハッシュ」を抽出してすべてを比較し、一致する丸められたrgb<を確認しました。 / code>

    ヒント

    • 大きい その50 rgbにあります 丸め、あまり具体的ではない 検索は次のようになります(またはその逆)。

    • SQLが必要な場合 具体的には、追加/特定を保存する方がよい場合があります データベース内の画像に関する情報。これにより、データベース内で取得する検索を制限できます。 。アスペクト比が4:3の場合 、 4:3の周りの画像のみをプルします データベースから。 (など)

    • これを完全に5pxにするのは難しい場合があります * 5px 、したがって、提案は phpthumb 。構文で使用しました:

    幸運を祈る仲間、私が助けてくれることを願っています。



    1. PostgreSQLの日付に年を追加する

    2. Microsoft Access 2010、2013、2016、および2019チュートリアル

    3. BEGIN後のMySQLストアドプロシージャの構文エラー

    4. MySQLの2つの日付の違い