RustConf:Rustを使ったイメージ処理のセッションを紹介
「セキュアなシステムのためのプログラミング言語」という肩書で紹介されることが多いRustだが、今回は画像認識をRustで行ったというセッションを紹介したい。プレゼンターはHugo Peixoto氏だ。Peixoto氏の経歴は自身のブログに短く紹介されているだけだが、現在はフリーランスのプログラマーということだろうか。
まず、処理の大まかな流れを説明した。ここではWebCamのストリームデータから任意の画像を抜き出す、抜き出された画像からカードの画像を抽出、そして同じようなカードをマスターとなるデータセットから同定、という流れだ。英語版の公式サイトにはAPIなどが用意されていなかったために、Rubyのスクリプトでスクレイピング(Webサイトからデータを抽出する技術)を行ってデータを用意したという。
認識する際のマスターデータとなるデータセットは、公式サイトのhttps://pkmncards.comを利用した。ここには約1万4千枚のカードが存在するという。
実際に取り込まれた写真は、影が写っていたり、バックグラウンドがテーブルだったりしたため、背景を白に統一し、影が写りこまないようにするなどの下準備を行ったことも解説された。ここではグレイスケールの画像とマスターデータセットを比較している。これが結果であって、ここに行き着くためにはどういう処理が必要か? を解説するのがこのセッションの目的だ。
取り込まれたカードの画像から画像の特徴をエッジとして抽出し、どの部分がカードなのか? を認識するための方法として、Sobel Operatorを紹介している。Sobel Operatorは「局所積和演算を行ってグラジエントの強度(微分値)を求める方法」である。C言語での実装を日本語で解説しているブログを紹介する。
参考:http://image.onishi-lab.jp/002.html
この記事は産総研の大西正輝氏によるもので大学生向けに画像処理を解説したものだ。この記事ではC言語で書かれているエッジ処理を、Peixoto氏のセッションではRustで書いたということになる。
その後にカードの画像の傾きを補正するという処理に移る。
その後にPerceptual Hashingというアルゴリズムを使って画像のハッシュ値を求め、それが同じか近似していれば同じカードと判断するという方法を紹介した。この重複する画像かどうかを判断する処理は、YouTubeなどでも著作権侵害などを防ぐためにも使われているという。
同定したいカードの中身を、カラーのままではなくバイナリー化することでハッシュとして比較するというのがポイントだ。
処理の概要は、カラー画像からグレイスケールに変換、エッジの検出、傾きの検出と補正、ハッシュを使ったマッチングということになる。
ただここで難しい状況に遭遇したとして紹介されたのが、同じカードであってもセット(日本語ではタイプ)が違うとカードを認識できないという問題だ。
これを認識するにはPerceptual Hashingでは上手くいかなかったとして、予め同じ画像をテンプレートとして用意して、それとの比較を行うという方法を取ったことを解説した。
ここから、実際にPCのWebCamの前にカードを出して認識させるデモを行った。表面に特殊な印刷がされているカードの同定には手間取っている感じはあるものの、ある程度の処理速度で画像認識処理が行われているのがわかる。
最後に、この画像認識プログラムで利用したライブラリーを紹介してセッションを終えた。約14分という短いセッションだが、画像処理という分野にもメモリーセーフで高速なRustが応用できることを紹介したことに意味があると思われる。
Rustで書かれた線形代数ライブラリーのnalgebraについては、公式サイトも存在するので参考にして欲しい。
nalgebra公式サイト:https://www.nalgebra.org/
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- KubeCon NA 2021開催。プレカンファレンスのWASM Dayの前半を紹介
- Kafka on Kubernetesを実現するStrimziに特化したカンファレンスStrimziCon 2024からキーノートを紹介
- CloudNative Days Fukuoka 2023、AIを用いたKubernetes運用のツールを解説するセッションを紹介
- CNDT2021、Kubernetes上のステートフルアプリに関する深い考察をゼットラボのエンジニアが解説
- TFXを使った機械学習パイプラインの構築(デプロイ編)
- WebAssemblyを取り巻く最新情報をMeetupから紹介(前半)
- ソースでわかる!ハッシング
- AI_dev Europe 2024から生成型AIのオープンさを概観するセッションを紹介
- CloudNative Days Spring 2021開催。CNCFのCTOが語るクラウドネイティブの近未来
- 日本初の「OpenShift Commons Gathering」がオンライン開催、キーパーソンが国内外におけるOpenShiftの新事例と推進戦略を語る