C++版本在這 → [openvino-5] OpenCV Project using Intel IE( C++ )
C# openCV套件我用過的有兩套
EmguCV and opencvsharp3
之前我是透過Visual Studio的Nuget Package Manager下載
不過現在我要用的EmguCV需要support intel inference engine
所以還是自己載一包EmguCV的source code來build
■ 下載Emgu Source code
一開始我從這https://github.com/emgucv/emgucv
選Download ZIP的方式把source code 載下來
但這種方式載下來的code不完整
比如opencv_contrib底下空空如也
但在github上 那底下是有檔案的
code不完整的話會造成之後的步驟產生build error
因為某些檔案找不到
所以改用以下指令載Source Code
1. git clone https://github.com/emgucv/emgucv emgucv
2. cd emgucv
3. git submodule update --init --recursive
(這步會有點久 我連手機熱點等了差不多半小時才結束)
■ Added option to build Emgu CV with Intel OpenVINO.
https://github.com/emgucv/emgucv/tree/master/platforms/windows
裡面的說明顯示 Build_Binary_x86-64_intel_inf_icl_doc.bat
的功能是Added option to build Emgu CV with Intel OpenVINO
所以我直接拿來用
build出來的dll塞到程式裡面
(程式裡指定backend為Intel's Deep Learning Inference Engine)
會有haveInfEngine()的錯誤
這感覺就是build出來的dll 裡面沒有包含到Inference Engine
以下是碎碎念可以跳過
試了很多方法都有一樣的Error
每試一個方法就要重build一次
每次重build又超久 build掉了幾個工作天
最後我只好看進去這一支Build_Binary_x86-64_intel_inf_icl_doc.bat
搭配[openvino-5] OpenCV Project using Intel IE( C++ ) 的流程
看到底是怎麼一回事
上面那個bat的內容只有一行
CALL Build_Binary_x86.bat 64 nogpu intel_inf no-openni doc
所以癥結點應該是出在Build_Binary_x86.bat 這支batch
我看到這段
IF EXIST "%OPENVINO_DIR%" IF "%OS_MODE%"==" Win64" IF "%3%"=="intel_inf" GOTO WITH_OPENVINO
GOTO WITHOUT_OPENVINO
:WITH_OPENVINO
SET CMAKE_CONF_FLAGS=^
-DWITH_INF_ENGINE:BOOL=TRUE ^
-DINF_ENGINE_INCLUDE_DIRS="%OPENVINO_DIR:\=/%/deployment_tools/inference_engine/include" ^
-DINF_ENGINE_LIB_DIRS="%OPENVINO_DIR:\=/%/deployment_tools/inference_engine/lib/intel64" ^
-DENABLE_CXX11=ON ^
簡單來說
要符合第一行的IF條件式才會進入WITH_OPENVINO這段
但batch設定OPENVINO_DIR的程式碼被comment out了
像這樣→ REM SET OPENVINO_DIR=
所以這個batch只會執行WITHOUT_OPENVINO那段
我真的是幹到最高點
難怪怎麼build都解不掉
總之最後
Build_Binary_x86.bat 要加兩個東西
1.你安裝的OpenVino位置
2.Inference Engine Dir 。要用引號包住,否則之後build emgucv.sln的時候會有error
加完之後執行Build_Binary_x86-64_intel_inf_icl_doc.bat
會產生一個 b 資料夾,裏頭有emgucv.sln
release build裡面的cvextern project
build的時間會很久 約莫15分鐘以上
build完後若看到以下Error
MSB3073 The command "setlocal
就在cvextern上按右鍵→properties→Build Events→Post-Build Event
→Use In Build 改成No → 重build cvextern
C:\Users\Gary\emgucv\libs\x64\ 底下會有這些dll
把這些dll "直接"Add到c# project裡
該死的haveInfEngine()解掉了 耶比
EMGU Download And Installation
(我用的作業系統是win10)
從Windows底下的Building from Git 開始看