関連画像を表示
libpuzzle の Perl binding である Image::Libpuzzle を使って関連画像を実装してみた。pHash や avgHash も試してみたけど、どれが良いかというとなんともいえない。
現像パラメータ違いみたいな写真同士のものはちゃんとスコアが高く出ている気がするが、それ以外の場合はいまいち似ているとは言えないような感じで、いまいちよくわからない。基本的に同一画像判定用な気がするので、あまり大きな期待はできなそう。
SQLite スキーマ
CREATE TABLE images (
`id` INTEGER PRIMARY KEY,
`uri` TEXT NOT NULL,
`entry_id` INTEGER NOT NULL,
`sig` BLOB NOT NULL
);
CREATE UNIQUE INDEX index_images_uri ON images (`uri`, `entry_id`);
CREATE TABLE ngram (
image_id INTEGER NOT NULL,
word BLOB NOT NULL,
PRIMARY KEY (`image_id`, `word`)
) WITHOUT ROWID;
CREATE INDEX index_word_image_id ON ngram (`word`, `image_id`); こういう感じのスキーマ。複数のエントリに同じURLを貼ると無駄になるけど滅多にないので気にしない。
実装
Service::SimilarImage にだいたいまとめて実装した。SQL 自体は php - Libpuzzle Indexing millions of pictures? - Stack Overflow に書いてあるのとほぼ同じ。
関連エントリー
- SQLite の WITHOUT ROWID の効果測定 SQLite で「PRIMARY KEY」を《真のプライマリキー》とするには | tech - 氾濫原 の続きです。 以下のような簡単なベン...
- ブログのキャッシュバックエンドの変更 今までは Cache::FileCache によるファイルシステムキャッシュにしていたけど、いくつか問題があって SQLite にかえた フ...
- TF-IDFとコサイン類似度による類似エントリー機能の実装 TF-IDFによる類似エントリー機能の実装をしてみました。ほぼSQLiteですませるような構成です。 やっていることの概要 エントリーのHT...
- Lightroom のカタログを SQLite で読んで統計を出したりする .lrcat っていったい何なのか カタログファイルの実体である lrcat は SQLite の DB ファイルそのもの。sqlite3 ...
- SQLite で LOG や SQRT を使うには SQLite にはかなり基本的な算術演算関数しかない。追加で何かしらやるためには拡張 (Run-Time Loadable Extensio...
✖
✖
redeveloped タグをつけてる写真は過去の写真を演出… | Thu, Jul 13. 2017 - 氾濫原 をやろうと思って、画像ハッシュ化方法である pHash (64bit) avgHash (64bit) を試してみたけど、ウーンって感じだった。まぁまぁうまくいっている気もするけど、全然似てない写真の距離が近いこともある。
理由として想像すると
- pHash も avgHash も色情報を捨ててる
- 64bit (8x8) だと足りない
なので、色を考慮したハッシュ化をしたい。チャンネルごとに pHash にするとかなのかなあ。8x8 のままで RGB 3chとると単純に192bitになる。
もうちょっとコントロール可能にするなら、YCbCr にして、それぞれハミング距離を求めつつ、チャンネルごとに係数をかける (どの程度色情報を考慮するか決定する) とか?
関連エントリー
- GLSL の覚え書き シェーダープログラムはGPU内で動く。性質上並列(parallel)に実行される。 vertex shader 頂点ごとの処理内容。線分だっ...
- WSL2 の Ubuntu に gcc-arm-none-eabi apt では入らないので以下の arm のサイトから該当するものをダウンロードする https://developer.arm.com/to...
- Rock64 を買って golang で赤外線受信を試してみた Rock64 http://akizukidenshi.com/catalog/g/gM-12382/ というのを買ってみた。 とりあえず ...
- パスワード保存のベストプラクティスと bcrypt のメモ書き 考えてみるとほとんどパスワードを保存するコードを書いたことがない。現状のベストプラクティスを知らなかったのでメモ書き。 現状では bcryp...
- さくらのVPSにMondo Rescueのリストアができなかった (未解決) 前々から準備していて、いよいよ新しく契約を追加してリストアするぞ! と思ったらできませんでしたので顛末を記す。敗戦は惨め。 Ubuntu 1...
✖
✖
redeveloped タグをつけてる写真は過去の写真を演出を変えて再現像したものになってる。
なので、過去のエントリがあるならリンクを貼りたいなと思ったけど、日記のどこに貼ったかは全くわからないので難しい。しかも全て画像は Google Photos にある。
やるとしたら
- 一度日記内の画像を全てダウンロードして特徴量検出とインデックス化をする
- 日記保存時にも同様のことしつつ、類似画像を検索する
みたいになるのかなあ。「類似」といっても、現像パラメータの違いだけなので、ほとんど全く同じなんだよなあ。
関連エントリー
- Stable Diffusion 日記 #26 なんかどっかで見たことあるけど画像検索しても類似画像としては上がってこないのでモヤっとする感じの
- Google Photos 依存からの脱却 Google Photos が発狂してからと書いてから、いろいろ見積って画像をセルフホストすることに決めた。とにかくアップロード機能はあとで...
- Google Photos が発狂してから Google Photos が発狂して、Google Picker 経由でつけたリンクに認証がかかるようになったり、利用制限がかかるようにな...
- ✖ ↑ の写真 webp で Google Photos にアップロードしたんだけど、Chrome で見ても jpeg でしか配信されない。うー...
- Stable Diffusion 日記 #15 Stable Diffusion 遊びは生成者にとっては、イラストを描くというよりは、実質的には写真に近い。prompt でシーンはある程度...
✖
✖
Redis のメモリ消費量を見積る
実際に値をセットしてみて、そのキーの容量を求めることができるコマンドがある。
https://github.com/sripathikrishnan/redis-rdb-tools
- redis-memory-for-key [key]
このコマンドは DUMP key コマンドを発行した結果を再度 Python でパースしながら消費容量を計算している。割と面倒くさいことをして正確に出そうとしてる。
参考:ダメな方法
DUMP してサイズを見る
DUMP key して出てくる文字列のサイズを単純に見ると、これはファイルに書き出すときの形式になっており、文字列が LZF で圧縮されていたりする。
ついでにいうとキーや期限などのオーバーヘッドの容量が含まれない。
DEBUG OBJECT key の serializedlength
DUMP された結果のサイズを表示しているようで、DUMP と同様に圧縮されたサイズがでるっぽい。
関連エントリー
- DOM の KeyBoardEvent の e.keyCode とか e.which とかを文字列としてとりたいやつ 昔 keyString.js という KeyBoardEvent からなんとなく押されたキーの文字列表記になおすやつを書いたことがある。 h...
- ブログのキャッシュバックエンドの変更 今までは Cache::FileCache によるファイルシステムキャッシュにしていたけど、いくつか問題があって SQLite にかえた フ...
- Ruby の pack テンプレート文字列からそのデータサイズを求める pack のテンプレート文字列から、それを使ってパックした結果のサイズを求めたいということはありませんか。つまりやりたいことは sizeof...
- minimist でサブコマンド付きコマンドを実装する node.js 用のコマンドラインパーサである minimist は必要最低限かつわかりやすくていいですね。 しかもサブコマンド用のオプショ...
- NiZ Keyboard PLUM のキーマップを macOS や Linux から書き換える 前回 に引き続き NiZ のキーマップをごにょごにょする。 とりあえず表題の通り、キーマップの書きかえまではできた。 レポジトリ: http...





