0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用Raspberry Pi构建一个OpenCV人群计数装置

科技观察员 来源:circuitdigest 作者:Ashish Choudhary 2022-08-12 17:24 次阅读

在当今尖端技术的世界中,数字图像处理发展非常迅速,并成为许多数字设备的重要组成部分,如手机、安全摄像头、笔记本电脑等。

数字图像处理最常见的应用是对象检测、人脸识别和人数统计。所以在本教程中,我们将使用 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 平台,我们可以从任何地方通过互联网监控我们的数据。

poYBAGL2G9yANWtYAAV_QsSAwLY168.png

单击 Sing up 并输入您的详细信息

pYYBAGL2G9mAP_F6AACTVJwX4vg481.png

在此之后,验证您的电子邮件 ID,然后单击继续。

现在,登录后,单击“新建频道”按钮创建一个新频道。

poYBAGL2G9WAY40aAABNZul2bSk502.png

单击“新频道”后,输入您要在此频道上上传的数据的名称和描述。在这里,我们创建了一个名为People的字段。可根据需要创建多个字段。

在此之后,单击保存频道按钮以保存详细信息。

要将数据发送到 ThingSpeak,请在 Python 脚本中输入 API 密钥和通道 ID,然后复制 API 密钥和通道 ID。

pYYBAGL2G9GAQGFpAADkpq1TYpw824.png

硬件设置

在这里,我们只需要 Raspberry Pi 和 Pi 相机来完成这个OpenCV 人员计数项目,您只需将相机带状连接器连接到 Raspberry pi 中提供的相机插槽中

pYYBAGL2G82AfjJ3AAWsaCyClac229.png

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 # 在此处输入频道 ID
WRITE_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 脚本:

pYYBAGL2G8CAWupFAACo_jsQkhw829.png

然后你会发现弹出一个窗口,里面有你的视频源。Pi 将获取第一帧并使用 OpenCV 对其进行处理以检测人数。如果它检测到人,你会在它周围找到一个像这样的框:

poYBAGL2G72AHC-nAARnughj7DI503.png

现在检查您的 ThingSpeak 频道,您可以在其中监控来自世界任何地方的人群规模。

poYBAGL2G7iAQh3yAACs2ndMEHM194.png

导入简历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 < 3:
采样时间 = 1
而(真):
打印(“帽框”)
ret, frame = camera.read()
frame = imutils.resize(frame, width=min(400, frame.shape[1]))
结果=检测器(frame.copy())
结果1 = len(结果)
打印(结果1)
对于 (xA, yA, xB, yB) 结果:
cv2.rectangle(frame, (xA, yA), (xB, yB), (0, 255, 0), 2)
plt.imshow(帧)
plt.show()
# 发送结果
如果 time.time() - init >= sample_time:
thingspeakHttp = BASE_URL + "&field1={}".format(result1)
打印(thingspeakHttp)
conn = urlopen(thingspeakHttp)
print("发送结果")
初始化 = time.time()
相机.release()
cv2.destroyAllWindows()
# 在[7]:
定义主():
记录()
# 在[8]:
如果 __name__ == '__main__':
主要的()

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 计数器
    +关注

    关注

    32

    文章

    2256

    浏览量

    94478
  • OpenCV
    +关注

    关注

    31

    文章

    634

    浏览量

    41337
收藏 人收藏

    评论

    相关推荐

    如何使用Raspberry Pi3和蓝牙构建遥控汽车

    今天我们将使用Raspberry Pi 3和蓝牙构建遥控汽车,在这里我们将使用智能手机作为遥控器来控制汽车。
    的头像 发表于 11-21 17:14 2573次阅读
    如何使用<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b>3和蓝牙<b class='flag-5'>构建</b>遥控汽车

    Raspberry Pi扩展板

    描述clumsyMIDI - 树莓派扩展板 Raspberry Pi 扩展板,包含 MI
    发表于 07-29 06:12

    构建Raspberry Pi电机驱动器HAT的教程分享

    本教程中,我们将构建Raspberry Pi 电机驱动器 HAT来驱动直流和步进电机。此电机驱动器 HAT 包含
    发表于 08-05 16:20 1450次阅读
    <b class='flag-5'>构建</b><b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b>电机驱动器HAT的教程分享

    如何使用OpenCVRaspberry Pi构建睡眠感应和警报系统

    在这个项目中,我们将使用 Raspberry PiOpenCVPi 摄像头模块为驾驶员构建睡眠感应和警报系统。该系统的基本目的是跟踪
    发表于 08-09 17:07 730次阅读
    如何使用<b class='flag-5'>OpenCV</b>和<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b><b class='flag-5'>构建</b>睡眠感应和警报系统

    构建基于Raspberry Pi的蓝牙扬声器

     在这篇文章中,我们将通过融合 A2DP、Linux 和音频编解码器的强大功能来构建基于 Raspberry Pi 的蓝牙扬声器,以将数据包从音频源无线传输到音频接收器。为此,我们将破解
    发表于 08-31 16:22 2022次阅读
    <b class='flag-5'>构建</b><b class='flag-5'>一</b><b class='flag-5'>个</b>基于<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b>的蓝牙扬声器

    Raspberry Pi上安装Android的方法

    Raspberry Pi 中使用的流行操作系统是 Raspbian,它是基于 linux 的 Raspberry
    的头像 发表于 09-05 15:10 1.9w次阅读
    在<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b>上安装Android的方法

    使用Raspberry Pi上的OpenCV构建人脸识别系统

    在本教程中,我们将学习如何使用 Raspberry Pi 上的 OpenCV构建我们自己的人脸识别系统。将此系统安装在便携式 Raspberry
    发表于 09-07 15:48 1205次阅读
    使用<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b>上的<b class='flag-5'>OpenCV</b>库<b class='flag-5'>构建</b>人脸识别系统

    使用Raspberry Pi构建智能车库开门器

    在本教程中,我们将使用 Raspberry Pi 构建智能车库开门器。这里将创建
    的头像 发表于 09-07 15:54 2166次阅读
    使用<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b><b class='flag-5'>构建</b><b class='flag-5'>一</b><b class='flag-5'>个</b>智能车库开门器

    如何在Raspberry Pi 3上安装OpenCV4库

    今天我们将学习如何在 Raspberry Pi 3 上安装 OpenCV4 库,以便我们可以将其用于计算机视觉应用程序。这将允许 OpenCV 在像
    的头像 发表于 09-08 16:09 1593次阅读
    如何在<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b> 3上安装<b class='flag-5'>OpenCV</b>4库

    使用Raspberry Pi构建水位传感器

    电子发烧友网站提供《使用Raspberry Pi构建水位传感器.zip》资料免费下载
    发表于 10-28 16:08 0次下载
    使用<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b><b class='flag-5'>构建</b>水位传感器

    构建自己的Raspberry Pi ALPR停车系统

    电子发烧友网站提供《构建自己的Raspberry Pi ALPR停车系统.zip》资料免费下载
    发表于 11-08 11:14 0次下载
    <b class='flag-5'>构建</b>自己的<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b> ALPR停车系统

    Raspberry Pi Zero便携终端的构建

    电子发烧友网站提供《Raspberry Pi Zero便携终端的构建.zip》资料免费下载
    发表于 01-05 10:43 0次下载
    <b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b> Zero便携终端的<b class='flag-5'>构建</b>

    寻找实用的Raspberry Pi项目? 制作智能伞架!

    本教程将分步指导您如何制作智能伞架。这是我最喜欢的Raspberry Pi 项目之
    的头像 发表于 02-24 17:22 989次阅读
    寻找实用的<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b>项目? 制作<b class='flag-5'>一</b><b class='flag-5'>个</b>智能伞架!

    Raspberry Pi构建复古风格终端

    电子发烧友网站提供《Raspberry Pi构建复古风格终端.zip》资料免费下载
    发表于 07-11 11:41 0次下载
    <b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b><b class='flag-5'>构建</b>复古风格终端

    使用Raspberry Pi构建网络摄像头

    电子发烧友网站提供《使用Raspberry Pi构建网络摄像头.zip》资料免费下载
    发表于 07-12 11:30 0次下载
    使用<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b><b class='flag-5'>构建</b>网络摄像头