人脸识别:使用MinGW编译seetaface6
剛編譯完seetaface2后就發現seetaface6已經出來了。對比可下兩者間的結構還是差別挺大的
seetaface6:
- 基于BSD協議,可以商業使用
- 基于tennis引擎,再也沒有社區版和商業版的區別
- 開放基于MobileNet的識別模型,利于邊緣設備部署
- 活體檢測、口罩人臉識別、人臉屬性分析,閉眼檢測等等均開放
源碼下載
源碼地址
使用?git clone --recursive https://github.com/SeetaFace6Open/index.git 命令下載下來后發現各個模塊子目錄下還是空的,這里只能一個模塊一個模塊去下載了,目錄結構大概就如下圖了
?編譯順序
OpenRoleZoo 為常用操作的集合,SeetaAuthorize 為模型解析工程,TenniS 為前向計算框架。需要重點說明的是,此次 TenniS 同時放出了?GPU?計算源碼,可以編譯出?GPU?版本進行使用。上述三個模塊為基礎模塊,各個 SDK 的編譯均依賴上述模塊,因此需要優先編譯出 OpenRoleZoo, SeetaAuthorize 和 TenniS,然后再進行其他 SDK 模塊的編譯。
編譯參考
每個模塊目錄下都有一個craft文件夾,下面放了一些編譯腳本
?我用的是window下的32位mingw編譯器,這里打開build.win.vc14.x86.cmd文件作為參考:
@echo offset "BUILD_DIR=build.win.vc14.x86" set "BUILD_TYPE=Release" set "PLATFORM=x86" set "PLATFORM_TARGET=x86"set "WITH_SSL=OFF"set "INSTALL_DIR=../../../build"call "%VS140COMNTOOLS%..\..\VC\vcvarsall.bat" %PLATFORM%cd %~dp0md "%BUILD_DIR%"cd "%BUILD_DIR%"md "%INSTALL_DIR%"cmake "%~dp0.." ^ -G"NMake Makefiles JOM" ^ -DCMAKE_BUILD_TYPE="%BUILD_TYPE%" ^ -DPLATFORM="%PLATFORM_TARGET%" ^ -DORZ_WITH_OPENSSL="%WITH_SSL%" ^ -DCMAKE_INSTALL_PREFIX="%INSTALL_DIR%"jom -j16 installexit /bVS140COMNTOOLS 是微軟的編譯器
上面可以看到一些編譯參數,試應cmake配置時對應加入上面參數,略有修改
編譯OpenRoleZoo
打開cmake
PLATFORM = x86
CMAKE_BUILD_TYPE =?Release
CMAKE_INSTALL_PREFIX =?D:/nbook/SeetaFace/install
ORZ_WITH_OPENSSL=OFF
?點擊Configure,Generate生成編輯所需要的信息
用dos命令進入目錄D:\nbook\SeetaFace\buile_SeetaFace6\OpenRoleZoo。這里我用的是MobaXtem這個軟件,也可以用window自帶的dos窗口
執行
?mingw32-make.exe
?mingw32-make.exe install
編譯SeetaAuthorize
打開cmake
PLATFORM = x86
CMAKE_BUILD_TYPE =?Release
CMAKE_INSTALL_PREFIX =?D:/nbook/SeetaFace/install
ORZ_WITH_OPENSSL=OFF
ORZ_ROOT_DIR =?D:/nbook/SeetaFace/install/
LIB_ROOT_DIR=?D:/nbook/SeetaFace/install/lib/x86/libORZ_static.a
編譯TenniS
PLATFORM = x86
CMAKE_BUILD_TYPE =?Release
CMAKE_INSTALL_PREFIX =?D:/nbook/SeetaFace/install
ORZ_WITH_OPENSSL=OFF
ORZ_ROOT_DIR =?D:/nbook/SeetaFace/install/
?CONFIGURATION=Release
TS_USE_OPENMP=ON?
TS_USE_SIMD=ON?
TS_ON_HASWELL=ON?
TS_DYNAMIC_INSTRUCTION=ON
執行?mingw32-make.exe 報錯:
D:\nbook\SeetaFace\index\TenniS\src\runtime\importor.cpp:30:31: error: invalid conversion from 'FARPROC {aka int (__attribute__((__stdcall__)) *)()}' to 'void*' [-fpermissive]
? ? ? ? ?return GET_FUC_ADDRESS(m_handle, fuc_name.c_str());
大概就是說?return GET_FUC_ADDRESS(m_handle, fuc_name.c_str());類型轉換錯誤
打開D:\nbook\SeetaFace\index\TenniS\src\runtime\importor.cpp,找到30行
修改前:
void* Importor::get_fuc_address(const std::string& fuc_name){
? ? ? ? if(m_handle == nullptr){
? ? ? ? ? ? TS_LOG_ERROR << "handle is nullptr,please call load() first." << eject;
? ? ? ? }
? ? ? ? return GET_FUC_ADDRESS(m_handle, fuc_name.c_str());
? ? }
???????修改后:
void* Importor::get_fuc_address(const std::string& fuc_name){
? ? ? ? if(m_handle == nullptr){
? ? ? ? ? ? TS_LOG_ERROR << "handle is nullptr,please call load() first." << eject;
? ? ? ? }
? ? ? ? return (void *)GET_FUC_ADDRESS(m_handle, fuc_name.c_str());
? ? }
?原因:
Visual C++ 編譯器有一個"擴展",允許從pointer-to-function到?void*的隱式轉換。 這里轉換不是 C++ 語言的一部分。MinGw沒有此擴展
至此3個基礎模塊編譯完成了
編譯SeetaEyeStateDetector
PLATFORM = x86
CMAKE_BUILD_TYPE =?Release
CMAKE_INSTALL_PREFIX =?D:/nbook/SeetaFace/install
ORZ_WITH_OPENSSL=OFF
ORZ_ROOT_DIR =?D:/nbook/SeetaFace/install/
CONFIGURATION=Release
SEETA_AUTHORIZE=OFF
SEETA_MODEL_ENCRYPT=ON
???????SeetaAuthorize_dir=D:/nbook/SeetaFace/install/
CMAKE_MODULE_PATH=D:/nbook/SeetaFace/install/cmake(沒有這個找不到之前編譯庫安裝路徑)
打開D:\nbook\SeetaFace\index\SeetaEyeStateDetector/CMakeLists.txt
找到下圖這行,去掉FORCE,否則無修改安裝路徑
Configure后再重新選擇各個庫
這里不選bin/下的dll庫,不選擇lib下的.dll.a庫,否則編譯時會爆出多重定義?
?到這里我遇到的坑都填完了,后面幾個模塊照這樣一個個編譯
總結
以上是生活随笔為你收集整理的人脸识别:使用MinGW编译seetaface6的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 淘宝规则大改动,中差评取消了,对于中小卖
- 下一篇: visualSVN Server的下载和