Visual C ++でのWindowsストアアプリケーションでのOpenCVの使用

私は、C ++/CXを使用している私のWindows 8 Storeアプリケーション内の画像処理に OpenCV ライブラリを使用しようとしています。私はVisual C ++ 2012を使ってOpenCVライブラリを構築できますが、私のアプリをパッケージ化して Windows App証明書キットでは、OpenCV DLLがサポートされていないWindows APIを使用しているというエラーが表示されます。これらのエラーを修正するにはどうすればよいですか?

2
nl ru de
OpenCVの半正式なWindows RTポートがあるようです: code.opencv.org/projects/opencv/wiki/WindowsRT
追加された 著者 Raman Sharma,

4 答え

私はARMのOpenCVのサブセットを構築することに成功しました。

私は、Windowsストアアプリケーションをx86に構築するのに興味があったサブセットを入手することから始めました。 OpenCVのソースダウンロードでCMakeを指し示した後、私はVisual Studio 11ジェネレータを使ってx86プロジェクトを設定しました。私はCMake内でTARGET_METROという新しいビルドオプションを追加し、これを使って他のプロジェクトをさらに構成しました。

これにより、ビルドしたくないサードパーティのコンポーネントがいくつか無効になりました。

OCV_OPTION(BUILD_PERF_TESTS   "Build performance tests"  ON  IF (NOT iOS AND NOT TARGET_METRO) )

この方法でWITH_VIDEOINPUT、BUILD_PERF_TESTS、およびBUILD_TESTSを無効にしました。私はTARGET_METROがオンのときにRamanが定義した定義を追加しました:

if(TARGET_METRO)
    add_definitions(-DWINAPI_FAMILY=WINAPI_FAMILY_APP)
    add_definitions(-D_UNICODE)
endif()

私はその後、CMakeでプロジェクトのx86(Visual Studio 11)バージョンを生成し、プロジェクトの構築を試み始めました。多くの問題が発生しますが、そのほとんどはWinRTのAPIが不足していることに関連しています。これらのほとんどは機械的な変更です(たとえば、 InitializeCriticalSectionExInitializeCriticalSection のスワップアウト)。私はこれらの変更を #if WINAPI_FAMILY == WINAPI_FAMILY_APP にラップして、非TARGET_METROビルドに影響を与えないようにしました。

ARMのためにビルドするとき、私はCMakeを起動し、Visual Studio 11ジェネレータを使用して新しいプロジェクトを( 'ARM'というディレクトリの下に)生成した後、結果のプロジェクトファイルを手動で編集し始めました。

主な変更点は次のとおりです。

  • Change all 'Win32' to 'ARM' in all vcxproj files (3rdparty\IlmImf includes filenames which contain 'Win32', be careful to change those instances back)
  • For all projects, add true to the Globals propertygroup
  • For the ZERO_CHECK project, change ConfigurationType to "DynamicLibrary" instead of "Utility" (as the Utility type will fail to build)
  • Add the following at the project level (for each project you want to build for ARM):

    
      
        false
      
      <link>
        Console
        false
        false
      </link>
    
    
  • Remove "/machine:X86 " from Link: Additional Options (if it is in there)

  • Remove gdi32.lib, winspool.lib, shell32.lib, and comdlg32.lib from additional dependencies (these libs do not exist for ARM)
8
追加された
ARMプロセッサではなくx86で実行することは可能ですか?
追加された 著者 Vinicius Rocha,
はい、実際にはx86でそれを行うには、あまり労力を必要としません。おそらく、私がARMのために働かせるために追加のハッキングについて話すまで、すべてのステップをたどることができます。
追加された 著者 Andy Rich,

OpenCVはCMakeを使ってソースをビルドします。 OpenCVソースをダウンロードした後、ルートフォルダーにCMakeLists.txtファイルを編集して、次の2行を含めます。

add_definitions(-DWINAPI_FAMILY = WINAPI_FAMILY_APP)   add_definitions(-D_UNICODE)

次の#ifブロックにあります。

if(WIN32とNOT MINGW)

これを行うことで、ライブラリはWindows StoreアプリケーションでサポートされているAPIのみにアクセスできます。これは、あなたがいくつかのビルドエラーを修正する必要があることを意味するかもしれません(私が先週試したときにあまりにも多くなかった)が、最終的にあなたのバイナリはWACKをきれいにするでしょう。

しかし、上記の手順は、OpenCVのx86およびx64ビルドでのみ成功します。 OpenCVで使用されるCMakeツールは、ARMアーキテクチャ用のVisual C ++ 2012プロジェクトをまだサポートしていません。その問題は、このバグによって追跡されています。

更新

There is now a port of CMake that support building Windows Store and Phone apps (both 8.0 and 8.1). See details here: http://cmakems.codeplex.com/

Second 更新

The below video shows OpenCV working in a Windows 10 Universal app written using C++: http://channel9.msdn.com/Events/Build/2015/3-82

4
追加された
ARMのC ++ 2012プロジェクトで進歩があったときにコメントを残すことができればと思っています。私はWindows 8(x86とARM)をターゲットとしたビジョンプロジェクトを作成しようとしています。
追加された 著者 Poul K. Sørensen,
Visual C ++ 2012でWindows 8 Metroスタイルのアプリケーションをビルドしたビデオを見ただけで、ビデオのある時点で「OpenCV Based WinRT SDK for FaceDetection」が使用されていました。私はGoogleからこれを見つけられませんでしたが、いくつかのアームopencvがそこに構築されているかどうか疑問に思っています。
追加された 著者 Poul K. Sørensen,
さて、私はWindows RTがARMのパーツで、Windows 8がx86だったという印象を受けました。しかし、あなたのコメントに基づいて私は間違っていたと結論づけることができます。ありがとう。
追加された 著者 Poul K. Sørensen,
さて、これを明確にしていただきありがとうございます。
追加された 著者 Poul K. Sørensen,
他の人がこれを試してみると、ここでラマンのエラーを見ることができます: pastebin.com/9kQj1mZw
追加された 著者 Poul K. Sørensen,
あなたはこれを見たことがあります: stackoverflow.com/questions/11151474/… を使用して構築されており、署名部分についてのコメントはありますか?
追加された 著者 Poul K. Sørensen,
はい。まあ、これは場所ではありませんが、人々がこの問題を議論し解決できる場所でうまくいっていたでしょう。私のWindows Phone用のOpenCVビルドを手に入れることができないのは、今や不満です:)
追加された 著者 Poul K. Sørensen,
確かに私はそれを行うことができます。今のところ私はこのバグを見ているだけです: cmake.org/Bug/view.php ?id = 13511
追加された 著者 Raman Sharma,
私はその男を知っています。彼はデモにOpenCVのx86ビルドを使用しています。基本的に彼はOpenCV APIの上にC ++/CXを使って薄いWinRTラッパーを作成しました。彼はまだARM用のライブラリを構築することができませんでした。
追加された 著者 Raman Sharma,
あなたは正しい、この用語は混乱しています。 Windows RTはARMの一部です。しかし、WindowsランタイムAPIとは、Windows 8が公開している新しいスタイルのAPI(C ++やC#のJavaScriptなど、どの言語からでも呼び出せるAPI)を指しています。この男はWinRTのコンポーネントを言ったとき、彼は後者を意味し、ARM
追加された 著者 Raman Sharma,
@ s093294これは別の問題です。つまり、ARM上でデスクトップアプリケーションをビルドして実行することができないということです。私たちがここで試しているのは、理想的には可能なはずのARMストアアプリのOpenCVを構築できないということです。
追加された 著者 Raman Sharma,
私たちがARMのCMakeをサポートしたら、Windows RTとWindows Phoneの両方で動作するはずです。 CMakeのARMサポートが来る前でさえ、おそらくx86から​​プロジェクト設定をコピーしてARM設定を作成し、エラーが出るのを修正することができます。
追加された 著者 Raman Sharma,

免責事項:私はOpenCVをライブラリとして100%新しくしており、Azure Cognitive VisionサンプルでOpenCVを使用したサンプルアプリケーションを見つけたばかりです。

私の唯一の目標は、「OpenCVがUWPでサポートされ、ARMで動作するかどうか」を確認することでした。私は2015年以来、周りにあった投稿とブログの束を読んで、私はこれが働くことができないと思うようにしていました。

Then I found this sample: https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/CameraOpenCV

And can confirm it works for my basic test, you can see my video here of ARM Pi 2 running UWP app, using the OpenCV library: https://twitter.com/LyalinDotCom/status/982830053355470848

これはOpenCVのすべてが動作することを意味すると言っているわけではありませんが、少なくともこのテストは良い兆候でした。私はここで私の初期の結果を共有したいと思いました。

0
追加された
もう1つの免責事項:私はVSTSのプロダクトマネージャーとしてMicrosoftに勤務していますが、これはすべて私の日の仕事でも、私はUWPチームまたはこのサンプルを代表するものでもない、さまざまな楽しいプロジェクトを探求する私の趣味です。他のユーザーと同じように、ウェブを検索しました
追加された 著者 Dmitry Lyalin,

私たちは、CMakeの新しいPhone and StoreビルドでOpenCVを有効にすることに取り組んでいます。その間は、 http://github.com/msopentech/openCV をご覧ください。これにはOpenCV for WinRTの構築に関する指示があります。

0
追加された