こんにちは pon です。今日はRustで類似画像検知の実装方法を紹介します。 類似画像検知には様々な方法がありますが、今回は基礎的なアルゴリズムである Average Hash を使った類似画像判定を実装を紹介します。 実際に僕が作った個人サービスでも連写で取られた写真かどうかを判定する箇所で同じアルゴリズムが動いています。 筆者はRust初心者なのでもっと良い書き方や実装があれば教えてください! Average Hash とは 下記のような処理で画像をハッシュ化します。 上記のように画像を0と1だけの一次元配列に変換できれば、あとは0と1が一致している数が多いほど似ていると判断します。かなりシンプルなアルゴリズムですが、それなりに精度が出ます。連写で撮影された画像の判定なんかでは十分な精度が出ます。 下記の画像なんかは簡単に類似画像と判断できます。 Rust で類似画像検索を実装する
![Rust で実装する Average Hash を使った類似画像検索 - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/36efbdf1264784c0bedcc9ac3f76b13932fb312b/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Fadvent-calendar-ogp-background-7940cd1c8db80a7ec40711d90f43539e.jpg%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9UnVzdCUyMCVFMyU4MSVBNyVFNSVBRSU5RiVFOCVBMyU4NSVFMyU4MSU5OSVFMyU4MiU4QiUyMEF2ZXJhZ2UlMjBIYXNoJTIwJUUzJTgyJTkyJUU0JUJEJUJGJUUzJTgxJUEzJUUzJTgxJTlGJUU5JUExJTlFJUU0JUJDJUJDJUU3JTk0JUJCJUU1JTgzJThGJUU2JUE0JTlDJUU3JUI0JUEyJnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnR4dC1jb2xvcj0lMjMzQTNDM0MmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmcz1hZTdlMDI4MzNjZDU5YWE4YWYzMmI3ZGI3MjMyODUzOQ%26mark-x%3D120%26mark-y%3D96%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9OTcyJnR4dD0lNDBwbzNyaW4mdHh0LWNvbG9yPSUyMzNBM0MzQyZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT0zNiZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZzPTA0ZTA3YTE4OTdjYmNkOWIyMWExMjk1YWUwYzJmMjdl%26blend-x%3D120%26blend-y%3D500%26blend-mode%3Dnormal%26s%3D73a0e96964c0ffbccc994992278b6640)