2023年のOpenCVの進化

最近はOpenCVを全然触ってなくて、情報を追いかけることも自然と無くなってきた今日この頃ですが、このブログでOpenCVを最後に扱ったのは2019年のこちらのONNXサポートについての記事でした。

2019年以降は一切使ってないかというとそんなことは無くて、簡単な画像処理が必要な所では小さく活躍してはいました。ただ、近年は画像処理と言っても機械学習が前提のタスクがほとんどで、PyTorchやTensorFlowなどの機械学習フレームワーク側で提供されている画像処理モジュールの品質が充実してきたこともあり、自然とOpenCV依存を無くす方向で開発することも増えてきたようにも思います。

OpenCVには学生時代からお世話になってますし、昔はバグ報告とかOpenCV関連書籍の技術監修っぽいこともしたこともありましたので、最近でも草葉の陰から応援してはいました。

とはいえ冒頭に書いたとおり、2019年からOpenCVについて情報を追ってなかったので、最近はどんな感じなんだろうと思って2023年の動向を軽く調べてみました。基本的には公式のリリースノートを追ってみます。ここでは3.x系列は割愛して4.x系列のみ扱います。

2023年の更新はOpenCV 4.8系のリリース分になるようですが気になるところをざっくりピックアップすると、

機械学習関連

TensorFlow Liteモデルのサポート
Protocol Buffer依存の排除
ONNXモデルにおける対応レイヤー拡充・改善
ARM環境でのFP16対応などハードウェア適応
Vulkanバックエンドの性能改善

大きな目玉機能の追加は無かったようですが着実に改善を継続しているようです。いつの間にかCANN(Compute Architecture of Neural Networks)のようなニッチな環境対応等もされていてなかなか面白いですね。マルチプラットフォーム対応はOpenCVの強みの一つなので今後も拡大していって欲しいです。

G-API

OpenVINO環境でのバージョンアップ追従
ONNX RT環境でのバージョンアップ追従
Pythonバインディングのインタフェース拡充やバグフィックス

G-APIはOpenCV 4.0での目玉機能の一つでしたね。こちらについても2018年のリリース直後に記事を書いてました。

G-APIは一連の処理を計算グラフとして構築・適用する機構となってますが、機械学習がわかる人達にとっては馴染みやすいアプローチである一方で、2018年当時の画像処理エンジニアの実装作法とは結構ギャップがあったんじゃないかなと思います。現在はPythonバインディングもサポートされてるので多少は使いやすくなっていそうです。ただし当然G-APIを使わなくても画像処理はできますので、実際の開発現場でどれくらい活用されているのか気になりますね。

各種画像処理関連機能

物体検出(顔検出やQRコード検出)の精度改善
特徴量(SIFT)抽出の精度改善
カメラキャリブレーションの精度改善
動画のHEVC/H265コーデックサポート改善
OBS(Open Broadcaster Software)キャプチャー機能の改善

OpenCVの基本にしてコアバリューである画像処理機能の改善もこつこつと続けられています。SIFTのような懐かしい技術もまだ使われているようですし、一方でOBSのような流行りの環境がサポートされるようになったりと幅広い領域で改善されていました。

言語バインディング

Pythonバインディングの型スタブ、FP16のサポート
JavaScriptバインディングのマーカー検出系機能追加(ArUcoマーカーやQRコード)

スクリプト言語の対応も進んでいます。Pythonの型スタブ対応は個人的にかなり嬉しいです。最近のPythonアプリケーション開発では型をちゃんと書く文化は浸透してきてますので。あとは失念してたのですが、JavaScriptバインディングも提供されているのでWeb領域での活躍もできますね。

おわりに

ざっくりとではありますが2023年のOpenCVの進化を追ってみました。上記で書いたこと以外でもたくさんのアップデートが適用されているので、気になる人は直接リリースノートを見てみると良いでしょう。例えばネイティブアプリ(iOS/Android)向けの改善等のマルチプラットフォーム対応がちゃんと維持されているのは好印象でした。あと個人的にはRISC-Vアーキテクチャのサポートも着実に進んでいるようなので中長期的な将来性に期待しています。

一方で、OpenCV 3.x系でdnnモジュールが追加されて以降は機械学習関連機能の充実にフォーカスされてきました。冒頭で書いたように近年はPyTorchなどの機械学習フレームワーク側でも簡単な画像処理なら可能になったので、OpenCVの登場機会が昔よりは減っていることは確かだと思います。

例えばFFmpeg(HEVC/H265)やOBS連携などのマルチメディア系アプリケーションでOpenCVを活用する事例は比較的多い印象もあるので、映像方面での活躍の場がもっと増えてくるといいんじゃないかなと思います。実際の画像処理系アプリケーション開発では機械学習が不要なケースがほとんどですし、自然と棲み分けされるのが一番平和なのでしょう。

今後もOpenCVネタの記事を書きたくなってきたので、最新バージョンをちょっと触ってみて機能紹介とかできたらいいなと考えています。

あわせて読む:

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です