在当今尖端技术的世界中,数字图像处理发展非常迅速,并成为许多数字设备的重要组成部分,如手机、安全摄像头、笔记本电脑等。
数字图像处理最常见的应用是对象检测、人脸识别和人数统计。所以在本教程中,我们将使用 raspberry pi 和 thingspeak 构建一个 opencv 人群计数。在这里,pi 相机模块将用于连续捕获帧,然后将这些帧用hog(面向直方图的对象描述符)处理以检测图像中的对象。在此之后,这些帧将与 opencv 的预训练模型进行比较以进行人员检测。人数统计将显示在 thingspeak 频道上,可以从世界任何地方进行监控。
所需组件
硬件
树莓派 3(任何版本)
派相机
软件和在线服务
物语
python3.0
开放cv3.0
在树莓派中安装 opencv
这里将使用 opencv 库来检测人群。要安装 opencv,首先,更新 raspberry pi。
sudo apt-get 更新
然后安装在 raspberry pi 上安装 opencv 所需的依赖项。
sudo apt-get install libhdf5-dev -y sudo apt-get install libhdf5-serial-dev –y sudo apt-get install libatlas-base-dev –y sudo apt-get install libjasper-dev -y sudo apt-get install libqtgui4 –y sudo apt-get install libqt4-test –y
之后,使用以下命令在 raspberry pi 中安装 opencv。
pip3 安装 opencv-contrib-python==4.1.0.25
安装其他必需的软件包
在对 raspberry pi 进行人群计数编程之前,让我们安装其他所需的软件包。
安装imutils: imutils 用于执行一些必要的图像处理功能,例如平移、旋转、调整大小、骨架化,以及使用 opencv 更轻松地显示 matplotlib 图像。因此,使用以下命令安装imutils :
pip3 安装 imutils
matplotlib:之后,安装matplotlib库。matplotlib是一个综合库,用于在 python 中创建静态、动画和交互式可视化。
pip3 安装 matplotlib
人数统计的 thingspeak 设置
thingspeak 是一个非常流行的物联网平台,通过使用 thingspeak 平台,我们可以从任何地方通过互联网监控我们的数据。
单击 sing up 并输入您的详细信息。
在此之后,验证您的电子邮件 id,然后单击继续。
现在,登录后,单击“新建频道”按钮创建一个新频道。
单击“新频道”后,输入您要在此频道上上传的数据的名称和描述。在这里,我们创建了一个名为people的字段。可根据需要创建多个字段。
在此之后,单击保存频道按钮以保存详细信息。
要将数据发送到 thingspeak,请在 python 脚本中输入 api 密钥和通道 id,然后复制 api 密钥和通道 id。
硬件设置
在这里,我们只需要 raspberry pi 和 pi 相机来完成这个opencv 人员计数项目,您只需将相机带状连接器连接到 raspberry pi 中提供的相机插槽中
pi 摄像头可用于构建各种有趣的项目,如raspberry pi 监控摄像头、访客监控系统、家庭安全系统等。
人员计数器的python程序说明
此人群计数 opencv 项目的完整 python 代码在页面末尾给出。在这里,我们将解释代码的重要部分,以便更好地解释。
因此,在代码开始时,导入将在此项目中使用的所有必需库。
导入简历2导入 imutils从 imutils.object_detection 导入 non_max_suppression将 numpy 导入为 np导入请求进口时间导入base64从 matplotlib 导入 pyplot 作为 plt从 urllib.request 导入 urlopen
导入库后,输入 thingspeak 频道 id 并写入您之前复制的 api 密钥。
channel_id = 812060 # 在此处输入频道 idwrite_api = 'x5aq3egikmbyw31h' # 把你的写密钥放在这里base_url = https://api.thingspeak.com/update?api_key= {}.format(write_api)
现在,初始化 hog(面向直方图的对象描述符)。hog 是最流行的目标检测技术之一,并已在多个应用中使用。cv2.hogdescriptor_getdefaultpeopledetector() 用于调用 opencv 的预训练模型进行人员检测。我们之前在之前的 opencv 教程中详细解释过 hog 。
猪 = cv2.hogdescriptor()hog.setsvmdetector(cv2.hogdescriptor_getdefaultpeopledetector())
在检测器()内部, pi 接收到一个 rgb 图像,该图像被分成三个颜色通道。之后,它使用imutils调整图像大小。然后它调用detectmultiscale()方法来分析图像,使用 svm 模型的分类结果来了解是否存在人。
def检测器(图像): image = imutils.resize(image, width=min(400, image.shape[1])) 克隆 = image.copy() rects, weights = hog.detectmultiscale(image, winstride=(4, 4), padding=(8, 8), scale=1.05)
有时捕获框重叠并产生误报或检测错误,因此下面的代码将imutils的非最大抑制应用于启动重叠框。
对于矩形中的 (x, y, w, h): cv2.rectangle(图像, (x, y), (x + w, y + h), (0, 0, 255), 2) rects = np.array([[x, y, x + w, y + h] for (x, y, w, h) in rects]) 结果 = non_max_suppression(rects,probs=none,overlapthresh=0.7) 返回结果
在record()函数中,它使用 opencv 中的videocapture()方法直接从 pi 相机中检索图像,使用 imultis 调整图像大小并将结果发送到 thingspeak。
def 记录(sample_time=5): 相机 = cv2.videocapture(0)frame = imutils.resize(frame, width=min(400, frame.shape[1]))结果=检测器(frame.copy())thingspeakhttp = base_url + &field1={}.format(result1)
测试 opencv 人员计数器
在启动 python 脚本之前,首先检查您的 pi 相机是否工作。检查相机后,通过发出以下命令启动 python 脚本:
然后你会发现弹出一个窗口,里面有你的视频源。pi 将获取第一帧并使用 opencv 对其进行处理以检测人数。如果它检测到人,你会在它周围找到一个像这样的框:
现在检查您的 thingspeak 频道,您可以在其中监控来自世界任何地方的人群规模。
导入简历2
导入 imutils
从 imutils.object_detection 导入 non_max_suppression
将 numpy 导入为 np
导入请求
进口时间
导入base64
从 matplotlib 导入 pyplot 作为 plt
从 urllib.request 导入 urlopen
channel_id = 812060 # 在此处输入频道 id
write_api = 'x5aq3egikmbyw31h' # 把你的写密钥放在这里
base_url = https://api.thingspeak.com/update?api_key={}.format(write_api)
猪 = cv2.hogdescriptor()
hog.setsvmdetector(cv2.hogdescriptor_getdefaultpeopledetector())
# 在[3]:
def检测器(图像):
image = imutils.resize(image, width=min(400, image.shape[1]))
克隆 = image.copy()
rects, weights = hog.detectmultiscale(image, winstride=(4, 4), padding=(8, 8), scale=1.05)
对于矩形中的 (x, y, w, h):
cv2.rectangle(图像, (x, y), (x + w, y + h), (0, 0, 255), 2)
rects = np.array([[x, y, x + w, y + h] for (x, y, w, h) in rects])
结果 = non_max_suppression(rects,probs=none,overlapthresh=0.7)
返回结果
def 记录(sample_time=5):
打印(“录音”)
相机 = cv2.videocapture(0)
初始化 = time.time()
# ubidots 样本限制
如果 sample_time = sample_time:
thingspeakhttp = base_url + &field1={}.format(result1)
打印(thingspeakhttp)
conn = urlopen(thingspeakhttp)
print(发送结果)
初始化 = time.time()
相机.release()
cv2.destroyallwindows()
# 在[7]:
定义主():
记录()
# 在[8]:
如果 __name__ == '__main__':
主要的()
虹软 PhotoStudio AI 智能商拍摄影软件大师完成首轮定向用户内测
汽车零部件气密性测试重要性
家庭电路维修方法
网传甲骨文整个闪存存储部门被砍掉,将会进行大规模裁员
最基础的半导体,原理非常简单,学过化学的都能看懂
使用Raspberry Pi构建一个OpenCV人群计数装置
骨传导耳机与普通耳机构造上有什么不同?骨传导耳机的优点
净零未来需要下一代能源网络
遥感式雷达监测水位流速设备的功能特点介绍
气动法兰式刀闸阀的使用特点是什么
英飞凌推出新一代面向汽车应用的OptiMOS 7 40V MOSFET系列
运用计算机仿真技术对泳池清洁机器人进行优化
MEMS振荡器会一统晶振江湖?
数据监测模块的实时性分析与设计
AMD发布嵌入式GPU E6760
海尔中央空调获智能化认证 持续创新用户体验
蜂巢能源最新发布,500亿合作官宣!
电动飞机技术发展的核心是什么 电动飞机的关键技术分析
Nginx 如何实现高性能低消耗
食品包装薄膜表面瑕疵检测系统介绍