思路来源
在现实生活中,无人零售店、便利店、超市、小区门口及一些公共场合,都需要使用视觉方面的技术,来对公共场合来往的人员进行监控,以保证公共场合的安全性。同时,统计来往人员可以给公共场合管理人员提供有效的信息进行更好的管理。目前,摄像头已得到普遍应用,但是大多数地区的摄像头仅对当前空间进行信息采集,无法实现无死角监控。一些不法分子也利用监控死角进行违法行为依次躲避政府及有关部门的追究与管控。故此,很多地区增加了摄像头的数量,通过摄像头组合使用来实现无死角监控。然而这种方案会增加实施成本,实施起来又需要极大的人力物力。如果摄像头可以智能的调整监控方位,对空间信息进行更加充分的捕捉,便能够增加监控范围,降低方案实施成本。采用智能调节的方案,也可以更加有效的获取监控区域的信息,若将一片区域内无监控死角的摄像头技术性的加以利用,即可还原出现在监控范围内人员的行走路径,政府及有关部门能即时对不法分子进行检测与管控。 基于这种想法我开始了基于实验室环境的项目。简单来说,我需要做到两点。第一,检测到人脸。第二,追踪人脸。这样我便可以完成我整个项目的构建。差不多一个星期的时间我都在思考我准备完成的项目需要的设计主体以及一些简单的想法的添加。有思路,便没什么做不成的。学习课程,构建项目,实现想法,寻找想法。似乎这便是我的大学,做自己喜欢的事,我感到无比荣幸。我不喜欢做别人做烂的东西,除非我找不到一个可以满足我需求的项目。
设计思路陈述
方案采用无线数据传输手段进行信息的交互与传递。如果没有客户端接入或者未进入控制模式时,将自动启用摄像头对当前空间进行监控,通过人脸检测技术追踪当前空间中的来往人员,并且依据人员位置,调整摄像头监控方位,若当前空间中仅有一人,则追踪这一人,若当前空间中有多人,则以捕捉多人信息为目的调整监控方位,让尽可能多的人处于监控范围内。若有客户端接入并选择控制模式,系统将关闭摄像头,依据客户端所发指令,控制摄像头转向,并选择性的获取指定方位的空间信息。即动态追踪人员并调节监控方位,采用无线连接手段进行数据的传输,并提供两种模式,自动追踪和手动追踪。
硬件准备
所用器件 |
数量 |
树莓派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
代码未整理,只能上传整个工程。