美文网首页
wrs-arcface虹软人脸识别

wrs-arcface虹软人脸识别

作者: 浪人残风 | 来源:发表于2021-08-11 09:29 被阅读0次

    前言

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

    功能

    • 支持活体识别、离线识别
    • 图片人脸特征识别(年龄、性别、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>
    
    

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

    相关文章

      网友评论

          本文标题:wrs-arcface虹软人脸识别

          本文链接:https://www.haomeiwen.com/subject/onbqbltx.html