需求
最近有一個需求,用戶打開一個網頁查看單位門口的一個海康攝像頭,延時不能太大,該網頁需要實作人臉識別功能,
分析
通過網上查看各方資料,以及自己的多次嘗試,最終發現web端實作監控攝像頭人臉識別最適合我們的方法是ffmpeg+websocket+jsmpeg實作視頻流實時繪制到canvas上,然后使用TensorFlow.js+face-api.js讀取canvas上的影像進行人臉識別,
實作步驟
1、安裝配置ffmpeg+websocket+jsmpeg
安裝配置ffmpeg+websocket+jsmpeg網上的方法很多,ffmpeg主要用來讀取海康監控攝像頭的RTSP視頻流并轉碼為二進制流推送到websocket服務上,
我用到的ffmpeg推送代碼如下:
ffmpeg -rtsp_transport tcp -i "rtsp://admin:海康攝像頭密碼@192.168.1.4:554/h264/ch1/main/av_stream" -q 0 -f mpegts -codec:v mpeg1video -s 1000x600 -r 30 http://192.168.1.16:8081/socket密碼
啟動websocket的代碼如下
node websocket-relay.js socket密碼 8081 8082
注意socket密碼上下統一,通過這個方法可以把RTSP的視頻流推送到socket服務器,下面就是繪制視頻流,
2、繪制視頻流
繪制視頻流使用的是jsmpeg,下面是我實作的方法:
<div><canvas id="video-canvas" style="display: block;"></canvas></div>
<script type="text/javascript">
var canvasVideo = document.getElementById('video-canvas');
var url = 'ws://192.168.1.16:8082/';
var player = new JSMpeg.Player(url, {
canvas: canvasVideo,
audio: false,
preserveDrawingBuffer:true
});
</script>
由于jsmpeg通過顯卡進行繪制,因此如果不設定preserveDrawingBuffer:true這個引數會導致face-api.js無法讀取canvas中當前的影像,
3、TensorFlow.js+face-api.js實作人臉識別
jsmpeg實時在canvas上重繪除了視頻流,下面就看google的前端深度學習框架tensorFlow.js了,它可以呼叫Python中TensorFlow或keras已訓練好的模型,也可以自己訓練模型或者在已有模型上繼續訓練,face-api.js就是基于temsorFlow.js實作的一個人臉識別庫,
通過face-api官方demo結合上面繪制好的canvas就可以實作視頻中人臉識別了,具體教程還是得看官方教程比較復雜,我從官方demo中獲取到的精華就是
await changeFaceDetector(TINY_FACE_DETECTOR);
faceMatcher = await createBbtFaceMatcher(1)
updateResults函式中讀取canvas我是這樣寫的,輸入的影像通過canvas中的toDataURL轉為base64編碼作為輸入,
$("#imgUrlInput").attr("src", canvasVideo.toDataURL("image/png"));
const inputImgEl = $("#imgUrlInput").get(0);
const options = getFaceDetectorOptions()
const results = await faceapi
.detectAllFaces(inputImgEl, options)
.withFaceLandmarks()
.withFaceDescriptors()
drawFaceRecognitionResults(results);
run函式中我使用了小臉識別,并且使用一張基圖作為比對圖,
結果
最終可以通過PC端訪問也可以通過手機端訪問查看攝像頭視頻并實作實時人臉識別,識別結果在服務器上存盤,因為是實時人臉識別,因此我們還通過drawFaceRecognitionResults函式繪制了被識別人的資訊實時顯示在這個人的頭頂上,如姓名、性別、科室、特長等資訊,另外,網頁打開的視頻流運行一天延時依然能夠保持在0.5s以內,這個還是比較滿意的,之前試了幾種方法延時都很大,
致歉
以上是我做監控攝像頭RTSP視頻流實作Web端人臉識別的一些新得,時間關系寫的比較粗略,見諒,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/216362.html
標籤:其他
