OpenCV

OpenCV
開発元 インテルWillow GarageItseez
最新版
4.9.0 / 2023年12月28日 (3か月前) (2023-12-28)[1]
リポジトリ ウィキデータを編集
プログラミング
言語
C++JavaPython、他[2]
対応OS Windows, Linux, FreeBSD, macOS, Android, iOS
プラットフォーム クロスプラットフォーム
種別 ライブラリ
ライセンス OpenCV 4.4以前: 三条項BSDライセンス / OpenCV 4.5以降: Apache v2[3]
公式サイト opencv.org
テンプレートを表示

OpenCV(オープンシーヴィ、: Open Source Computer Vision Library)とはインテルが開発・公開したオープンソースコンピュータビジョン向けライブラリ[4]。2009年にWillow Garage(ウィロー・ガレージ)に開発が移管され、さらにその後Itseezにメンテナンスが移管された[5]が、2016年5月にインテルがItseezを買収することが発表された[6][7]

概要[編集]

画像処理・画像解析および機械学習等の機能を持つC++JavaPythonMATLAB用ライブラリ[8]。様々なプラットフォームすなわち複数のオペレーティングシステム (OS) やCPUアーキテクチャに対応するクロスプラットフォームなライブラリであり、macOSFreeBSD等全てのPOSIXに準拠したUnix系OSLinuxWindowsAndroidiOS等をサポートしている[9]。Androidへの移植は2010年に始まり、バージョン2.3で正式に利用可能となった。iOS対応の完全な統合は2012年にリリースされた2.4.2で利用可能となった。

当初からPowerPC系プロセッサなどにも対応していたものの、もともとインテルが開発していたこともあって、x86系プロセッサへの対応と最適化が主流だった。しかし、ARMアーキテクチャを採用したモバイルデバイスの台頭に伴い、ARM系プロセッサへの対応と最適化にも取り組まれている[10]

歴史[編集]

1999年にプロジェクト開始。最初のアルファ版が公開されたのは、国際会議CVPR 2000 (IEEE Conference on Computer Vision and Pattern Recognition 2000) である。2001年から2005年の間に5つのベータ版がリリースされた。2006年の後半にバージョン1.0の正式版がリリースされた[11][12]。クロスプラットフォームを意識した設計となっており、当初はC言語で書かれていた。このことが移植性を高めることにつながった[9][注釈 1]

2008年にWillow Garageによるサポートを受け、開発状況が再び活発になった。2009年10月に2回目のメジャーバージョンアップが実施され、2.0版がリリースされた。従来のC API(C言語関数形式のインターフェイス)に加えて、C++ APIが導入された[9]。OpenCV 2.4.4以降ではJavaが公式にサポートされている[13]。OpenCV 2.x系列は2018年2月に2.4.13.6がリリースされた後、メンテナンスされていない[1][14][15][16]

2015年6月に3回目のメジャーバージョンアップとしてOpenCV 3.0が正式リリースされた。OpenCV 3.0では従来のC APIはレガシーAPI扱いとなりメンテナンスが終了しているため、代わりにC++ APIを使うことが推奨されている[17]。2015年12月にリリースされたOpenCV 3.1では、Google Summer of Code 2015の成果物の取り込みなど、多数の機能が追加されている[18]。OpenCV 3.x系列は、2021年10月にリリースされた3.4.16の公式ビルド済みバイナリが提供されており[1]、また2023年6月にバグ修正を含む3.4系列の最終版として3.4.20がリリースされた[19]

2018年11月にOpenCV 4.0がリリースされた[20]C++11規格準拠コンパイラが必須となり、またC APIは廃止された。Graph API (G-API) やQRコード検出機能などが追加された。DNNモジュールにおいて、OpenCLが使えないプラットフォーム向けに、Vulkanバックエンドの実験的サポートが追加された。

2024年1月現在、4.x系列の開発が続けられている。またOpenCV 5の開発について、2023年10月に資金調達のためのクラウドファンディングが立ち上げられた[21]

機能[編集]

実装分野は次の通り。

OpenCVの機能はいくつかのライブラリモジュールに分割して実装されている。モノリシックな1ファイル(worldモジュール)にビルドすることも可能であるが[22]、通常は必要なものだけ個別のモジュールとしてビルドする。

ビデオ入出力モジュールではWebカメラに代表されるUVCデバイスを扱うことができる。モジュールをビルドする際に、サポートするバックエンドとしてFFmpegVideo4Linux英語版Video for WindowsDirectShowMedia FoundationOpenNI英語版などを選択することができる[23][24]

OpenCV 2.1[25]SSE拡張命令を使用した最適化コードが実装されている。OpenCV 2.4.3でIntel TBBOpenMP、AppleのGCD英語版、Windowsの同時実行ランタイムなどを利用した並列化cv::parallel_forが実装されている[26]。OpenCV 3.0でIntel IPPのサブセットがIPPCVとして寄贈され、デフォルトで使用されるようになった[27]。OpenCV 3.1ではクロスプラットフォームなSIMDアクセラレーションのためのUniversal Intrinsicsが導入され[28]、従来からのSSE (x86) 命令のサポートに加え、AVX (x86) 命令やNEON (ARM) 命令のサポートも加わっている。OpenCV 3.3.1ではPPC64英語版(64ビットPowerPC)アーキテクチャへの最適化もVSX命令への対応によって実現されている[29]

OpenCV 2.2[30]CUDAを使ったアクセラレータであるgpuモジュール、OpenCV 2.4.3[31]OpenCLを使ったアクセラレータであるoclモジュールが追加された。gpuモジュールを有効にするためには、OpenCVをWITH_CUDA=ON構成でビルドする必要がある[32]。また、oclモジュールを有効にするためには、OpenCVをWITH_OPENCL=ON構成でビルドする必要がある[33]。なおOpenCV 2.4.11時点で、公式のWindows用ビルド済みバイナリではCUDAは有効にされていないが、OpenCLは有効にされている。またgpuモジュールおよびoclモジュールはともに、従来のCPUベースのOpenCV機能と比べて、対応するチャンネルフォーマットに関して制約がある。そのほか、gpuモジュールを使用するためには、CUDAに対応したNVIDIAGPUを、そしてoclモジュールを使用するためには、OpenCL 1.1に対応したハードウェアを用意する必要がある。

なお、OpenCV 3.0ではgpuモジュールはcudaモジュールに改称され、また独立したoclモジュールは廃止されてOpenCVの各モジュールに透過API (Transparent API, T-API) として分散・融合されている[34][35]。OpenCV 3.0にはOpenCLの相互運用を可能とするラッパーAPIも用意されており、OpenCL-C言語でカスタムカーネルを記述できるほか、OpenCL 1.2サポートを有効にしてOpenCVをビルドすることで、OpenCL 1.2対応のプラットフォームおよびデバイス上でOpenCL 1.2の機能(カーネルの分割コンパイル&リンクなど)を使えるようになる[36]。また、オプションとしてOpenCL 2.0もしくはAMD (HSA) 拡張のShared Virtual Memoryもサポートしている[37]

各種言語バインディング(ラッパー)[編集]

公式に提供されているOpenCV APIとして、C/C++用インターフェイスのほか、Java、Python、MATLABバインディングなどが存在するが、そのほかにも非公式の各種言語向けのラッパーが存在する。

OpenCV 4.4では、Objective-CSwift用のバインディングが公式に取り込まれた[38]

脚注[編集]

注釈[編集]

  1. ^ C++の最初の国際標準規格「ISO/IEC 14882:1998」通称C++98が制定されたのは1998年のことであり、2000年代初頭はまだ規格に完全準拠した処理系が少なく、移植性の高いコードをC++で記述するのは困難だった。また、ロボティクスのような組み込み環境向けのソフトウェア開発ではCを使うことはできるものの、C++は使えないことも多かった。

出典[編集]

  1. ^ a b c Releases | opencv.org
  2. ^ GitHub - opencv/opencv: Open Source Computer Vision Library
  3. ^ License - OpenCV
  4. ^ 橋本直「特集 拡張現実感 (AR) 基礎3: 開発用ツール」『情報処理』第51巻第4号、情報処理学会、2010年4月、382ページ。 
  5. ^ 第1回 OpenCVとは? 最新3.0の新機能概要とモジュール構成:OpenCV入門【3.0対応】(1/2 ページ)”. @IT. 2023年5月3日閲覧。
  6. ^ Intel Acquires Computer Vision for IOT, Automotive | Intel Newsroom
  7. ^ Intel acquires Itseez | opencv.org
  8. ^ About | opencv.org
  9. ^ a b c Platforms - OpenCV
  10. ^ ARM - OpenCV
  11. ^ SourceForge.net: Open Computer Vision Library, Internet Archive
  12. ^ ChangeLog_v10-v21#1.0 · opencv/opencv Wiki · GitHub
  13. ^ Introduction to Java Development — OpenCV 2.4.13.0 documentation
  14. ^ OpenCV - Browse /opencv-win at SourceForge.net
  15. ^ Tags · opencv/opencv | GitHub
  16. ^ Releases · opencv/opencv | GitHub
  17. ^ OpenCV 3.0 Latest news and the Roadmap, Kirill Kornyakov, Itseez, ICVS 2013
  18. ^ OpenCV 3.1 - OpenCV
  19. ^ ChangeLog#version:3.4.20 · opencv/opencv Wiki · GitHub
  20. ^ ChangeLog#version:4.0.0 · opencv/opencv Wiki · GitHub
  21. ^ Where Is OpenCV 5? A Call To Keep OpenCV Free To All - OpenCV
  22. ^ 第4回 初めてのOpenCV開発 ― Visual Studio/CMake/NuGetでプロジェクト作成【OpenCV 3.0/3.1】:OpenCV入門【3.0対応】(1/3 ページ) - @IT
  23. ^ OpenCV: Video I/O with OpenCV Overview”. docs.opencv.org. 2021年1月7日閲覧。
  24. ^ 第8回 初めてのOpenCV開発 ― CMakeを使ったOpenCVのカスタマイズ【OpenCV 3.1.0】:OpenCV入門【3.0対応】 - @IT
  25. ^ OpenCV2.0 から OpenCV2.1 の変更点(ChangeLog) | OpenCV.jp
  26. ^ ChangeLog#version:2.4.3 · opencv/opencv Wiki | GitHub
  27. ^ OpenCV 3.0 - OpenCV
  28. ^ OpenCV: Universal intrinsics
  29. ^ ChangeLog#version:3.3.1 · opencv/opencv Wiki · GitHub
  30. ^ OpenCV 2.2 Released - ROS robotics news
  31. ^ OpenCV 2.4.3 released - OpenCV
  32. ^ GPU Module Introduction — OpenCV 2.4.11.0 documentation
  33. ^ OpenCL Module Introduction — OpenCV 2.4.11.0 documentation
  34. ^ OpenCV: OpenCV modules
  35. ^ OpenCL - OpenCV
  36. ^ opencv/opencl_core.hpp at 3.0.0 · opencv/opencv | GitHub
  37. ^ opencv/ocl.cpp at 3.0.0 · opencv/opencv | GitHub
  38. ^ ChangeLog#version:4.4.0 · opencv/opencv Wiki · GitHub

関連項目[編集]

外部リンク[編集]