您好,登錄后才能下訂單哦!
這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)基于TensorFlow如何在視頻畫面中實(shí)現(xiàn)人臉遮擋檢測(cè),文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
在進(jìn)行視頻通話時(shí),我們往往需要對(duì)畫面進(jìn)行一些實(shí)時(shí)分析,例如識(shí)別畫面里的人、車、動(dòng)物等等。這節(jié)里我們將使用時(shí)信魔方的人臉監(jiān)視模塊實(shí)現(xiàn)人臉被手部遮擋的檢測(cè),如下圖所示效果:
時(shí)信魔方的客戶端使用 TensorFlow 作為機(jī)器學(xué)習(xí)引擎,服務(wù)器端使用 DJL 。本節(jié)我們的示例程序主要是演示客戶端的人臉檢測(cè),使用 FaceMonitor 模塊完成自動(dòng)模型加載和畫面實(shí)時(shí)預(yù)測(cè),整個(gè)過程由 FaceMonitor 自動(dòng)完成,對(duì)于開發(fā)者來說不需要知道如何使用 TensorFlow 來進(jìn)行機(jī)器學(xué)習(xí),做到 開箱即用 。
首先我們需要選擇一個(gè)可用的攝像機(jī),用攝像機(jī)采集實(shí)時(shí)的人像。為了提示我們的臉部是否被手部遮擋,我們?cè)O(shè)計(jì)一個(gè)指示燈在工具欄的最右側(cè)。
然后我們?cè)陧撁嬷行娘@示實(shí)時(shí)人像畫面。最后為了方便觀察系統(tǒng)的數(shù)據(jù),我們?cè)诋嬅嫦路皆O(shè)計(jì)一個(gè)日志顯示容器。界面結(jié)構(gòu)如下圖所示:
我們使用 MediaDeviceTool
媒體設(shè)備工具來枚舉可用的攝像機(jī)設(shè)備。
JavaScript 代碼:
MediaDeviceTool.enumDevices(function(devices) { var html = []; devices.forEach(function(desc) { if (desc.isVideo()) { videoDevices[desc.getDeviceId()] = desc; var c = ['<option id="', desc.getDeviceId(), '">', desc.getLabel(), '</option>']; html.push(c.join('')); } }); if (html.length > 0) { deviceSelect.innerHTML = html.join(''); } else { deviceSelect.innerHTML = '<option>未檢測(cè)到可用設(shè)備</option>'; } });
對(duì)于 FaceMonitor
模塊來說,我們需要監(jiān)聽的事件是 Touched
事件:
JavaScript 代碼:
// 獲取 FaceMonitor 模塊 const monitor = cube.getModule('FaceMonitor'); // 監(jiān)聽 Touched 事件 monitor.on(FaceMonitorEvent.Touched, onTouched);
在 Touched
事件里,我們通過改變狀態(tài)燈的顏色來表示臉部是否被手遮擋。
在啟動(dòng)程序前,我們需要將界面上的 video
標(biāo)簽元素及其容器元素設(shè)置給 FaceMonitor
以便當(dāng)攝像頭畫面加載到 video
標(biāo)簽后 FaceMonitor
自動(dòng)開始對(duì)畫面進(jìn)行人臉檢測(cè)。
JavaScript 代碼:
monitor.setup(videoContainer, cameraVideo);
與之前啟動(dòng) Cube 的流程一樣,我們通過調(diào)用 start()
方法來啟動(dòng)時(shí)信魔方,啟動(dòng)成功后在啟動(dòng) FaceMonitor
模塊。
JavaScript 代碼:
monitor.start();
我們使用 MediaDeviceTool.getUserMedia()
來啟動(dòng)攝像機(jī),在成功啟動(dòng)攝像機(jī)之后,使用 MediaDeviceTool.bindVideoStream()
把攝像機(jī)的流數(shù)據(jù)傳遞給 video
標(biāo)簽。
JavaScript 代碼:
MediaDeviceTool.getUserMedia({ video: { width: { exact: 640 }, deviceId: videoDevice.getDeviceId(), groupId: videoDevice.getGroupId() } }, function(stream) { videoStream = stream; MediaDeviceTool.bindVideoStream(cameraVideo, stream); }, function(error) { appendLog('獲取視頻數(shù)據(jù)失敗 ' + error); });
啟動(dòng)之后在視頻區(qū)域就能看到攝像機(jī)的拍攝畫面,你可以嘗試用手來遮擋臉部觀察指示燈的顏色變化。就向本例中第一幅圖那樣,當(dāng)檢測(cè)到臉部被手遮擋時(shí)會(huì)觸發(fā) Touched
事件。
在整個(gè)過程中,你只需要設(shè)置好參數(shù),并啟動(dòng)模塊,之后 FaceMonitor
會(huì)自動(dòng)加載模型并執(zhí)行畫面實(shí)時(shí)檢測(cè)。檢測(cè)結(jié)果通過事件方式告訴應(yīng)用程序,幾行代碼即可完成!
如前所述我們使用 TensorFlow 來加載 BodyPix 的模型對(duì)人體的各個(gè)部分進(jìn)行識(shí)別。
針對(duì)視頻通話的場(chǎng)景,FaceMonitor
調(diào)整了部分參數(shù)來加快人體識(shí)別,例如僅讓 BodyPix 識(shí)別一個(gè)人而不是多個(gè)人來降低運(yùn)算量從而獲得較好的實(shí)時(shí)處理幀率等等。
在檢測(cè)到人臉之后,通過計(jì)算鼻子、左臉、右臉和手部的重疊像素來判斷手部是否遮擋臉部,因?yàn)槭菍?shí)時(shí)計(jì)算,每一次的計(jì)算值沒有足夠的信息量來支持結(jié)果,因此對(duì) FaceMonitor
每一次采樣之后的識(shí)別數(shù)據(jù)進(jìn)行累加,通過累加得分與我們期望的閥值得分進(jìn)行比較從而判斷是否是有效遮擋。
首次運(yùn)行程序時(shí),瀏覽器會(huì)提示你是否允許程序調(diào)用你的攝像頭和麥克風(fēng),這時(shí)需要你選擇允許,以便程序能順利獲取到視頻流和音頻流。
Chrome 瀏覽器的媒體設(shè)備管理窗口在瀏覽器地址欄右側(cè):
Firefox 瀏覽器的媒體設(shè)備管理窗口在地址欄左側(cè):
上述就是小編為大家分享的基于TensorFlow如何在視頻畫面中實(shí)現(xiàn)人臉遮擋檢測(cè)了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。