ArcSoft3.0_Nodejs
一、项目说明
虹软官网传送门 ,有不同平台和不同版本的sdk,有需要的根据业务下载。
此次项目支持windows和linux系统,mac 由于 禁用electron打包的应用。
- 项目由electron-vue脚手架创建。
- 在主线程中实现与虹软SDK交互,如果还需要和render层交互,还需使用app.on来接收render层传过来的业务。
- vue打包时,需要在package.json中配置包含路径。
- 采用ffi库调用C++库,ref资料1
ref资料2
ref资料3
其它的请自行百度,此处就不细细阐述了。 - 图片处理有两种,一种是opencv4nodejs(node版本大于10.x,我用的是10的最后一版本,最新版本的用的python3.3,编译问题太多),一种是jimp,都有方法实现,我推荐opencv,处理速度快,但是配置环境略复杂。
资料看官方的npm即可,其余资料参考python调用opencv的方法类似。 - 此次主要针对window版本的dll,linux调用方法一样,将路径换位自己的路径即可,文件名为.so
二、ffi安装及环境安装
1、安装 Visual Studio 15 生成工具 2017
利用 微软自带的安装exe 【vs_BuildTools.exe】
目录:C:\Users\Administrator\.windows-build-tools,脚本安装时,会因为安装包过大和网络问题,导致安装失败。
2、指定编译MSBuild.exe位置,因为2019和上述装的2017都有这个exe,最好使用2017的,2019我安装失败了。
npm config set msbuild_path "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin\MSBuild.exe"
3、指定python版本,还是建议2.7,其他高版本问题太多,我的3.8.5(不推荐)
npm config set python C:/Python27
npm config set python C:/python3.8.5
3、安装gyp
npm install node-gyp -g
或者
npm install --global node-gyp@latest
4、安装ffi ref
npm install ffi -g
npm install ref -g
成功编译
三、opencv4nodejs的安装
手动安装opencv的环境,设置环境变量
OPENCV_BIN_DIR=E:\commonsoft\opencv\build\x64\vc14\bin
OPENCV_INCLUDE_DIR=E:\commonsoft\opencv\build\include
OPENCV_LIB_DIR=E:\commonsoft\opencv\build\x64\vc14\lib
此处这么安装,成功率90%
set OPENCV4NODEJS_DISABLE_AUTOBUILD=1
npm i -g opencv4nodejs
四、代码结构
├─.electron-vue
├─.idea
├─build
│ └─icons
├─dist
│ ├─electron
│ └─web
├─images
├─src
│ ├─main
│ │ ├─inc
│ │ ├─lib
│ │ │ ├─X64
│ │ │ └─X86
│ │ └─modual
│ │ ├─img
│ │ │ ├─faces
│ │ │ └─test
│ │ └─log
│ └─renderer
│ ├─assets
│ ├─components
│ │ └─LandingPage
│ ├─router
│ └─store
│ └─modules
├─static
└─test
├─e2e
│ └─specs
└─unit
modual文件夹为人脸识别工作目录
lib文件夹为放置dll文件路径的地方,x86 x64 为对应的版本
img 图片路径(faces 为 drawFace 的操作路径 test 是 cvImages 的操作路径)
五、代码调用实例及说明
const arc_face = require('./face_engine');
const path = require('path');
const config = require('./config');
const m = require('./logger');
const client = require('./clients');
const imageHelper = require('./face_cv_image');
const fsUtil = require('./fileUtils');
// 设置dll路径
let dllPath = "";
if (process.env.NODE_ENV !== 'development') {
dllPath = require('path').join(__dirname, '../../main/lib/X64').replace(/\\/g, '\\\\')
}else{
dllPath = require('path').join(__dirname, '../lib/X64').replace(/\\/g, '\\\\')
}
// 添加DLL所在目录到环境变量
process.env['PATH'] = `${
process.env.PATH};${
dllPath}`;
// 初始化接口
const arc = new arc_face(config.lib_win64);
Object