国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 開發(fā) > HTML5 > 正文

基于HTML5+tracking.js實現(xiàn)刷臉支付功能

2024-09-05 07:23:24
字體:
供稿:網(wǎng)友

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

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

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

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

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

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

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

1.2getUserMedia獲取攝像圖

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

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

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

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

// 訪問用戶媒體設備getUserMedia(constrains, success, error) {    if (navigator.mediaDevices.getUserMedia) {        //最新標準API        navigator.mediaDevices.getUserMedia(constrains).then(success).catch(error);    } else if (navigator.webkitGetUserMedia) {        //webkit內(nèi)核瀏覽器        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播放視屏

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

success(stream) {    this.streamIns = stream    // 設置播放地址,webkit內(nèi)核瀏覽器    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回調(diào)函數(shù)中,否則可能會報錯。
  2. 播放視頻的時候出于安全性考慮,必須在本地環(huán)境中測試,也就是http://localhost/xxxx中測試,或者帶有https://xxxxx環(huán)境中測試,不然的話或有跨域問題。
  3. 下面用到的initTracker()方法也好放在這個onloadedmetadata回調(diào)函數(shù)里,不然也會報錯。

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)            // 綁定監(jiān)聽方法    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}) {    // 創(chuàng)建框?qū)ο?   this.profile.push({ width: w, height: h, left: x, top: y })}

2.2拍照

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

// 拍照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轉(zhuǎn)文件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)}

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

3.最后效果

3.1參考代碼demo

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

效果如下:

3.2在項目中落地

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

ps:這里人臉比對失敗了,是因為我?guī)е谡郑筒贿谘缆赌樍恕?/p>

總結(jié)

到此這篇關于基于HTML5+tracking.js實現(xiàn)刷臉支付功能的文章就介紹到這了,更多相關html5 刷臉支付內(nèi)容請搜索武林網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持武林網(wǎng)!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
在线视频观看你懂的| 国产精品ⅴa有声小说| 中文av资源在线| 波多野结衣久久高清免费| 国产黄色一级电影| 国产在线第一页| 在线免费黄色毛片| 99精品老司机免费视频| 自拍亚洲国产| 国产在线免费观看| www.久草.com| 国产精品久久久久久久久鸭| 亚洲最新永久观看在线| 日本成人在线播放| av在线二区| 在线免费黄色毛片| 夜夜操天天干| 久蕉依人在线视频| 最新超碰在线| 国产系列电影在线播放网址| 国产一二在线观看| 在线观看中文字幕的网站| 制服丝袜中文字幕在线观看| 在线观看av网站| 国产第一页在线视频| 国产高清视频在线| 制服丝袜中文字幕在线观看| 日本视频一二三区中文字幕| 国产福利免费在线观看| 青青艹在线视频| 国产精品午夜久久久久久| 国产小视频免费在线观看| 国产精品久久一区二区三区不卡| 中文岛国精品亚洲一区| 国产美女在线一区二区三区| 国产黄色一级电影| 国产精品一区二区婷婷| 国产福利在线播放麻豆| 性色视频在线| 中文字幕乱在线伦视频乱在线伦视频| 午夜不卡视频| gogogogo高清视频在线| 国产精品一二三区视频| 香蕉视频网站在线观看| 国产美女自拍视频| 亚洲人成影院在线| 国产视频在线播放| 黄色电影网站在线观看| 伊人春色在线| 精灵使的剑舞无删减版在线观看| 国产免费视频在线| 激情亚洲综合网| 亚洲免费国产| 在线色视频网| 国产精品久久久久久福利| 国产在线三区| 日本久久网站| 色悠久久久久综合网小说| 国产盗摄一区二区| 国产永久免费高清在线观看视频| 国产激情在线视频| √8天堂资源地址中文在线| 黄色一级片视频| 伊人222成人综合网| 国产www网站| 国产精品免费91| 国产精品ⅴa有声小说| av在线资源网| 一级二级三级在线观看| 中文资源在线官网| 永久免费av片在线观看全网站| 国产成人精品实拍在线| 国产爆初菊在线观看免费视频网站 | 中文字幕亚洲免费| 天堂中文在线视频| 国产剧情在线一区| 国产香蕉视频在线看| 国产素人视频在线观看| 国产精品剧情一区二区在线观看| 国产成a人亚洲精v品| 在线免费看黄av| 日本成a人片在线观看| av中文网站| 97视频在线观看网站| 一级黄色av| 国产专区在线播放| 中文字幕在线观看av| 国产黄色免费电影| 日本电影在线观看| 午夜视频免费在线观看| 国产youjizz在线| 精品中文字幕不卡在线视频| 国产精品视频一区麻豆| 久蕉依人在线视频| 国产99re66在线视频| www.综合网.com| 国产精品理人伦一区二区三区| 天天激情综合| 国产91久久久久| 国产精品亚洲色图| 亚洲精品一区中文字幕电影| 国产午夜视频| 午夜视频在线看| 免费观看久久久久| 在线播放国产区| 中文字幕在线观看日本| 国产欧美一区二区三区小说| 欧美性猛交xxxx免费看久久| 一本大道五月香蕉| 精品欧美日韩一区二区| 九九99精品| 日本一级理论片在线大全| 国产日本在线观看| 国内自拍视频在线看免费观看| 国产成人综合美国十次| 国产精品视频一区麻豆| 国内a∨免费播放| 中文字幕2020第一页| 久热中文字幕精品视频在线| 国产黄色在线网站| 国产天堂素人系列在线视频| 丁香视频免费观看| 天堂资源在线中文| 激情丁香久久| 国产美女一区视频| 国产免费网址| 国产人成在线视频| 国产特级淫片免费看| 国产日产一区二区| 国产精品白浆视频免费观看| 国产三级在线免费观看| 在线天堂中文| 亚洲精品天堂在线| 免费在线超碰| 国产精选在线观看| 中文字幕视频免费在线观看| 国产精品爱久久久久久久小说 | 五月婷婷丁香激情| 国产精品伦一区二区三区视频| 91精品专区| 国产中文字幕网| 国产香蕉视频在线观看| 亚洲视频网站在线| 国产男女av| av在线你懂的| 午夜不卡视频| 2019中文字幕在线视频| 国产在线一二三| 麻豆视频在线观看免费网站| 国产一区二区三区福利| wwww亚洲| 国产黄色免费网站| 二区中文字幕| 伊人网在线免费观看| аⅴ成人天堂中文在线| av在线天天| 午夜视频在线| 亚洲成人av在线影院| 国产美女视频一区二区三区| 69视频在线观看| 国产日韩欧美精品一区二区三区| 欧美日韩久久中文字幕| 97视频在线观看网站| 国产免费视频| jizz亚洲| 亚洲男人网站| 精品推荐蜜桃传媒| 国产久草在线| 久草国产视频| 亚洲国产aⅴ精品| 精品国内自产拍在线视频| 国产一级免费看| 超碰在线国产| 老师我好爽再深一点的视频| 亚洲精品在线视频免费| 中文资源在线网| 国产视频中文字幕在线观看| 青青草在线免费观看| 亚洲人av在线| 樱花草在线观看www| 国产www网站| 国产成人夜间影院在线观看| 97视频在线观看网站| 日本视频在线观看一区二区三区| 在线观看国产福利视频| www在线免费观看视频| 亚洲成人国产综合| 日韩亚洲一区中文字幕| 精品国产一区二区三区不卡在线| 91精品国产91久久久久久青草| 欧美色欧美亚洲另类二区精品| h网站免费在线观看| 日本高清中文字幕二区在线| 欧美成人亚洲高清在线观看| 最新天堂资源在线| 国产精品天堂| 在线色视频网| 欧美性猛交p30| 国产系列电影在线播放网址| 国产99在线|亚洲|