婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 基于HTML5+tracking.js實現刷臉支付功能

基于HTML5+tracking.js實現刷臉支付功能

熱門標簽:機器人外呼系統存在哪些能力 電話機器人黑斑馬免費 拓展地圖標注 只辦理400電話 平涼地圖標注位置怎么弄 電話機器人電銷系統掙話費 南昌仁和怎么申請開通400電話 如何獲取地圖標注客戶 高德地圖標注地點糾錯

最近刷臉支付很火,老板們當然要追趕時代潮流,于是就有了刷臉支付這個項目。前端實現關鍵的技術是攝像頭錄像,拍照和人臉比對,本文來探討一下如何在html5環境中如何實現刷臉支付以及開發過程中遇到的問題。

1.攝像頭1.1input獲取攝像頭

html5中獲取用戶攝像頭,有兩種方式,使用input,如下:

<input type="file" capture="camera" accept="image/*"/>

另外如果想打開相冊,可以這樣:

<input type="file" accept="img/*">

但是這兩種方式都會有兼容性問題,用過的同學可能都知道。

1.2getUserMedia獲取攝像圖

getUserMedia是html5一個新的api,官方一點的定義是:

MediaDevices.getUserMedia()會提示用戶給予使用媒體輸入的許可,媒體輸入會產生一個MediaStream,里面包含了請求的媒體類型的軌道。此流可以包含一個視頻軌道(來自硬件或者虛擬視頻源,比如相機、視頻采集設備和屏幕共享服務等等)、一個音頻軌道(同樣來自硬件或虛擬音頻源,比如麥克風、A/D轉換器等等),也可能是其它軌道類型。

簡單一點說就是可以獲取到用戶攝像頭。

同上面input一樣,這種方式也有兼容性問題,不過可以使用其他方式解決,這里可以參考MediaDevices.getUserMedia(),文檔中有介紹"在舊的瀏覽器中使用新的API"。我這里在網上也找了一些參考,總結出一個相對全面的getUserMedia版本,代碼如下:

// 訪問用戶媒體設備
getUserMedia(constrains, success, error) {
    if (navigator.mediaDevices.getUserMedia) {
        //最新標準API
        navigator.mediaDevices.getUserMedia(constrains).then(success).catch(error);
    } else if (navigator.webkitGetUserMedia) {
        //webkit內核瀏覽器
        navigator.webkitGetUserMedia(constrains).then(success).catch(error);
    } else if (navigator.mozGetUserMedia) {
        //Firefox瀏覽器
        navagator.mozGetUserMedia(constrains).then(success).catch(error);
    } else if (navigator.getUserMedia) {
        //舊版API
        navigator.getUserMedia(constrains).then(success).catch(error);
    } else {
        this.scanTip = "你的瀏覽器不支持訪問用戶媒體設備"
    }
}

1.3播放視屏

獲取設備方法有兩個回調函數,一個是成功,一個是失敗。成功了就開始播放視頻,播放視屏其實就是給video設置一個url,并調用play方法,這里設置url要考慮不同瀏覽器兼容性,代碼如下:

success(stream) {
    this.streamIns = stream
    // 設置播放地址,webkit內核瀏覽器
    this.URL = window.URL || window.webkitURL
    if ("srcObject" in this.$refs.refVideo) {
        this.$refs.refVideo.srcObject = stream
    } else {
        this.$refs.refVideo.src = this.URL.createObjectURL(stream)
    }
    this.$refs.refVideo.onloadedmetadata = e => {
        // 播放視頻
        this.$refs.refVideo.play()
        this.initTracker()
    }
},
error(e) {
    this.scanTip = "訪問用戶媒體失敗" + e.name + "," + e.message
}

注意:

  1. 播放視屏方法最好寫在onloadmetadata回調函數中,否則可能會報錯。
  2. 播放視頻的時候出于安全性考慮,必須在本地環境中測試,也就是http://localhost/xxxx中測試,或者帶有https://xxxxx環境中測試,不然的話或有跨域問題。
  3. 下面用到的initTracker()方法也好放在這個onloadedmetadata回調函數里,不然也會報錯。

2. 捕捉人臉

2.1使用tracking.js捕捉人臉

視屏在video中播放成功之后就開始識別人臉了,這里使用到一個第三方的功能tracking.js,是國外的大神寫的JavaScript圖像識別插件。關鍵代碼如下:

// 人臉捕捉
initTracker() {
    this.context = this.$refs.refCanvas.getContext("2d")    // 畫布
    this.tracker = new tracking.ObjectTracker(['face'])     // tracker實例
    this.tracker.setStepSize(1.7)                           // 設置步長
    this.tracker.on('track', this.handleTracked)            // 綁定監聽方法
    try {
        tracking.track('#video', this.tracker)      // 開始追蹤
    } catch (e) {
        this.scanTip = "訪問用戶媒體失敗,請重試"
    }
}

捕獲到人臉之后,可以在頁面上用一個小方框標注出來,這樣有點交互效果。

// 追蹤事件
handleTracked(e) {
    if (e.data.length === 0) {
        this.scanTip = '未檢測到人臉'
    } else {
        if (!this.tipFlag) {
            this.scanTip = '檢測成功,正在拍照,請保持不動2秒'
        }
        // 1秒后拍照,僅拍一次
        if (!this.flag) {
            this.scanTip = '拍照中...'
            this.flag = true
            this.removePhotoID = setTimeout(() => {
                this.tackPhoto()
                this.tipFlag = true
            }, 2000)
        }
        e.data.forEach(this.plot)
    }
}

在頁面中畫一些方框,標識出人臉:

<div class="rect" v-for="item in profile"
             :style="{ width: item.width + 'px', height: item.height + 'px', left: item.left + 'px', top: item.top + 'px'}"></div>
// 繪制跟蹤框
plot({x, y, width: w, height: h}) {
    // 創建框對象
    this.profile.push({ width: w, height: h, left: x, top: y })
}

2.2拍照

拍照,就是使用video作為圖片源,在canvas中保存一張圖片下來,注意這里使用toDataURL方法的時候可以設置第二個參數quality,從0到1,0表示圖片比較粗糙,但是文件比較小,1表示品質最好。

// 拍照
tackPhoto() {
    this.context.drawImage(this.$refs.refVideo, 0, 0, this.screenSize.width, this.screenSize.height)
    // 保存為base64格式
    this.imgUrl = this.saveAsPNG(this.$refs.refCanvas)
    // this.compare(imgUrl)
    this.close()
},
// Base64轉文件
getBlobBydataURI(dataURI, type) {
    var binary = window.atob(dataURI.split(',')[1]);
    var array = [];
    for(var i = 0; i < binary.length; i++) {
        array.push(binary.charCodeAt(i));
    }
    return new Blob([new Uint8Array(array)], {
        type: type
    });
},
// 保存為png,base64格式圖片
saveAsPNG(c) {
    return c.toDataURL('image/png', 0.3)
}

拍照完成之后就可以把文件發送給后端,讓后端進行對比驗證,這里后端使用的是阿里云的接口。

3.最后效果

3.1參考代碼demo

最后,demo我已經放在github上了,感興趣可以打開看一下。

效果如下:

3.2在項目中落地

最后放在項目中,無非就是最后一個步驟,去調用接口比對,根據比對結果成功是成功還是失敗,決定是人臉支付還是繼續使用原來的密碼支付,效果如下:

ps:這里人臉比對失敗了,是因為我帶著口罩,就不呲牙露臉了。

總結

到此這篇關于基于HTML5+tracking.js實現刷臉支付功能的文章就介紹到這了,更多相關html5 刷臉支付內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章,希望大家以后多多支持腳本之家!

標簽:青島 西藏 池州 漯河 棗莊 新疆 遼源 永州

巨人網絡通訊聲明:本文標題《基于HTML5+tracking.js實現刷臉支付功能》,本文關鍵詞  基于,HTML5+tracking.js,實現,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《基于HTML5+tracking.js實現刷臉支付功能》相關的同類信息!
  • 本頁收集關于基于HTML5+tracking.js實現刷臉支付功能的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    91蜜桃免费观看视频| 青青草91视频| 欧美成人a∨高清免费观看| av一区二区三区四区| 国产中文字幕一区| 麻豆国产欧美一区二区三区| 亚洲成av人片| 亚洲一级片在线观看| 亚洲美女屁股眼交3| 日韩理论在线观看| 中文字幕日韩一区| 亚洲欧洲制服丝袜| 亚洲激情自拍偷拍| 亚洲一二三区不卡| 亚洲成av人综合在线观看| 亚洲欧美激情插| 亚洲精品免费看| 依依成人综合视频| 亚洲成人av免费| 午夜视频久久久久久| 视频一区视频二区中文| 人人精品人人爱| 麻豆精品精品国产自在97香蕉| 美女视频黄久久| 国产精品一区三区| www.久久精品| 91成人网在线| 欧美丰满少妇xxxxx高潮对白| 欧美日韩色综合| 欧美成人精品福利| 日本一区二区视频在线观看| 亚洲欧洲制服丝袜| 日日夜夜免费精品| 国产精品一级黄| av亚洲产国偷v产偷v自拍| 色www精品视频在线观看| 91麻豆精品国产自产在线 | 亚洲精品精品亚洲| 日韩av在线免费观看不卡| 国产精品一区二区免费不卡| 91福利国产成人精品照片| 日韩欧美国产一区在线观看| 亚洲三级电影全部在线观看高清| 日韩高清不卡一区| 91无套直看片红桃| 久久久亚洲欧洲日产国码αv| 亚洲日本在线天堂| 国产传媒一区在线| 欧美一级日韩免费不卡| 亚洲视频小说图片| 国产成人夜色高潮福利影视| 777色狠狠一区二区三区| ●精品国产综合乱码久久久久| 捆绑调教一区二区三区| 欧美在线你懂得| 国产精品黄色在线观看| 国产乱码精品一区二区三区忘忧草 | 亚洲1区2区3区4区| av电影在线观看不卡| 欧美α欧美αv大片| 亚洲成人7777| 欧美在线免费观看视频| 日韩一区欧美一区| 成人黄色网址在线观看| 久久久精品免费免费| 国内精品久久久久影院一蜜桃| 欧美色图一区二区三区| 亚洲免费观看高清完整版在线 | 成人小视频在线观看| 日韩欧美视频在线| 日韩黄色片在线观看| 欧美日韩精品一区二区三区| 亚洲国产视频在线| 在线看一区二区| 一区二区免费看| 日本韩国欧美一区| 亚洲一区二区欧美日韩| 欧美少妇性性性| 午夜精品一区二区三区免费视频| 在线精品视频免费播放| 亚洲高清在线精品| 欧美高清精品3d| 麻豆成人综合网| 久久日韩精品一区二区五区| 久久精品国产99国产精品| 欧美精品一区二区三区蜜臀| 国产一区二区三区香蕉| 国产视频911| aa级大片欧美| 亚洲一区二区三区视频在线播放| 欧美久久久久久久久久| 免费成人在线网站| 国产三级三级三级精品8ⅰ区| 国产成人一级电影| 亚洲女同女同女同女同女同69| 在线观看www91| 免费三级欧美电影| 国产亚洲综合性久久久影院| 99re在线视频这里只有精品| 亚洲美女在线一区| 91麻豆精品国产自产在线| 久久电影网电视剧免费观看| 国产精品视频一二三区 | 制服.丝袜.亚洲.中文.综合| 加勒比av一区二区| 亚洲欧美偷拍另类a∨色屁股| 欧美浪妇xxxx高跟鞋交| 国产制服丝袜一区| 亚洲日本在线a| 日韩一卡二卡三卡国产欧美| 大陆成人av片| 亚洲va欧美va人人爽| 久久九九99视频| 欧美日韩精品一区视频| 成人一二三区视频| 日日骚欧美日韩| 国产精品国产三级国产有无不卡| 欧美日韩精品一区二区天天拍小说 | 欧美三级视频在线观看| 精品一区二区久久| 亚洲不卡av一区二区三区| 国产欧美一区二区精品性色| 欧美区一区二区三区| caoporn国产一区二区| 日本欧美一区二区在线观看| 亚洲美女精品一区| 久久久国产午夜精品| 欧美一区二区在线播放| 91论坛在线播放| 国产乱一区二区| 琪琪久久久久日韩精品| 亚洲综合自拍偷拍| 国产精品久久久久久久久久久免费看| 欧美一区二区三区在线看| 欧美主播一区二区三区| 99精品欧美一区二区蜜桃免费| 国产精品乡下勾搭老头1| 日本不卡免费在线视频| 亚洲一区二区精品久久av| 最好看的中文字幕久久| 久久午夜羞羞影院免费观看| 91精品国产91久久综合桃花| 欧美丝袜第三区| 欧美性感一区二区三区| 日本久久一区二区| 97超碰欧美中文字幕| av在线播放一区二区三区| 丁香六月久久综合狠狠色| 国产精品夜夜爽| 国产一区二区不卡| 国产福利91精品| 国产宾馆实践打屁股91| 国产在线视频精品一区| 国产中文字幕一区| 国产91精品久久久久久久网曝门| 国产精品一二一区| 成人av高清在线| 99免费精品在线| 91福利视频网站| 欧美日本乱大交xxxxx| 555www色欧美视频| 日韩精品一区二区三区swag| www久久久久| 欧美国产97人人爽人人喊| 国产精品素人视频| 亚洲精品免费在线播放| 日韩成人免费看| 九九热在线视频观看这里只有精品| 韩日av一区二区| 99视频在线观看一区三区| 一本色道a无线码一区v| 精品视频在线免费观看| 精品国产一区二区三区久久影院 | 亚洲一区二区欧美日韩 | 欧美精品一区二区精品网| 久久伊99综合婷婷久久伊| 国产精品午夜春色av| 亚洲激情第一区| 激情综合色综合久久综合| 成人午夜视频网站| 欧美精品欧美精品系列| 久久免费偷拍视频| 一区二区三区国产精华| 六月婷婷色综合| 成人高清视频免费观看| 欧美男人的天堂一二区| 国产欧美精品一区二区色综合 | 99这里只有精品| 51精品视频一区二区三区| 亚洲国产精品成人综合| 五月婷婷综合在线| 成人黄页在线观看| 日韩欧美在线1卡| 亚洲欧美日本韩国| 久久不见久久见免费视频1| 91国模大尺度私拍在线视频| 2020国产精品| 日本美女视频一区二区| av激情综合网| 亚洲精品在线观|