ari23の研究ノート

メーカ勤務エンジニアの技術ブログです

OpenCVの商用利用

画像処理の研究を昨年から始めました。その過程で厄介な商用利用の可否について調査したので、これをまとめておきます🐜
(Dlibの商用利用可否はこちらです。)

ただし、以下の内容はあくまで私自身の解釈であり、この記事だけを理由に「商用利用OK」と判断することはないようお願いします。

本記事で発生するいかなる損害に関して、一切責任を負いかねます。(更新日:2021年04月26日)

記事作成の動機

商用で既存のツールを使用する際には、ライセンスを調査することは、企業の技術者としては当然ですよね。1

いつものように、今回はOpenCVのライセンスを調査したのですが、記事によって主張内容がマチマチでした。

また、これを利用する研究テーマの継続が決定したので、改めて調べ直して整理してみました。

商用利用の可否

結論から言うと、OpenCVは商用利用可能です。ただし、一部の機能は、個別にライセンスを受ける(つまり使用料を支払う)ことで初めて商用利用ができるものと、もしくはそもそも商用利用不可であるものがあります。

この記事では、個別にライセンスを受ける必要がある=商用利用不可として話を進めます。

調査結果を整理した内容は、以下の通りです。

項目 OpenCV OpenCV-Python
商用利用可否 Yes
※制限あり
Yes
※制限あり
ライセンス Ver. 4.5.0以上はApache 2 License
Ver. 4.4.0以下は3-clause BSD License
MIT License
ライセンスURL https://opencv.org/license/ GitHub→ https://github.com/opencv/opencv-python/blob/master/LICENSE.txt
PyPI → https://pypi.org/project/opencv-python/
制限/注意 一部の機能は特許権があり商用利用不可 一部の機能は特許権があり商用利用不可

以降で詳述します。

OpenCV

OpenCVには、opencvopencv_contribの2つがあり、どちらもC++で使うライブラリまたはモジュールという理解で大丈夫そうです。2

前者のopencvは、OpenCVのmainまたはcoreと呼ばれ、成熟したライブラリであり、フリーで商用利用できます。

後者のopencv_contribは、開発中のモジュールであり、フリーで商用利用できない機能を含みます。なお、opencv_contribでの開発が成熟してくれば、その機能がopencvに組み込まれます。

つまり、opencvは自由に使えますが、opencv_contribはちょっと注意が必要ということです。

このあたりの内容については、ココを参照して下さい。

また、この2つ以外にopencv_extraというモジュールもあり、これはopencv_contribよりもさらに実験的要素が含まれるようです。詳細はこちらです。

ところで、OpenCVはC++で書かれているので、高速に処理できます。しかし少し面倒な点として、ソースコードをダウンロードしたあとに、自前でビルドする必要があります。

この短所を解決するのが、後述するOpenCV-Pythonです。

商用利用不可機能

OpenCVは商用利用可能なライセンスですが、一部の機能については特許出願されているため、個別にライセンスを受ける必要があります。つまり、実質的には商用利用不可の機能があります。(※おそらく非営利目的であれば問題なし)。

商用利用できない機能は、すべてopencv_contribに含まれており、それらは以下の通りです。 - opencv_contrib - xfeatures2d - SURF - BRIEF - Censure - Freak - LUCID - Daisy - BEBLID - Self-similar

opencv_contribにある上記の機能は、商用利用不可です。

詳細は、opencv_contribREADMEをご覧ください。

なお、こちらについては、次のように調査しました。
まず、GitHubのopencv_contribに行きます(リンク)。そして、左上にある検索ボックスに"non-free"と入れて、検索します。

GitHubOpenCV|検索ボックス
GitHubOpenCV|検索ボックス

すると、opencv_contrib内にある、フリーで使用できない機能について調査することができます。

GitHubOpenCV|non-free検索結果
GitHubOpenCV|non-free検索結果

OpenCV-Python

OpenCV-Pythonとは、事前にビルドされたOpenCVをPythonで使うことができる、非常に便利なパッケージです。最初は非公式プロジェクトでしたが、最近になって公式に認められました(OpenCV-Python Is Now An Official OpenCV Project)。

OpenCV-Pythonでは、opencvopencv_contribを別々にインストールすることができます。しかもOpenCV-Pythonでインストールできるopencv_contribには、商用利用できないものはインストールしないよう設定されています(ただし、古いバージョンでSURFなどが含まれてしまうものがあるので要注意)。

non-freeが含まれていない件については、GitHubのREADMEにあるFAQに詳細が書かれています。以下、抜粋と意訳です。

(原文抜粋)
Q: Why the packages do not include non-free algorithms?
A: Non-free algorithms such as SURF are not included in these packages because they are patented / non-free and therefore cannot be distributed as built binaries. Note that SIFT is included in the builds due to patent expiration since OpenCV versions 4.3.0 and 3.4.10. See this issue for more info: https://github.com/skvark/opencv-python/issues/126


(ari23意訳)
Q: なぜOpenCV-Pythonには、フリーでないアルゴリズム(機能)が含まれていないの?
A: SURFのようなノンフリーなアルゴリズムは、特許で保護されており、ビルドされたバイナリとして配布することができないため、含まれてません。ただし、そのうちのSIFTアルゴリズムは、特許権の存続期間が切れたため、OpenCVのバージョン4.3.0と3.4.10以降、含まれるようになりました。詳細はGitHubのissueを見てね。 https://github.com/skvark/opencv-python/issues/126

したがって、OpenCV-Python最新版であれば、opencvでもopencv_contribでも安心して商用利用が可能です。

その他注意点

ここまで、「OpenCVの公式ページを見て、"non-free"と書いてあるものは商用利用できない」というロジックで話を進めてきましたが、実はこれも危険です。

なぜなら、”non-free'の記述がないことが、特許で保護されていないことにはならないからです。

したがって、実際にはモジュールやアルゴリズムごとに商用利用可否や特許の確認が必要です。しかも、実施国ごとに。

かなり面倒な作業ですが、事前調査をやっておかないと製品化の際に、最悪リリースできない事態に陥るので、注意しましょう。3

おわりに

色々な情報があったので、やっぱりこういったときは公式の情報を見るのが一番ですね。

今後も少し変わると思いますので、この記事の情報を鵜呑みにすることだけはないようお願いします。

参考になれば幸いです(^^)


  1. 大学の研究室は何も考えなくていいから、すごくうらやましい。

  2. 私が学生の頃は一緒くたになってたと思う。

  3. 自分の部署ではないですが、特許調査を怠ったせいで、直前で出荷できなくなってしまった例を1つ見たことがあります。想像するだけでも、ゾッとする。