面包屑图标 当前位置: 首页
AI资讯
热点详情

基于树莓派与OpenCV的人群计数装置设计与实现

AI热点日报
AI热点日报时间:2026-07-06
热点解读

数字图像处理在今天的科技圈里,发展速度越来越快,几乎成了手机、安防摄像头、笔记本电脑这类设备的基础能力。对象检测、人脸识别、人数统计,是最常见的几个应用场景。这篇文章就带大家动手做一个基于Raspberry Pi和ThingSpeak的人群计数系统,用OpenCV搭桥,让Pi相机连续采集画面,然后靠

数字图像处理在今天的科技圈里,发展速度越来越快,几乎成了手机、安防摄像头、笔记本电脑这类设备的基础能力。对象检测、人脸识别、人数统计,是最常见的几个应用场景。这篇文章就带大家动手做一个基于Raspberry Pi和ThingSpeak的人群计数系统,用OpenCV搭桥,让Pi相机连续采集画面,然后靠HOG(方向梯度直方图)描述符来检测图像中的行人,再跟OpenCV预训练模型做比对,最终把人数实时传到ThingSpeak平台上——这样你就能从地球上任何一个角落远程监控现场的人流状况。

所需组件与准备工作

硬件

树莓派 3(任何版本都行)
Pi 摄像头模组

软件与在线服务

ThingSpeak(物联网数据平台)
Python 3.0
OpenCV 3.0

在树莓派上安装 OpenCV

OpenCV 是这个项目的核心图像处理库。先把树莓派系统更新一遍:

sudo apt-get update

然后安装编译 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

依赖就绪后,用 pip 安装 OpenCV 的 Python 接口(指定版本 4.1.0.25):

pip3 install opencv-contrib-python==4.1.0.25

安装其他必要的 Python 包

开始编程前,还有两个常用的库需要装上。

imutils:负责图像平移、旋转、缩放、骨架化等常规操作,还能让 Matplotlib 显示 OpenCV 图像变得更容易。安装命令:

pip3 install imutils

matplotlib:Python 里最经典的绘图库,支持静态、动画和交互式可视化。安装命令:

pip3 install matplotlib

ThingSpeak 平台设置(用于人数统计上云)

ThingSpeak 是一个很受欢迎的物联网数据平台。用它来接收树莓派上传的人数数据,我们就能随时随地通过网页或手机查看。操作流程如下:

ThingSpeak注册页面

点击 Sign up,填入注册信息。

注册详情页

验证邮箱后,点击 Continue 继续。

登录成功,点击 New Channel 按钮创建新频道。

创建新频道

给频道取个名字,填上描述。这里我们只创建一个名为 People 的字段(当然你也可以根据需要添加多个字段)。

填完后点击 Sa ve Channel 保存。

最后一步:把通道的 Write API KeyChannel ID 复制下来,后面 Python 脚本里要用到这些凭证来上传数据。

API Key和Channel ID

硬件连接

这套系统只需要树莓派和 Pi 摄像头。将摄像头排线插入树莓派板上的相机接口即可。Pi 摄像头用处很多,除了这次的人群计数,你还可以用它做监控摄像头、访客监测系统、家庭安防等等。

Pi摄像头连接树莓派

人群计数 Python 代码详解

完整的代码附在文章末尾。这里先拆解几个关键部分,方便理解运行逻辑。

脚本开头,把所有需要用到的库导进来:

import cv2
import imutils
from imutils.object_detection import non_max_suppression
import numpy as np
import requests
import time
import base64
from matplotlib import pyplot as plt
from urllib.request import urlopen

接着填入 ThingSpeak 的频道 ID 和写入 API Key:

channel_id = 812060   # 你的频道ID
WRITE_API = 'X5AQ3EGIKMBYW31H'   # 你的写密钥
BASE_URL = "https://api.thingspeak.com/update?api_key={}".format(WRITE_API)

然后初始化 HOG 描述符,并加载 OpenCV 预训练的行人检测模型:

hog = cv2.HOGDescriptor()
hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())

detector() 函数:接收一张 RGB 图像,用 imutils 缩放到合适大小(宽度不超过 400 像素),然后调用 detectMultiScale() 方法,结合 SVM 的分类结果,判断图像中是否有人:

def detector(image):
    image = imutils.resize(image, width=min(400, image.shape[1]))
    clone = image.copy()
    rects, weights = hog.detectMultiScale(image, winStride=(4, 4), padding=(8, 8), scale=1.05)

检测结果中有时会出现重叠的框,产生误报。所以需要用 imutils 提供的非极大值抑制(NMS)来合并重叠区域:

    for (x, y, w, h) in rects:
        cv2.rectangle(image, (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])
    result = non_max_suppression(rects, probs=None, overlapThresh=0.7)
    return result

record() 函数:通过 OpenCV 的 VideoCapture() 实时读取 Pi 摄像头画面,调整大小后交给 detector() 处理,最后将人数结果通过 HTTP 请求发送到 ThingSpeak 服务器:

def record(sample_time=5):
    camera = cv2.VideoCapture(0)
    frame = imutils.resize(frame, width=min(400, frame.shape[1]))
    result = detector(frame.copy())
    thingspeakHttp = BASE_URL + "&field1={}".format(result1)

运行与测试人群计数器

启动脚本前,先确认 Pi 摄像头工作正常。然后执行下面的命令运行程序:

运行脚本

屏幕上会弹出一个实时视频窗口。树莓派会抓取第一帧,通过 OpenCV 处理并标记行人。如果检测到人,每个人周围会画一个红色框(在代码里是绿色框,取决于绘制代码):

检测到人的画面

回到 ThingSpeak 频道,你会看到人数数据实时更新。只要联网,你就能从任何远程设备上查看当前的人流情况。

ThingSpeak图表

完整 Python 代码

import cv2
import imutils
from imutils.object_detection import non_max_suppression
import numpy as np
import requests
import time
import base64
from matplotlib import pyplot as plt
from urllib.request import urlopen

channel_id = 812060 # 在此处输入频道 ID
WRITE_API = 'X5AQ3EGIKMBYW31H' # 把你的写密钥放在这里
BASE_URL = "https://api.thingspeak.com/update?api_key={}".format(WRITE_API)

hog = cv2.HOGDescriptor()
hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())

def detector(image):
    image = imutils.resize(image, width=min(400, image.shape[1]))
    clone = image.copy()
    rects, weights = hog.detectMultiScale(image, winStride=(4, 4), padding=(8, 8), scale=1.05)
    for (x, y, w, h) in rects:
        cv2.rectangle(image, (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])
    result = non_max_suppression(rects, probs=None, overlapThresh=0.7)
    return result

def record(sample_time=5):
    print("录音")
    camera = cv2.VideoCapture(0)
    init = time.time()
    if sample_time < 3:
        sample_time = 1
    while True:
        print("帽框")
        ret, frame = camera.read()
        frame = imutils.resize(frame, width=min(400, frame.shape[1]))
        result = detector(frame.copy())
        result1 = len(result)
        print(result1)
        for (xA, yA, xB, yB) in result:
            cv2.rectangle(frame, (xA, yA), (xB, yB), (0, 255, 0), 2)
        plt.imshow(frame)
        plt.show()
        if time.time() - init >= sample_time:
            thingspeakHttp = BASE_URL + "&field1={}".format(result1)
            print(thingspeakHttp)
            conn = urlopen(thingspeakHttp)
            print("发送结果")
            init = time.time()
    camera.release()
    cv2.destroyAllWindows()

def main():
    record()

if __name__ == '__main__':
    main()
热点追踪提示词
你是一名 AI 行业编辑,请围绕下面这条热点输出一份资讯解读:
热点:基于树莓派与OpenCV的人群计数装置设计与实现要求:
1. 先用一句话解释这条热点在讲什么
2. 再总结它为什么重要
3. 说明会影响哪些 AI 产品或内容方向
4. 最后给出 3 个适合资讯站使用的标题
来源:https://m.elecfans.com/article/1877093.html
计数器

游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

相关热点
AI热点2026-07-06 20:47
百度官方出品度加剪辑口播自媒体必备工具

度加剪辑是百度官方出品的剪辑工具,面向口播自媒体创作者。支持视频剪辑、智能识别字幕,并与百度网盘打通,可快速导入素材。适用于泛知识类创作者制作高质量视频,覆盖从素材导入到成品输出的完整流程。

AI热点2026-07-06 20:46
基于AI的智能在线个性化锻炼计划生成工具 Workout Master

WorkoutMaster是一款基于AI的个性化锻炼计划生成工具,能根据用户目标、偏好及历史训练记录,动态输出专属方案,并实时自适应调整负重、组次等参数。支持定制目标与器械偏好,借助机器学习持续优化,随时随地即可接入使用,确保训练高效安全。

AI热点2026-07-06 20:46
Calorielens AI智能实时拍照分析餐点照片卡路里追踪应用

Calorielens是一款利用AI分析餐食照片的卡路里追踪应用。用户只需拍照,AI即可自动识别食物种类和分量并估算卡路里,省去手动输入步骤。应用还提供历史记录追踪功能,帮助把握热量趋势。AI估算精度可满足日常健康管理需求。

AI热点2026-07-06 20:46
百度旗下首个AI互动式搜索APP简单搜索

百度旗下“简单搜索”AI搜索引擎集成语音、图像、多媒体搜索及实时翻译,支持多模态交互与智能推荐。基于大模型技术,用户可通过对话式交互直接获取精准答案,适用于学习、旅行、生活、职业发展等场景,高效满足信息需求。

延伸阅读