wrs-arcface虹软人脸识别

2021-08-11  本文已影响0人  浪人残风

前言

虹软人脸识别组件,支持活体识别、离线识别、图片人脸特征识别、图片是否同一人对比、相机人脸识别或对比

功能

激活引擎

使用之前需要激活引擎,虹软官方注册账号,获取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属性:

方法:
停止摄像头

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>

如果觉得可以就点个👍吧,欢迎粉丝收藏,土豪打赏,您的关注就是我们创作的动力!

上一篇 下一篇

猜你喜欢

热点阅读