思路來源
在現實生活中,無人零售店、便利店、超市、小區門口及一些公共場合,都需要使用視覺方面的技術,來對公共場合來往的人員進行監控,以保證公共場合的安全性。同時,統計來往人員可以給公共場合管理人員提供有效的信息進行更好的管理。目前,攝像頭已得到普遍應用,但是大多數地區的攝像頭僅對當前空間進行信息採集,無法實現無死角監控。一些不法分子也利用監控死角進行違法行爲依次躲避政府及有關部門的追究與管控。故此,很多地區增加了攝像頭的數量,通過攝像頭組合使用來實現無死角監控。然而這種方案會增加實施成本,實施起來又需要極大的人力物力。如果攝像頭可以智能的調整監控方位,對空間信息進行更加充分的捕捉,便能夠增加監控範圍,降低方案實施成本。採用智能調節的方案,也可以更加有效的獲取監控區域的信息,若將一片區域內無監控死角的攝像頭技術性的加以利用,即可還原出現在監控範圍內人員的行走路徑,政府及有關部門能即時對不法分子進行檢測與管控。 基於這種想法我開始了基於實驗室環境的項目。簡單來說,我需要做到兩點。第一,檢測到人臉。第二,追蹤人臉。這樣我便可以完成我整個項目的構建。差不多一個星期的時間我都在思考我準備完成的項目需要的設計主體以及一些簡單的想法的添加。有思路,便沒什麼做不成的。學習課程,構建項目,實現想法,尋找想法。似乎這便是我的大學,做自己喜歡的事,我感到無比榮幸。我不喜歡做別人做爛的東西,除非我找不到一個可以滿足我需求的項目。
設計思路陳述
方案採用無線數據傳輸手段進行信息的交互與傳遞。如果沒有客戶端接入或者未進入控制模式時,將自動啓用攝像頭對當前空間進行監控,通過人臉檢測技術追蹤當前空間中的來往人員,並且依據人員位置,調整攝像頭監控方位,若當前空間中僅有一人,則追蹤這一人,若當前空間中有多人,則以捕捉多人信息爲目的調整監控方位,讓儘可能多的人處於監控範圍內。若有客戶端接入並選擇控制模式,系統將關閉攝像頭,依據客戶端所發指令,控制攝像頭轉向,並選擇性的獲取指定方位的空間信息。即動態追蹤人員並調節監控方位,採用無線連接手段進行數據的傳輸,並提供兩種模式,自動追蹤和手動追蹤。
硬件準備
所用器件 |
數量 |
樹莓派3B |
1 |
金士頓內存卡 |
1 |
攝像頭 |
1 |
舵機控制板 |
1 |
舵機 |
2 |
雲臺 |
1 |
USB數據線 |
2 |
杜邦線 |
若干 |
軟件流程
樹莓派上電,激活舵機控制板,執行服務端程序,開啓攝像頭進行人臉檢測,並依據檢測信息控制雲臺轉向,調整監控方位。同時開啓多進程監聽模式,等待客戶端接入控制及信息獲取。其中客戶端與服務端有兩種交互模式:
1.控制獲取模式:客戶端從服務端獲取權限並控制雲臺轉向從而獲取當前空間的數據。(注意:1.服務端在同一時間下僅允許一臺客戶端設備進行控制。2.結束控制後,雲臺將復位。4.若雲臺被其它客戶端控制時,可選擇接收其獲取的數據,或等待其接收完畢,此處權限以接入的時間爲優先級)
2.獲取模式:客戶端直接從服務端獲取空間數據,不對相關設備進行操作控制,依靠人臉檢測對來往人員進行追蹤及獲取數據。(注意:1.服務端依靠人臉檢測對來往人員進行追蹤並控制雲臺獲取空間數據。2.若雲臺被其它客戶端控制時,可選擇接收其獲取的數據,或等待其控制結束後雲臺復位進而獲取數據,此處權限以接入的時間爲優先級)
項目構建
基礎知識
網絡套接字(socket)(在同一端口下進行通信)(這裏不做原理層面的解釋,僅運用層面)
細節請參考------------------------------------------------------>
多進程與進程間的通信
正在編輯
環境搭建
使用語言:c/c++ (Java)
開發平臺:Linux/windows(PC),Ubuntu mate (Raspberry Pi 3)(Ubuntu 16.04)
1.Ubuntu mate(Raspberry Pi 3)
2.首先使用SD卡格式化軟件將所用SD卡格式化。
3.將系統鏡像燒錄至SD卡。
4.對樹莓派進行相應配置,更新系統軟件等。
2.IntelRealsense(確保樹莓派已經正確配置及聯網)具體細則
實施項目
sever.cpp 程序入口
Marco.h 包含宏定義以及頭文件的調用
sever_function.cpp 包含無線連接部分的所有函數
sever_function.h 包含無線連接部分的所有函數的聲明
Get_bmpdata.cpp 包含系統調用Realsense獲取圖像數據的函數
Get_bmpdata.h 包含系統調用Realsense獲取圖像數據的函數的聲明
編譯的makefile文件
CXX=g++
Objects=sever_function.o sever.o Get_bmpdata.o Control_cloud_platform.o Lookface.o
exe:$(Objects)
g++ $(Objects) -o exe -l realsense2 -lwiringPi `pkg-config --libs --cflags opencv4` -std=c++11
sever_function.o:sever_function.cpp
g++ -c sever_function.cpp -o sever_function.o
sever.o:sever.cpp
g++ -c sever.cpp -o sever.o -std=c++11
Get_bmpdata.o: Get_bmpdata.cpp
g++ -c Get_bmpdata.cpp -o Get_bmpdata.o -l realsense2 -std=c++11
Control_cloud_platform.o: Control_cloud_platform.cpp
g++ -c Control_cloud_platform.cpp -o Control_cloud_platform.o -lwiringPi
Lookface.o:Lookface.cpp
g++ -c Lookface.cpp -o Lookface.o `pkg-config --libs --cflags opencv4` -std=c++11
clear :
rm $(Objects) exe
代碼未整理,只能上傳整個工程。