#きっかけ
UnityのOpenCVアセット、複数あって何がどう違うのかよくわからない...
— foka (@foka22ok) December 12, 2019
お値段が違うのはわかる。
UnityでOpenCVが使いたかったのですが、アセットストアを探すとそれっぽいものが複数見つかって混乱してしまいました。
その後調べた結果、違いが少しわかったので、自分以外にも混乱してしまった人の参考になればと書いてみます。
#3つのOpenCVアセット
OpenCVでアセットストアを検索すると以下の3つがみつかります。
OpenCV for Unity
$95
https://assetstore.unity.com/packages/tools/integration/opencv-for-unity-21088
OpenCV plus Unity
free
https://assetstore.unity.com/packages/tools/integration/opencv-plus-unity-85928
OpenCV# for Unity
$16
https://assetstore.unity.com/packages/tools/integration/opencv-for-unity-100374
###OpenCV for Unity
Enox Softwareが作っている$95のアセットです。
(2019/12/13現在、半額の$47.5でセール中)
これの特徴は、Java用OpenCVのクローンであること。
後に説明するOpenCVSharpとは関係がありません。
namespaceがOpenCVForUnity
になっており、APIはJava用OpenCVと同じです。
C++・PythonのOpenCVのAPIとは記述が結構異なる印象です。
using OpenCVForUnity;
2019年12月現在、OpenCV 4.1.0にも対応して継続的にメンテナンスされてます。
###OpenCV plus Unity
Paper Plane Toolsが作っているfreeのアセットです。
以前は$50くらいだったようですが、2019年1月24日より無料化しました。
これの特徴は、OpenCVSharpをUnityで使えるようにしたものであること。
そのためAPIはOpenCVSharpと同じです。
namespaceはOpenCVSharpと同様にOpenCVSharp
になっており、APIももちろんOpenCVSharpと同じです。
C++・PythonのOpenCVのAPIと比較的記述が近い印象です。
using OpenCVSharp;
ただし、アセットをインポートして使おうとすると以下のエラーが出まくります。
error CS0227: Unsafe code may only appear if compiling with /unsafe. Enable "Allow 'unsafe' code" in Player Settings to fix this error.
このエラーを消すには、Player Settings > Other Settings > Configuration
にある Allow 'unsafe' Code
にチェックをつける必要があります。
対応OpenCVのバージョンは、アセットストアの説明文を見るとOpenCV 3のようです。
無料化した理由も少し書いてあり、サポートはしない、コンピュータビジョンの世界を学びたい人のために無料でアセットを残しておくから楽しんでくれ
的なことが書かれてます。
今後の更新はあまり期待できないかもしれません。
###OpenCV# for Unity
NWH Codingが作っている$16のアセットです。
特徴は、native C++のOpenCVプラグインをC#でラップしていること。
このアセットは使える環境が無いので詳しいことは把握してませんが、アセットストアの説明文にIncludes optimized functions conversion between common Unity and OpenCV structures
とあるので、オリジナルAPIなのかもしれません。
↓がドキュメントのようなのですが、空っぽで詳細不明でした。
http://nwhcoding.com/index.php/products/opencv-for-unity/
(変なURL...)
#OpenCVSharp
OpenCVは色々な環境に移植されているので、C#専用のOpenCVSharpというものがあります。
OpenCVCharp
https://github.com/shimat/opencvsharp
自分で色々調べていた時、アセットわからんと思って迷ってしまったので、いっそのことアセット使わずこれをそのまま使うのが一番シンプルなのではと思って試しました。
が。
UnityにNuGetプラグインを入れてパッケージをインストールするという Unity であらゆる C#(.NET) パッケージを使う(例:opencv) もあったので試してみましたが、自分の環境ではうまく動かず...
該当記事とはUnityのバージョン、OpenCVのバージョンどちらも違ったので、そのせいかもしれません。
なお、OpenCVCharpの公式ドキュメントには以下の一文が。
OpenCvSharp may not work on Unity platform. Please consider using OpenCV for Unity
#結局、どれ使うのがいいの?
###C++、PythonのOpenCVに近い書き方で書きたい人
>OpenCV plus Unity
>OpenCVSharp(環境構築がうまくいけば...)
###OpenCVSharpに慣れている人
>OpenCV plus Unity
###JavaのOpenCVに慣れている人
>OpenCV for Unity
###今後のサポートまで考慮する人
>OpenCV for Unity
>OpenCVSharp(環境構築がうまくいけば...)
###お金を使わずUnityでOpenCV試してみたい人
>OpenCV plus Unity
#まとめ
環境構築がうまくいくなら、アセット使わずOpenCVSharp
をそのまま使うのがベターだと思いました。
OpenCVSharp公式は、UnityではOpenCV for Unity
を使うことを推奨してますが、個人的にはAPIに独自感があってちょっと使いにくい印象...(個人の感想です)
でも今後も考えるとアセットではOpenCV for Unity
一択な感じもあり...。
難しいですね。