6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OpenCVAdvent Calendar 2024

Day 18

OpenCV 5.0.0 alpha変更点をキャッチアップしてOpenCV 5.0移行でライバルに差をつける

Last updated at Posted at 2024-12-17

この記事はOpenCV Advent Calendar 2024の18日目の記事です。

はじめに

2024年12月6日にOpenCV 5.0.0 alphaがリリースされました。この記事執筆時点では、alpha版ではありますが、OpenCV 5系リリースを心待ちにしていた方も多いのではないでしょうか?https://github.com/opencv/opencv/wiki/OpenCV-Change-Logs#version50-alphaにOpenCV 5.0.0 alpha変更点のハイライトが書いてあるのでこちらを読みながら正式版リリースに備えてキャッチアップしていきましょう。

本記事では公式のChange Logsでは触れられていない変更経緯、追加情報を一部加筆しています。

変更点は以下のものに分類されます。

  • [5+4.x] 既に最新の4.x系に組み込まれているが重要なもの
  • [5.0] 5.0リリース時点で完了予定のもの
  • [5.x] 5.0リリースに何かしら入るが、以降の5.xリリースで完成を目指すもの

OpenCV 5.0.0 alphaのハイライト

全般的な変更、改善

  • [5+4.x] OpenCV 4.5.0以降およびOpenCV 5.0はApache 2 ライセンスで配布されるようになりました(参考1参考2
  • OpenCV 5.0のminimum C++ standardはC++ 17となりました。デフォルトはC++ 17となっていますが、C++ 20、C++ 23との互換性も計画されています。
  • OpenCVでPython 2サポートは削除されました。Python 3の場合、Python 3.6+のみサポートされます。

大規模なリファクタリング

  • OpenCV 4.xで一部残っていたC API(cvCreateMat()cvFindContours())や構造体(CvMatなど)が削除されました。
    • CV_8UなどのCV_マクロは残っています。
  • OpenVXサポート削除
    • ベンダーがOpenCVアクセラレーションのためにOpenVXカーネルを使用する場合、後述するカスタム「非CPU」HALを使用してください
    • 詳細はhttps://github.com/opencv/opencv/issues/24995を参照ください。
  • gapiモジュール(Graph API)のopencv_contribへの移動
  • mlモジュール(クラシックなMLアルゴリズム)のopencv_contribへの移動
  • features2dモジュールからfeaturesモジュールへのリネーム
  • [5.0] flannモジュール見直し
  • objdetectモジュールにあったHaar-basedおよびHOG-based detectorsをopencv_contribのxobjdetectモジュールへの移動
    • コードクリーンアップのため、ディープラーニング以前のクラシックなobject detectionアルゴリズムをopencv_contribに移動
    • 詳細はhttps://github.com/opencv/opencv/issues/25004を参照ください。
  • calib3dモジュールの分離
    • OpenCV 5.0から以下のモジュールに分離された
      • 3dモジュール:基本的な3Dジオメトリ、3Dビジョンアルゴリズム
      • calibモジュール:カメラキャリブレーションアルゴリズム
      • stereoモジュール:ステレオ対応による深度マップ推定アルゴリズム
  • サンプルコードクリーンアップ
    • 多くの古いサンプル(C++サンプルの約50%、Pythonサンプルの5%)が削除され、残りのサンプルの多くは改訂。

詳細を知りたい方はhttps://github.com/opencv/opencv/issues/25007を参照ください。

coreモジュール改善

  • サポートするデータ型の拡張
    • OpenCV 5.0から新規追加されるデータ型
      • bfloat (a.k.a. bfloat16_t): CV_16BF
      • uint32_t: CV_32U
      • uint64_t: CV_64U
      • int64_t: CV_64S
      • bool: CV_Bool
    • CV_Bool型のデータをマスクとして利用できるようになった
    • hfloat、bfloatをネイティブにサポートしていないハードウェア上でも実行可能に
      • 必要に応じてインライン関数で効率的に変換を行う
  • 2次元未満の配列、つまり 1D(ベクトル)と0D (スカラー)をサポート
  • LAPACKをOpenCV内で常に利用できるようになった
    • システムに外部LAPACKライブラリがインストールされていない場合、OpenCVはLAPACKの内部の小さなサブセットを構築して使用
    • 詳細はhttps://github.com/opencv/opencv/pull/18571を参照ください。
  • 5.0、5.x: 5.0リリースの前後にさらなるリファクタリングと改善が期待されています https://github.com/opencv/opencv/issues/25011

imgprocモジュール改善

  • warping処理(warpAffine、warpPerspective、remap)の高速化
    • プラットフォーム、画像サイズ、タイプ、操作フラグによるが、10%から300%以上高速化を図った
    • これらの関数およびその他の重要な画像処理関数のさらなる最適化は5.0正式リリースで対応予定
    • 詳細はhttps://github.com/opencv/opencv/pull/26505を参照ください。
  • STBベースのTrueTypeエンジンと埋め込みTrueTypeフォントが使用されるようになりました。ユーザーはカスタムフォントを読み込んで使用することもできます。
    • STB対応についてはputText()関数でtruetype fontを使ったテキスト描画ができるようになりました! #OpenCV - Qiitaを参照ください。
    • この機能を使う際、いくつかの注意点があります。
      1. アラビア語やデーヴァナーガリー文字などの一部の文字は適切にレンダリングされないため、Harfbuzzを追加する必要があります。
      2. いくつかの複合Unicode記号は適切にレンダリングされません。
      3. STBは単純な白黒エンジンであるため、カラー絵文字はサポートされていません。
  • [5.0、5.x] 5.0リリースの前後にさらなるリファクタリングと改善が予定されています https://github.com/opencv/opencv/issues/25012

HAL(Hardware Acceleration Layer)更新

HAL(Hardware Acceleration Layer)について気になる方はOpenCVのHALモジュールと高速な数値計算ライブラリ #画像処理 - Qiitaを参照ください。

  • [5+4.x] OpenCV HALに多くの新しいエントリが追加され、さまざまなベンダーがOpenCV関数にカスタムアクセラレーションを提供できるようになりました。5.0では、さらにいくつかの新しいHALエントリが追加されます。
  • [5+4.x] アルゴリズムによっては、ユーザーが速度と精度のどちらかを優先するかを選択できるようにAlgorithmHintでヒント情報を設定できるようになりました。これは、ベンダーが高速な実装を提供していてもOpenCVのジェネリックな実装と出力互換性がないケースを考慮するためです。
    • ALGO_HINT_DEFAULT
    • ALGO_HINT_ACCURATE
    • ALGO_HINT_FAST
  • [5+4.x] ディープラーニング推論、画像処理、その他のアルゴリズムを高速化するために数学関数 (v_exp, v_log, v_erf, v_sincos)の実装がUniversal intrinsicsに追加されました。
  • Universal intrinsicsにおけるFP16実装がARMv8 NEONおよびRISC-V RVVバックエンドに追加されました。FP16 SIMD演算はデフォルトでは利用できないため、特別なオプションを使用してコードをビルドする必要があります。OpenCVでは、実際のハードウェアに応じて最適なカーネルの種類を選択するランタイムディスパッチメカニズムを使用します。
  • [5.0, 5.x] UMatは、CPUまたは非CPUの配列/テンソルを格納できるように拡張されます。つまり、OpenCLのみのソリューション (T-API)から、ユニバーサルな異種API(U-APIまたは「非CPU HAL」と呼ぶこともあります)に移行し、UMatがそのメインのデータコンテナーになります。他にも多くの改善が期待されています。https://github.com/opencv/opencv/issues/25019https://github.com/opencv/opencv/issues/25025

dnnモジュール更新

  • 新しい推論エンジンが導入され、古い推論エンジンと共存できるようになりました。新しい推論エンジンは、dynamic shapesやその他の最新のONNX機能のサポートを強化します。5.0では、古い推論エンジンよりもONNX仕様のカバレッジが大幅に向上しました。
  • 使用する推論エンジンを制御するためのパラメータがcv::dnn::readNet()に追加されました。詳細はhttps://docs.opencv.org/5.x/d6/d0f/group__dnn.html#gab13999feed711a37d50c1bdb4f01b458を参照ください。
    • デフォルトでは、最初に新しいエンジンを試し、モデルのロードに失敗すると、古い推論エンジンに戻ります。新しい推論エンジンまたは古い推論エンジンを強制的に使用することもできます。内部表現が異なるため、モデルがロードされた後に推論エンジンを切り替えることはできません。
  • ONNX、Caffe、TF、TFLite形式のパーサーが更新され、エンジンが選択できるようになりました。
  • [5.0, 5.x] 新しいエンジンはデフォルトのバックエンドとCPUターゲットのみをサポートしています。5.0までにさらに多くのバックエンドとターゲットが有効になり、その後の5.xリリースではさらに多くのバックエンドが有効になる予定です。 #26198

calib3dモジュール更新

  • [5+4.x] ホモグラフィ、基本行列の推定、PnP 問題の解決などを行う RANSAC ベースのアルゴリズムに、大幅に効率化された USAC フレームワーク (特にノイズの多いデータセットの場合) が使用されるようになりました。詳細はhttps://docs.opencv.org/5.x/de/d3e/tutorial_usac.htmlを参照ください。
  • 新しい Levenberg Marquardtアルゴリズムが実装され、高速化および精度向上しています。
  • 効率的なマルチカメラ キャリブレーション フレームワークが calib モジュールに追加されました。これには、スマート初期化と USAC ベースの最適化パイプラインが含まれており、同時にキャリブレーションされたすべてのカメラの相対位置を最初のカメラに対して計算します。さまざまなカメラ構成がサポートされています (すべてのピンホール カメラ、すべての魚眼カメラ、および混合ケース)。詳細についてはチュートリアルを参照してください。
  • 基本的なメッシュ処理およびポイントクラウド処理アルゴリズム (TSDF、ICP など) に関する作業を開始
  • .plyや.objなどの一般的なポイントクラウド形式のインポーターとエクスポーターを追加

サンプルコード改訂

おわりに

本記事ではOpenCV 5.0.0 alpha変更点のハイライトを駆け足で追っていきました。変更点をキャッチアップしてOpenCV 5.0移行でライバルに差をつけていきましょう。明日は@nonbiri15さんの担当でタイトルは「Open3Dを使い始めてみた」です。お楽しみに。

6
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?