==虹软官网地址==

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');

虹软SDK在nodejs中的集成的更多相关文章

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

    ==虹软官网地址==http://www.arcsoft.com.cn 在官网注册账号,并且申请人脸识别激活码, 选择SDK版本和运行系统(windows/linux/android/ios) ,我们 ...

  2. 阿里云 OCS SDK for NodeJS介绍

    阿里云 OCS SDK for NodeJS介绍 阿里云技术团队:熊亮 阿里云 SDK for NodeJS 是为 NodeJS 开发者提供使用阿里云各项服务的统一入口,由阿里云UED团队负责开发维护 ...

  3. iOS中支付宝集成

    iOS中支付宝集成 如今各种的App中都使用了三方支付的功能,现在将我在使用支付宝支付集成过程的心得分享一下,希望对大家都能有所帮助 要集成一个支付宝支付过程的环境,大致需要: 1>公司:先与支 ...

  4. 在Nodejs中贯彻单元测试

    在团队合作中,你写好了一个函数,供队友使用,跑去跟你的队友说,你传个A值进去,他就会返回B结果了.过了一会,你队友跑过来说,我传个A值却返回C结果,怎么回事?你丫的有没有测试过啊? 大家一起写个项目, ...

  5. 《Android原生整合虹软SDK开发uniapp插件》

    1.项目背景 应公司要求,需要开发一套类似人脸打卡功能的app,但是因为我们公司没有很强的原生android开发者,所以根据现状选择了第三方跨平台的uniapp,想必目前大多人都了解这个平台了,我也就 ...

  6. nodejs中获取时间戳、时间差

    Nodejs中获取时间戳的方法有很多种,例如: new Date().getTime() Date.now() process.uptime() process.hrtime() 平时想获取一个时间戳 ...

  7. 在Nodejs中如何调用C#的代码

    最近需要在Nodejs中用到C#的代码,从网上了解到可以采用Edgejs来实现Nodejs与C#的代码交互, 直接复制网上的代码运行总是出各种错,填了不少坑,现在把自己的案例代码大致整理一下,方便以后 ...

  8. nodejs 中自定义事件

    经常看到 req.on('error', function(){...}); 这种代码. 在nodejs中,可以使用 EventEmitter来实现. 具体的关键词有如下几个: var reqEven ...

  9. NodeJS中的异步I/O、事件驱动

    nodejs的主要特点是单线程.异步I/O.事件驱动.让我们先大概了解一下这些名词的意思. 单线程 单线程是任务按照顺序执行的,并且每次只执行一个任务,只有前面的任务执行完成以后,后面的任务才执行.在 ...

随机推荐

  1. 原生JS表格行拖动排序,添加了回调功能

    function tableDnD(el, callback) { if (typeof (el) == "string") { el = document.getElementB ...

  2. Ububtu 14.04 安装 Hadoop 2.7.3

    1.首先安装java,配置java开发环境 下载jdk:http://www.oracle.com/technetwork/java/javase/archive-139210.html选择你想要下载 ...

  3. CentOS使用systemctl daemon-reload报错Error getting authority: Error initializing authority: Error calling StartServiceByName for org.freedesktop.PolicyKit1: Timeout was reached (g-io-error-quark, 24)解决办法

    CentOS修改了系统启动文件后需要重载报错 systemctl daemon-reload Error getting authority: Error initializing authority ...

  4. RMQPOJ3264

    Balanced Lineup POJ-3264 DP分析 设A[i]是要求区间最值的数列,F[i, j]表示从第i个数起连续2^j个数中的最大值.(DP的状态) 初状态是F[i,0]=A[i] 状态 ...

  5. jQuery设置时间格式

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...

  6. TZOJ :2731: 存钱计划(二)

    描述 在TZC,WY存了钱,现在他要去买东西了.店很多,标记为1,2,3,4,5,6....但有的店之间有大路相连,而有的没有路.现在要由一个店到另一个店买东西,中途最少要经过多少个其它的店铺呢? 如 ...

  7. 3、jeecg 笔记之 模糊查询

    1.前言 jeecg 考虑到默认模糊查询的话,会增加系统压力,导致查询慢,本来系统就挺那啥的... 2.方式一之实体赋值 实体重新赋值查询,用 * %% * 实现,我们知道 sql 中通常使用 % 去 ...

  8. Ajax取PHP JSON数据并显示

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...

  9. java框架之SpringBoot(4)-资源映射&thymeleaf

    资源映射 静态资源映射 查看 SpringMVC 的自动配置类,里面有一个配置静态资源映射的方法: @Override public void addResourceHandlers(Resource ...

  10. Eureka 参数调优

    常见问题 为什么服务下线了,Eureka Server 接口返回的信息还会存在. 为什么服务上线了,Eureka Client 不能及时获取到. 为什么有时候会出现如下提示: EMERGENCY! E ...