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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

在nodejs中的集成虹软人脸识别

發布時間:2025/7/14 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在nodejs中的集成虹软人脸识别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

==虹軟官網地址==
http://www.arcsoft.com.cn

在官網注冊賬號,并且申請人臉識別激活碼, 選擇SDK版本和運行系統(windows/linux/android/ios) ,我們選擇windows做測試,申請類型選擇1:N ,功能模塊包括人臉檢測、人臉跟蹤、人臉識別。申請之后會獲取APP_ID 和SDK_Key,在代碼中會用到。

==虹軟SDK人臉檢測目的==

主要是與face++人臉檢測做對比,看能否在face++人臉檢測之前選擇虹軟事先檢測一下。

==c++部分功能實現==


選擇 Qtcreator 4.2.1 ,新建c++ 庫。
設置Qt .pro文件

```
#不加載Qt庫
QT -= core gui
#生成庫名字
TARGET = detect_lib
#定義生成lib
TEMPLATE = lib

DEFINES += DETECT_LIB_LIBRARY
SOURCES += detect_lib.cpp
#加載虹軟sdk頭文件
HEADERS += detect_lib.h \
inc/amcomdef.h \
inc/ammem.h \
inc/arcsoft_fsdk_face_detection.h \
inc/asvloffscreen.h \
inc/merror.h

unix {
target.path = /usr/lib
INSTALLS += target
}

unix|win32: LIBS += -L$$PWD/lib/ -llibarcsoft_fsdk_face_detection

INCLUDEPATH += $$PWD/.
DEPENDPATH += $$PWD/.
```
上面是.pro文件,主要是一些配置信息,如生成庫名字 加載虹軟SDK 和頭文件...

下面是detect_lib.h文件 主要供nodejs調用的接口文件。

```
#ifndef DETECT_LIB_H
#define DETECT_LIB_H

# ifdef __cplusplus
# define EXTERN_NAME extern "C"
# else
# define EXTERN_NAME extern
# endif

#if defined(WIN32)
# define Q_DECL_EXPORT __declspec(dllexport)
# define Q_DECL_IMPORT __declspec(dllexport)
#if defined(DETECT_LIB_LIBRARY)
# define DETECT_LIBSHARED_EXPORT EXTERN_NAME Q_DECL_EXPORT
# else
# define DETECT_LIBSHARED_EXPORT EXTERN_NAME Q_DECL_IMPORT
#endif
#else
# define DETECT_LIBSHARED_EXPORT EXTERN_NAME
#endif

DETECT_LIBSHARED_EXPORT int add(int a,int b);

DETECT_LIBSHARED_EXPORT int detect(unsigned char * data,int width,int height);

#endif // DETECT_LIB_H
```

接口add 函數 主要做測試用

int detect(unsigned char * data,int width,int height);

檢測人臉函數, data:rgb像素值,width:圖片寬度,height:圖片高度


detect_lib.cpp

```
#include <nan.h>
#include "detect_lib.h"
using namespace Nan ;
using namespace v8;


class DetectWorker : public AsyncWorker {
public:
DetectWorker(Callback *callback, unsigned char* buffer,int width,int height)
: AsyncWorker(callback), p_buffer(buffer), m_width(width),m_height(height) {m_num = 0;}
~DetectWorker() {}

//這個函數運行在工作線程,而不是v8線程,所以不能訪問v8的數據
void Execute () {

//m_num = add(12,3);
m_num = detect(p_buffer,m_width,m_height);
// m_num = 5;

}

//這個是libuv的回調函數,在這里可以使用v8的數據
void HandleOKCallback () {

Local<Object> bmpData = NewBuffer(m_num).ToLocalChecked();
Local<Value> argv[] = {
Nan::Null()
,Uint32::New(v8::Isolate::GetCurrent(),m_num)
};


callback->Call(2, argv);
};

private:
unsigned char * p_buffer;
int m_width;
int m_height;
int m_num;
};


NAN_METHOD(detect){
unsigned char * buffer = (unsigned char*) node::Buffer::Data(info[0]->ToObject());
int width = info[1]->Uint32Value();
int height = info[2]->Uint32Value();

Callback *callback = new Callback(info[3].As<Function>());
AsyncQueueWorker(new DetectWorker(callback, buffer,width ,height));
}

NAN_MODULE_INIT(Init)
{
Nan::Set(target,New<String>("detect").ToLocalChecked(),
GetFunction(New<FunctionTemplate>(detect)).ToLocalChecked());
}

NODE_MODULE(detect, Init)
```
NAN_METHOD(detect) 表示定義接口detect ,js可以直接調用,
這里主要是node中的buffer直接以字節的方式傳遞給c++。也是nodejs與c++交互的重要方式。

將編譯好的dll 和虹軟sdk dll 和detect_lib.h拷貝到當前目錄,然后通過node-gyp configure 和node-gyp build 生成.node

至此.node庫編譯完成,可以使用require直接飲用該.node 如:var detect = require('./build/Release/detect.node');

轉載于:https://www.cnblogs.com/Zzz-/p/10531542.html

總結

以上是生活随笔為你收集整理的在nodejs中的集成虹软人脸识别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。