Java版人臉跟蹤三部曲之一:極速體驗

2023-07-06 15:06:11

歡迎存取我的GitHub

這裡分類和彙總了欣宸的全部原創(含配套原始碼):https://github.com/zq2599/blog_demos

關於《Java版人臉跟蹤三部曲》系列

-《Java版人臉跟蹤三部曲》系列是欣宸的又一原創,目標是通過理論加實戰,與大家一同瞭解CamShift(連續自適應均值漂移)演演算法在Java領域的實際應用,整個系列由以下三篇文章組成:

  1. 極速體驗:這是欣宸原創的一大特色,先動手,用最短時間和最小代價瞭解CamShift能做什麼
  2. 開發設計:這是編碼前的準備工作,包含:要做什麼?需要那些知識點?邏輯和流程梳理
  3. 編碼實戰:在本篇咱們正式開始編碼並執行驗證,經歷了前面的充分準備,真正開始編碼的時候不但順暢,您還會迸發有很多與欣宸不一樣的想法,例如不僅檢測人臉,還能帶上年齡性別,卻不用多次做深度學習推理,又或者,檢測出多個人臉,但是隻跟蹤某人,甚至多人同時跟蹤
  • 另外,整個《Java版人臉跟蹤三部曲》系列也是《JavaCV的攝像頭實戰》系列的一部分,分別是《JavaCV的攝像頭實戰》系列的的第十五、第十六、第十七篇

本篇概覽

  • 本文的目標是快速體驗Java版人臉跟蹤的功能,不涉及理論知識,不涉及編碼,全是動手操作,由以下步驟組成:
  1. 準備本地環境
  2. 下載三個檔案:java應用,動態連結庫,人臉檢測模型檔案
  3. 執行java應用,驗證效果

準備本地環境

  1. 準備一臺可上網的windows系統的電腦,我這裡是64位元win10
  2. 一個USB攝像頭,與電腦連線正常
  3. 安裝JDK:1.8.0_291
  • 作為參考,我用的電腦是Surface Pro4,前置攝像頭正常

下載檔案

  • 一共要下載三個檔案,前兩個可以在CSDN下載(不需要積分),地址分別是:
  1. 打包成jar的java應用:https://download.csdn.net/download/boling_cavalry/76015782
  2. opencv在windows環境的動態連結庫:https://download.csdn.net/download/boling_cavalry/75121158
  1. java應用:C:\study\javacv\simple-grab-push-1.0-SNAPSHOT.jar
  2. 動態連結庫:C:\study\javacv\lib\opencv_java453.dll
  3. 模型檔案:C:\study\javacv\model\haarcascade_frontalface_alt.xml

執行java應用,驗證效果

  • 進入windows命令列,執行以下命令在(注意兩個引數和前面下載的檔案路徑有關,請您根據自己情況調整):
java ^
-Djava.library.path=C:\study\javacv\lib ^
-Dmodel.file.path=C:\study\javacv\model\haarcascade_frontalface_alt.xml ^
-jar C:\study\javacv\simple-grab-push-1.0-SNAPSHOT.jar
  • 此時,控制檯會輸出以下資訊:
C:\Users\12167>java ^-Djava.library.path=C:\study\javacv\lib ^-Dmodel.file.path=C:\study\javacv\model\haarcascade_frontalface_alt.xml ^-jar C:\study\javacv\simple-grab-push-1.0-SNAPSHOT.jar
17:40:54.987 [main] INFO com.bolingcavalry.grabpush.camera.PreviewCameraWithCamShift - 模型檔案本地路徑:C:\study\javacv\model\haarcascade_frontalface_alt.xml
17:40:57.704 [main] INFO com.bolingcavalry.grabpush.extend.CamShiftDetectService - 開始載入模型檔案
17:40:58.364 [main] INFO com.bolingcavalry.grabpush.extend.CamShiftDetectService - 模型檔案載入完畢,初始化完成
17:40:58.364 [main] INFO com.bolingcavalry.grabpush.camera.AbstractCameraApplication - 初始化完成,耗時[2257]毫秒,影格率[30.0],影象寬度[1280],影象高度[720]
  • 然後會彈出預覽視窗,顯示攝像頭拍攝到的內容

  • 現在,把那個為了盒飯跑來露臉的群眾演員拉到鏡頭面前,預覽視窗中,群眾演員的臉部立即出現紅框,如下圖所示:

  • 讓群眾演員在鏡頭前移動,可以看到紅框會緊隨面部移動(截圖看不出效果,實際上視訊是動態跟隨的):

  • 讓群眾演員在攝像頭面前消失,紅框也隨之消失

  • 讓群眾演員再次回到攝像頭面前,紅框再次出現並跟隨:

  • 至此,體驗結束,《Java版人臉跟蹤三部曲》的第一部就完成了,簡簡單單三個檔案一行命令就完成人臉跟蹤的效果,此刻的您一定充滿各種疑惑:

  1. 為什麼叫跟蹤,這是什麼原理?
  2. 如果把每一幀都做人臉檢測,然後繪製矩形,也能實現同樣效果,這兩者有區別嗎?
  3. 追蹤的邏輯是什麼,一開始目標如何確定,追蹤過程中,如果目標消失在鏡頭面前,程式如何處理,過一會兒再出現,程式會如何處理?
  • 這些就留待三部曲的第二篇講清楚吧,算是正式編碼前的設計工作,欣宸原創,不會辜負您的期待

歡迎關注部落格園:程式設計師欣宸

學習路上,你不孤單,欣宸原創一路相伴...