美文网首页
uniapp+h5+tracking.js活体检测

uniapp+h5+tracking.js活体检测

作者: 白衣诗人 | 来源:发表于2023-07-09 17:07 被阅读0次
    <template>
      <div class="face">
          <div class="face-meiti">
            <div class="tip">{{tip}}</div>
            <video ref="video" id="video" objectFit="cover" :controls="false" :show-center-play-btn="false" :autoplay="true" :loop="true"></video>
            <canvas ref="canvas" :style="canvasStyle" canvas-id="myCanvas" id="myCanvas"></canvas>
            <view style="display: flex;justify-content: space-between;align-items: center;position: fixed;bottom: 0;left: 0;right:0;">
                <template v-if="src && src.length > 0">
                    <template v-for="(item, index) in src">
                        <image style="width: 100%;" :key="index" :src="item.src" mode="widthFix"></image>
                    </template>
                </template>
            </view>
          </div>
      </div>
    </template>
    
    <script>
    import '@/static/tracking/tracking-min.js';
    import '@/static/tracking/data/face-min.js';
    export default {
        data() {
            return {
                tip:'请正对摄像头',
                mediaStreamTrack:null,
                video:null,// 播放器实例
                trackerTask:null, //tracking实例
                uploadLock: true, // 上传锁
                faceflag:false,//是否进行拍照
                src:[],
                canvasStyle:{}
            }
        },
        mounted() {
            const _this = this;
            uni.getSystemInfo({
                success(res) {
                    _this.canvasStyle = {
                        width:res.windowWidth+'px',
                        height:res.windowWidth+'px',
                    }
                    _this.init({width:res.windowWidth, height:res.windowWidth});
                }
            })
           
        },
        methods: {
            init(options) {
                const _this = this;
                if(document.getElementById('video') && document.getElementById('video').children[0] !== null && document.getElementById('video').children[0].children[0] !== null && document.getElementById('myCanvas') && document.getElementById('myCanvas').children[0] !== null) {
                    this.video = this.mediaStreamTrack = document.getElementById('video').children[0].children[0];
                    console.log(this.video)
                    this.getUserMedia = navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia;
                    navigator.getUserMedia({'video':true},function (stream) {
                        _this.video.srcObject = stream
                    },function (err) {
                        this.tip = '摄像头调用失败'
                    })
                    _this.initTracker(options)
                }
            },
            initTracker(options){
                const _this = this;
                // 固定写法
                let tracker = new window.tracking.ObjectTracker('face');
                tracker.setInitialScale(4);
                tracker.setStepSize(2);
                tracker.setEdgesDensity(0.1);
    
                // //摄像头初始化
                this.trackerTask = window.tracking.track(this.video, tracker, {
                    camera: true
                });
                tracker.on('track', function (event){
                    if(event.data.length == 0){
                        if(!_this.faceflag){
                            _this.tip = '未检测到人脸'
                        }
                    }else if(event.data.length > 0){
                        _this.tip = '识别成功,正在拍照,请勿乱动~';
                        // const ctx = uni.createCanvasContext('myCanvas');
                           let canvas = document.getElementById('myCanvas').children[0];
                        const  context = canvas.getContext('2d', {willReadFrequently: true});
                        event.data.forEach(function(rect) {
                            if(!_this.faceflag){
                                _this.faceflag = true;
                                context.drawImage(_this.video, 0, 0, options.width, options.height);
                                const base64Img = canvas.toDataURL('image/jpeg');
                                if(_this.src.length < 3){
                                    _this.src.push({
                                        src:base64Img
                                    })
                                   setTimeout(function (){
                                       _this.faceflag = false
                                   }, 500) 
                                }else{
                                    uni.showToast({
                                        title:'检测认证已完成'
                                    })
                                }
                            }
                        });
                    }
                })
            }
        }
    }
    </script>
    <style lang="scss">
    .face{
        width: 100vw;
        height: 100vh;
        display: flex;
        justify-content: center;
        align-items: flex-start;
        padding: 60rpx 0;
        box-sizing: border-box;
        .face-meiti{
            position: relative;
            .tip{
                text-align: center;
                font-size: 24rpx;
                padding-bottom: 30rpx;
            }
            video{
                display: block;
                width: 360rpx;
                height: 360rpx;
                -webkit-border-radius: 180rpx;
                -moz-border-radius:  180rpx;
                border-radius:  180rpx;
                object-fit: cover;
                border: 2rpx solid #000;
                box-sizing: border-box;
                margin: 0 auto;
            }
            canvas{
                position: fixed;
                top: 0;
                left: 100vw;
            }
        }
        img{
            width: 100%;
            height: auto;
        }
    }
    </style>
    
    

    注意:运行环境需要配置成https,否则是无法在移动设备上使用的

    相关文章

      网友评论

          本文标题:uniapp+h5+tracking.js活体检测

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