前言
虹软人脸识别组件,支持活体识别、离线识别、图片人脸特征识别、图片是否同一人对比、相机人脸识别或对比
功能
- 支持活体识别、离线识别
- 图片人脸特征识别(年龄、性别、3DAngle)
- 两张图片是否是同一人对比
- 相机活体识别出人脸,用于人脸注册保存到本地,便于后面身份鉴定时作对比
- 相机活体人脸对比,用于鉴定身份,常用于支付前活体人脸身份鉴定
激活引擎
使用之前需要激活引擎,虹软官方注册账号,获取APP_ID、SDK_KEY,注意创建应用的时候iOS需要绑定包名(这里iOS的包名对应自定义基座时的Bundle ID(AppID)),Android需要绑定包名和签名(这里的包名对应自定义基座时Android包名,这里签名是打包证书对应的sha1值)
图片.png
图片.png 图片.png
var arcface = uni.requireNativePlugin("wrs-arcface");
var options = {};
options.appid = "xxxxx";
switch (uni.getSystemInfoSync().platform) {
case 'android':
options.sdkkey = 'xxx';
break;
case 'ios':
options.sdkkey = 'xxx';
break;
default:
break;
}
arcface.activeEngine(options, (resp) => {
if (resp.result) {
console.log("激活成功");
} else {
console.log("激活失败");
}
this.showMsg("引擎激活结果:" + JSON.stringify(resp))
});
获取图片人脸信息(年龄、性别、3DAngle)
var options = {
url: “” // 本地图片地址或网络图片
};
arcface.getImageFaceFeature(options, (resp) => {
if (resp.result) {
console.log("识别成功");
} else {
console.log("识别失败");
}
this.showMsg("图片识别结果:" + JSON.stringify(resp))
});
判断2个人脸图是否是同一个人
var options = {
url1: “”, // 图片1地址,本地图片地址或网络图片
url2: ”“ // 图片2地址
};
arcface.getSimilarity(options, (resp) => {
if (resp.result) {
var similarity = resp.similarity;
if (similarity >= 0.80) { // 一般相似度大于0.8基本上就是同一个人了
console.log("是同一个人");
} else {
console.log("不是同一个人");
}
}
this.showMsg("获取相似度结果:" + JSON.stringify(resp))
});
摄像机人脸识别或人脸身份对比鉴定
<wrs-arcfacevideo ref='arcfacevideo' :style="'width:'+width+'px;height:'+height+'px;'" :config="config" @resultCallback="resultCallback">
</wrs-arcfacevideo>
config: {
mode: 'recognize' ,// 模式,支持recognize、compare,recognize表示从摄像头识别人脸,一般用于人脸注册保存到本地,compare表示从摄像头识别出某个人,一般用于身份鉴权
bgColor: "#000000", // 背景颜色
anchorFrame: {
bgImage: frameImage, // 人脸框图片
left: left, // 人脸框左边距,单位 dp
top: top, // 人脸框上边距
width: frameWidth,// 人脸框宽度
height: frameHeight // 人脸框高度
},
compareImage: {
type: 'base64', // 类型,支持url、base64,url表示图片地址,支持本地地址和网络地址,base64表示图片base64的字符串
value: base64
}, // 比较图片地址
similarity: 0.8, // 相似度
liveness: true // 是否活体识别
}
config属性:
- mode: 模式,支持recognize、compare,recognize表示从摄像头识别人脸,一般用于人脸注册保存到本地,compare表示从摄像头识别出某个人,一般用于身份鉴权
- bgColor: 背景颜色
- anchorFrame: 人脸框
- anchorFrame.bgImage: 人脸框图片
- anchorFrame.left: 人脸框左边距,单位 dp
- anchorFrame.top:人脸框上边距
- anchorFrame.width: 人脸框宽度
- anchorFrame.height: 人脸框高度
- compareImage 人脸对图片,用于mode为recognize识别对比模式时作相机对比图片
- compareImage.type: 图片类型,支持url、base64,url表示图片地址,支持本地地址和网络地址,base64表示图片base64的字符串
- compareImage.value:图片类型对应的值
- similarity: 相似度,用于mode为recognize模式时相似度大于这个值时认为是同一个人
- liveness: 是否需要活体识别
方法:
停止摄像头
this.$refs.arcfacevideo.stop();
事件
@resultCallback
mode模式为recognize时,识别到人时回调
mode模式为compare时,识别到人,且大于等于相似度时回调
完整demo
index.nvue
<template>
<div>
<text>虹软人脸识别</text>
<button @click="activeEngine()">激活引擎</button>
<button @click="getImageFaceFeature()">获取图片人脸信息(年龄、性别、3DAngle)</button>
<button @click="getSimilarity()">判断2个人脸图是否是同一个人</button>
<button @click="video_page()">摄像头识别</button>
<text class="log">{{msg}}</text>
</div>
</template>
<script>
String.prototype.endWith = function(endStr) {
var d = this.length - endStr.length;
return (d >= 0 && this.lastIndexOf(endStr) == d)
}
var arcface = uni.requireNativePlugin("wrs-arcface");
export default {
data() {
return {
msg: "",
}
},
methods: {
activeEngine: function() {
var options = {};
options.appid = "xxxxx";
switch (uni.getSystemInfoSync().platform) {
case 'android':
options.sdkkey = 'xxx';
break;
case 'ios':
options.sdkkey = 'xxx';
break;
default:
break;
}
arcface.activeEngine(options, (resp) => {
if (resp.result) {
console.log("激活成功");
} else {
console.log("激活失败");
}
this.showMsg("引擎激活结果:" + JSON.stringify(resp))
});
},
getImageFaceFeature: function() {
var path = "_www";
var absPath = plus.io.convertLocalFileSystemURL(path);
console.log("absPath:" + absPath);
// Android获取的absPath以/结尾,iOS获取的absPath不是/结尾
if (absPath.endWith('/')) {
absPath = absPath.substring(0, absPath.length - 1);
}
var imagePath = absPath + "/static/1.jpeg";
console.log("imagePath:" + imagePath);
var options = {
url: imagePath
};
arcface.getImageFaceFeature(options, (resp) => {
if (resp.result) {
console.log("识别成功");
} else {
console.log("识别失败");
}
this.showMsg("图片识别结果:" + JSON.stringify(resp))
});
},
getSimilarity: function() {
var path = "_www";
var absPath = plus.io.convertLocalFileSystemURL(path);
// Android获取的absPath以/结尾,iOS获取的absPath不是/结尾
if (absPath.endWith('/')) {
absPath = absPath.substring(0, absPath.length - 1);
}
var url1 = absPath + "/static/yifei1.jpeg";
var url2 = absPath + "/static/yifei2.jpeg"
var options = {
url1: url1,
url2: url2
};
arcface.getSimilarity(options, (resp) => {
if (resp.result) {
var similarity = resp.similarity;
if (similarity >= 0.80) { // 一般相似度大于0.8基本上就是同一个人了
console.log("是同一个人");
} else {
console.log("不是同一个人");
}
}
this.showMsg("获取相似度结果:" + JSON.stringify(resp))
});
},
video_page: function() {
uni.navigateTo({
url: './video_face'
});
},
showMsg: function(msg) {
console.log(msg);
this.msg = msg;
}
}
}
</script>
<style>
.btn {
margin-top: 25rpt;
}
</style>
video_face.nvue
<template>
<div>
<wrs-arcfacevideo ref='arcfacevideo' :style="'width:'+width+'px;height:'+height+'px;'" :config="config" @resultCallback="resultCallback">
</wrs-arcfacevideo>
</div>
</template>
<script>
String.prototype.endWith = function(endStr) {
var d = this.length - endStr.length;
return (d >= 0 && this.lastIndexOf(endStr) == d)
}
export default {
data() {
const {
windowWidth,
windowHeight,
statusBarHeight
} = uni.getSystemInfoSync();
var path = "_www";
var absPath = plus.io.convertLocalFileSystemURL(path);
// Android获取的absPath以/结尾,iOS获取的absPath不是/结尾
if (absPath.endWith('/')) {
absPath = absPath.substring(0, absPath.length - 1);
}
var imagePath = absPath + "/static/person.png"
var base64 = "AID6RAAAoEGtWr89v+owPfwSUj1JItm9efbJPT0ENr1K6GG9klBRPPWvSLuVoOs9\r\nlOApvXWyWD3eGOc9ZIEuvO9tnjx0+5U8HLh3O4K7a725UkU9eer4PeREIb30QtK9\r\nbf/Ku9jhIz6bj2m98uRqvXs0gjyyTTu9kmy2vPL29DymqpY8A97Nu2486b1SQlg9\r\npjzCPCHu3ryosQu8TEB0vZmt8z1wz1u9SipDPUcMkrzm38C84EI+vO29OD2DrCu9\r\nQvtYvYIxm709/IU9t/FPvb6r9j2k7IQ99GKKPR0JXD3FAzc98uLWu+VsNL1L6kI9\r\nR/VYPfw4Mr1fTKy9ueqZvTSY9zysJBW9E+WOOxHeM72uJ3a9568SPoexgD28SF86\r\nzKAAPUxwFL0FSe89jGhmPZjtnb26oh88+8W3vE0lmrudmLM8nE40vYuy7zv6MNi9\r\nJv+FvL8zOb2a7JS9yoooPbRmUT3U6Ka8dS7mvdRUA75tvdg9hmqlvXS1gj15IEQ9\r\nJw0Pvpupbz0YxrC8rG6cvLQVs7ynHz49ZcGqvVwuYD0WkJm8hBCQvUQ0sb2gOQE9\r\ny8xIPSZaoL1q4AK9Y7OOvBuh3jpS6gU9+WH0vJ6CGb2taDw9THkjvlWnWTx5WUI9\r\nHMvbPBKkNb4edRS+jLF6veCzkj1E7YW8OyHuPcZ/nT315IQ9snL8vVxRj70AxNS8\r\n7JXQvQeJkT0EX0c9nVPEvYa0oL1zIUG9drMFPQK3n70iXS69teZdvQLX/7pq4Is9\r\ntBlDvZiRl7zMTEG8NJhCPUairr1GRwm7mP1hveqqm70FuEE99acKPazhBz2NRlk9\r\nw5DLO2jnOT31EoM7ovyUPGSa7bu3Z3s8Yi/Nu/EgJb67Fo683q2TvdZZkry3m/Y8\r\nDL3uPacgx71H3TC8+qtbPX6U/L3RV4O9FY1svIu61z1zQ9E9ijwtPe9tKz21qRE8\r\noC8IvspPKr1HUfs8IAruOvs3Y7w6Tcy9mwOtPCMLuT3s/fU9sPYCPiyyZjsMehw6\r\n/XSBPRPHibvztdW8xdVmvAvzEL0gwZM9omdqPbJeG7sdI0s9936QPXq6Jj3hB9s9\r\nB3QkvZRtujzOg7e9TI3vvYsj5j1cIaW8TxoUuzkWBjtErxo9uL8vPR17jDygYe+9\r\nxCm4vQJGcD3NPaG8gLhxuwLb8zwENio8uwEZPM/aCz2n4LA9DkGDvQRQ0r3+aV88\r\npksqPS5aTLuZcma98LFzPRb3VLyNhBm9IROYPY8snD05H7U9S+PTu1n1BDx/gAK+\r\nhKC1PfCQ5jwctqK8dRbSO3nB7LzaBSE9xchEPQQ8jz0oGJ48dN/KvWyTGrwy7mK8\r\n6KqMPf7k/Dxk6ek6w2IaPrvbdzxxYwm9";
var frameImage = absPath + "/static/facesign_border.png";
// 人脸框宽度
var frameWidth = windowWidth * 0.8;
// 图片比例
var imageRatio = 298 / 343;
// 人脸框高度
var frameHeight = frameWidth / imageRatio;
var left = (windowWidth - frameWidth)/2.0;
var top = 100;
var bottom = windowHeight - frameHeight - top;
return {
height: windowHeight,
width: windowWidth,
config: {
mode: 'recognize' ,// 模式,支持recognize、compare,recognize表示从摄像头识别人脸,一般用于人脸注册保存到本地,compare表示从摄像头识别出某个人,一般用于身份鉴权
bgColor: "#000000", // 背景颜色
anchorFrame: {
bgImage: frameImage, // 人脸框图片
left: left, // 人脸框左边距,单位 dp
top: top, // 人脸框上边距
width: frameWidth,// 人脸框宽度
height: frameHeight // 人脸框高度
},
compareImage: {
type: 'base64', // 类型,支持url、base64,url表示图片地址,支持本地地址和网络地址,base64表示图片base64的字符串
value: base64
}, // 比较图片地址
similarity: 0.8, // 相似度
liveness: true, // 是否活体识别
msg: ""
}
}
},
onLoad() {
// 设置播放器宽高,一般宽度铺满全屏,宽高比是16:9
},
onShow() {
// this.$refs.arcfacevideo.start();
},
onUnload(){
this.$refs.arcfacevideo.stop();
},
methods:{
resultCallback: function(resp){
if(resp.detail.result) {
this.$refs.arcfacevideo.stop();
console.log("识别成功");
} else {
console.log("识别失败");
}
var str = JSON.stringify(resp.detail);
console.log(str);
}
}
}
</script>
<style>
</style>
网友评论