OpenCV 4.5.5がリリースされました
画像処理に特化したライブラリ「OpenCV」の最新バージョン4.5.5が、2021年12月30日にリリースされました。本記事では既にOpenCVを使ったことがある方向けに、最新バージョンにおける過去バージョンとの変更点を何点かピックアップし、分かりやすく解説していきます。
またOpenCVを使ったことがない方向けにも、OpenCVとは何か、何ができるのかについて触れています。ぜひご一読ください。
【参考】:OpenCV
OpenCVとは?
OpenCV(Open Source Computer Vision Library)とは、2006年にIntel社によってリリースされたオープンソースのコンピュータビジョン向けライブラリです。 具体的には、画像処理や物体検出、機械学習などの処理を実装するためのライブラリです。
動作プラットフォーム
OpenCVはマルチプラットフォームを採用しており、動作プラットフォームとして以下のものが公式でサポートされています。
・Windows ・Linux ・Mac OS ・iOS ・Android ・Raspberry Pi
公式サポート言語
また、OpenCVは以下の言語をサポートしています。以前のバージョンではC言語もサポートされていましたが、メジャーバージョンのOpenCV 4.0のリリース時にサポートされなくなりました。
・C++ ・Python ・Java
サポートされている画像形式
OpenCVは画像処理ライブラリとしての一面が強く、様々なフォーマットの画像を入出力することができます。JPEG/PNGといったメジャーなものから、TIFFやWindows bitmap、PortableImageFormatなどがサポートされています。詳細は以下の公式ドキュメントを参照してください。
【参照】:OpenCV: Image file reading and writing
OpenCVの主な機能
ここでは、4.5.5以前からも提供されている、OpenCVの主なモジュールをご紹介します。
・core OpenCVの基礎となるようなモジュールです。OpenCVの各モジュールには依存関係がありますが、ほとんどのモジュールがこのcoreモジュールに依存しています。画像・行列データ構造の提供、配列操作、基本図形描画などを行う処理が実装されています。
・imgcodecs/imgproc imagcodecsはその名の通り、画像ファイルの入出力(エンコーディング/デコーディング)を担当します。OpenCVで画像を処理する際には必ず使用されるモジュールです。
imgprocは、取得してきた画像に対して様々な加工処理を行うモジュールです。ネガティブ/ポジティブ変換などのフィルター処理や、画像の色変換を行うことができます。imgcodecsモジュールに依存しています。
・objdetect 取得してきた画像を元に、人の顔や特定の物体を自動的に検出してくれるモジュールです。画像処理を伴うため、imgprocモジュールに依存しています。
・ml 機械学習(Machine Learning)に特化したモジュールです。SVM・決定木・ブースティング・ニューラルネットワークなどの技術が用いられています。
・videoio/video ここまでは画像(静止画)を処理するモジュールだったのに対し、これら2つは動画に対する処理を行うことができるモジュールになっています。videoioは静止画におけるimgcodecsと同じく、動画の入出力処理を担当します。videoモジュールは入力された動画について、動画内での物体追跡などを行うことができます。
・highgui higuiは、エンドユーザーがより使いやすいように、画像処理結果のGUI処理を行うモジュールです。各種プラットフォームにおいて、処理対象の画像/動画をウィンドウ表示したり、マウスやトラックバーによる操作を実現することができます。
ここで挙げたモジュール以外にも、OpenCVには数多くのモジュールが存在します。システムに組み込む際には、ぜひ下記の公式ドキュメントを参考にしてみてください。
【参照】:OpenCV: Image file reading and writing
OpenCV 4.5.5における変更点・新機能
本章では、4.5.5で新しく実装・変更された機能について解説します。以下に挙げるのは一部ですので、詳細は下記公式サイトを参照してください。
【参考】:OpenCV 4.5.5
動画解析用モジュールに音声解析機能が追加された
OpenCVの4.5.5以前のバージョンでは、OpenCVは動画の映像部分の解析機能しか持っていませんでした。これに対し、OpenCV 4..5.5ではマルチメディア解析プラットフォームである「Microsoft Media Foundation」または「GStreamer」と組み合わせることで、動画の音声解析ができるようになっています。
この機能追加により、これまでできなかった動画音声からの字幕生成や、逆に動画音声に対して特定のデータを挿入し、動画の音声を変換することがより簡単にできるようになりました。
QRコード生成機能が追加された
OpenCVのobjdetectモジュールには、以前のバージョンからQRコード読み取り機能が提供されていました。今回の4.5.5バージョンではQRコードの「生成」機能が新しく提供されています。
今までQRコードを生成するためには、Javaではzxing、Pythonではqrcodeといった言語それぞれに固有なライブラリをインストールする必要がありました。一方で、今回リリースされたOpenCV4.5.5を用いることでそれぞれの言語の違いを吸収してQRコードを生成することができるようになりました。
SuperPixelに新しいアルゴリズムが増え、性能が向上した
Superpixelとは、画像処理の手法の1つです。ある画像について、色またはテクスチャが似ている領域を小分けにする時、それぞれの小領域をSuperPixelと呼びます。画像中から物体を認識したり、画像を加工したりする際の前処理としてよく行われます。
OpenCV中で実装されてきたSuperPixelの方式として、下記があります。
・LSC (Linear Spectral Clustering) ・SEEDS(Superpixels Extracted via Energy-Driven Sampling) ・SLIC(Simple Linear Iterative Clustering)
バージョン4.5.5ではこれらに加えて、「F-DBSCAN」という方式が追加されました。この方式を採用すると、従来のアルゴリズムよりも分割にかかる時間が短くなることがOpenCV公式のGitHubにて報告されています。
OpenCV.jsの深層学習がブラウザでも行えるようになり、高速化した
OpenCV.jsはJavaScript上でOpenCVを用いることができるライブラリです。サーバ上ではなく、ブラウザ側でOpenCVの機能を使うことができることから、広く扱われているライブラリとなっています。
OpenCV.jsにはDNN(Deep Neural Network、深層学習)を用いて物体認識を行う機能があるのですが、バージョン4.5.5からこれが高速化しました。この高速化には、WebNNという技術が用いられています。
WebNNとは、ブラウザ上で機械学習を行えるようにする取り組みまたは技術のことで、今現在APIとして標準化が進んでいます。ブラウザ上で機械学習処理を行うメリットとしては、以下のようなものがあります。
・サーバとの通信を前提としないため、低レイテンシで実行できる ・外部に通信をしないため、個人情報などのユーザデータが守られる ・オフラインでも実行できる ・サーバ環境の用意が不要なため、低コスト
【参考】:Deep Neural Networks (dnn module)
【参考】:Web Neutral Network API]Web Neural Network API
最新のOpenCVを使って、画像解析を行ってみよう
OpenCVは画像/動画に対する様々な処理を行うことができる、多機能なライブラリです。Webシステム内の処理に使うことはもちろん、家電など物理的な機器の中に実装される、組み込み系システムにも用いることができます。
OpenCVはオープンソースライブラリであり、今後も積極的な機能追加、バージョンアップが行われる予定です。画像/動画の処理が必要になった際には、ぜひこの記事を参考にOpenCVライブラリを利用してみてください。
編集部オススメコンテンツ
アンドエンジニアへの取材依頼、情報提供などはこちらから