溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

基于TensorFlow如何在視頻畫面中實(shí)現(xiàn)人臉遮擋檢測(cè)

發(fā)布時(shí)間:2021-12-18 13:41:56 來源:億速云 閱讀:298 作者:柒染 欄目:大數(shù)據(jù)

這期內(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è),如下圖所示效果:

基于TensorFlow如何在視頻畫面中實(shí)現(xiàn)人臉遮擋檢測(cè)

預(yù)備知識(shí)

時(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)如下圖所示:

基于TensorFlow如何在視頻畫面中實(shí)現(xiàn)人臉遮擋檢測(cè)

準(zhǔn)備工作

我們使用 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 &gt; 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)燈的顏色來表示臉部是否被手遮擋。

設(shè)置視頻顯示元素

在啟動(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)程序

與之前啟動(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)行比較從而判斷是否是有效遮擋。

處理攝像頭和麥克風(fēng)調(diào)用權(quán)限

首次運(yùn)行程序時(shí),瀏覽器會(huì)提示你是否允許程序調(diào)用你的攝像頭和麥克風(fēng),這時(shí)需要你選擇允許,以便程序能順利獲取到視頻流和音頻流。

Chrome 瀏覽器的媒體設(shè)備管理窗口在瀏覽器地址欄右側(cè):

基于TensorFlow如何在視頻畫面中實(shí)現(xiàn)人臉遮擋檢測(cè)

Firefox 瀏覽器的媒體設(shè)備管理窗口在地址欄左側(cè):

基于TensorFlow如何在視頻畫面中實(shí)現(xiàn)人臉遮擋檢測(cè)

上述就是小編為大家分享的基于TensorFlow如何在視頻畫面中實(shí)現(xiàn)人臉遮擋檢測(cè)了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(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)容。

AI