日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

人脸识别:使用MinGW编译seetaface6

發(fā)布時(shí)間:2024/1/1 pytorch 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 人脸识别:使用MinGW编译seetaface6 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

剛編譯完seetaface2后就發(fā)現(xiàn)seetaface6已經(jīng)出來了。對(duì)比可下兩者間的結(jié)構(gòu)還是差別挺大的

seetaface6:

  • 基于BSD協(xié)議,可以商業(yè)使用
  • 基于tennis引擎,再也沒有社區(qū)版和商業(yè)版的區(qū)別
  • 開放基于MobileNet的識(shí)別模型,利于邊緣設(shè)備部署
  • 活體檢測(cè)、口罩人臉識(shí)別、人臉屬性分析,閉眼檢測(cè)等等均開放

源碼下載

源碼地址

使用?git clone --recursive https://github.com/SeetaFace6Open/index.git 命令下載下來后發(fā)現(xiàn)各個(gè)模塊子目錄下還是空的,這里只能一個(gè)模塊一個(gè)模塊去下載了,目錄結(jié)構(gòu)大概就如下圖了

?編譯順序

OpenRoleZoo 為常用操作的集合,SeetaAuthorize 為模型解析工程,TenniS 為前向計(jì)算框架。需要重點(diǎn)說明的是,此次 TenniS 同時(shí)放出了?GPU?計(jì)算源碼,可以編譯出?GPU?版本進(jìn)行使用。上述三個(gè)模塊為基礎(chǔ)模塊,各個(gè) SDK 的編譯均依賴上述模塊,因此需要優(yōu)先編譯出 OpenRoleZoo, SeetaAuthorize 和 TenniS,然后再進(jìn)行其他 SDK 模塊的編譯。

編譯參考

每個(gè)模塊目錄下都有一個(gè)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 /b

VS140COMNTOOLS 是微軟的編譯器

上面可以看到一些編譯參數(shù),試應(yīng)cmake配置時(shí)對(duì)應(yīng)加入上面參數(shù),略有修改

編譯OpenRoleZoo

打開cmake

PLATFORM = x86

CMAKE_BUILD_TYPE =?Release

CMAKE_INSTALL_PREFIX =?D:/nbook/SeetaFace/install

ORZ_WITH_OPENSSL=OFF

?點(diǎn)擊Configure,Generate生成編輯所需要的信息

用dos命令進(jìn)入目錄D:\nbook\SeetaFace\buile_SeetaFace6\OpenRoleZoo。這里我用的是MobaXtem這個(gè)軟件,也可以用window自帶的dos窗口

執(zhí)行

?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

執(zhí)行?mingw32-make.exe 報(bào)錯(cuò):

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());類型轉(zhuǎn)換錯(cuò)誤

打開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++ 編譯器有一個(gè)"擴(kuò)展",允許從pointer-to-function到?void*的隱式轉(zhuǎn)換。 這里轉(zhuǎn)換不是 C++ 語言的一部分。MinGw沒有此擴(kuò)展

至此3個(gè)基礎(chǔ)模塊編譯完成了

編譯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(沒有這個(gè)找不到之前編譯庫安裝路徑)

打開D:\nbook\SeetaFace\index\SeetaEyeStateDetector/CMakeLists.txt

找到下圖這行,去掉FORCE,否則無修改安裝路徑

Configure后再重新選擇各個(gè)庫

這里不選bin/下的dll庫,不選擇lib下的.dll.a庫,否則編譯時(shí)會(huì)爆出多重定義?

?到這里我遇到的坑都填完了,后面幾個(gè)模塊照這樣一個(gè)個(gè)編譯

總結(jié)

以上是生活随笔為你收集整理的人脸识别:使用MinGW编译seetaface6的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。