停车场车位占用检测与空闲引导 — 部署指南

套餐

IP 摄像头 + 边缘主机

保留停车场现有的 IP 摄像头,在同一网络里加一台边缘主机分析画面。你在网页上给每个车位画框,主机把每个车位的「占用 / 空闲」状态发到你的 MQTT 服务器。

设备用途
reComputer J30 / J40(Jetson Orin Nano / Orin NX,JetPack 6.2)或 reComputer RK3588 / RK3576分析所有摄像头画面,判断每个车位有没有车
IP 摄像头现场已有的摄像头,输出 H.264 编码的 RTSP 视频流
MQTT 服务器接收车位状态,供余位屏、停车管理系统或 Home Assistant 使用

部署完成后你可以:

  • 在网页上对着实时画面给每个车位画框、命名
  • 车位一有变化,就在 MQTT 上收到这路摄像头所有车位的最新状态
  • 看到某路摄像头断流(它下面的车位变成「未知」)

前提条件: 边缘主机与摄像头、MQTT 服务器在同一局域网 · 部署时主机能上网 · 已有 MQTT 服务器(例如 Mosquitto)

1

部署车位检测

在边缘主机上安装车位检测服务,填好摄像头地址和 MQTT 服务器即可,不需要手动改配置文件。

前置条件
  1. 用 reComputer J30 / J40 时:必须是 Jetson Orin Nano 或 Orin NX 模组,系统为 JetPack 6.2。其他 Jetson 模组或系统版本会在部署第一步被拦下。
  2. 用 reComputer RK3588 或 RK3576 时:系统需自带 Rockchip 的 AI 加速(RKNN)、视频解码(MPP)和 RGA 库。
  3. 每路摄像头的 RTSP 地址都已用 VLC 打开过,能看到画面。
  4. 知道 MQTT 服务器的地址和端口;服务器要求登录的话,准备好用户名和密码。
  5. 主机上 8080 端口(车位编辑页)和 8099 端口(状态检查)没有被其他服务占用。端口被占用时,可以在表单里换一个车位编辑页端口或状态检查端口。
接线
  1. 摄像头装在高处、斜向下拍,让每个车位都能看清,不被相邻车辆完全挡住。
  2. 摄像头和边缘主机用网线接入同一个交换机或路由器(摄像头可用 PoE 交换机供电)。
  3. 在摄像头的网页设置里,把要用的码流(子码流即可)设为 H.264 编码。
  4. 记下每路摄像头的 RTSP 地址。以海康摄像头为例:rtsp://用户名:密码@摄像头IP:554/Streaming/Channels/102(102 为子码流)。
  5. 在表单里填写摄像头地址(多路用英文逗号分隔)、站点编号和 MQTT 服务器,点击部署。

部署时每路摄像头会先放一个示例车位 P-01(画面中间偏下的一个框),步骤 2 里删掉它或拖到真实车位上。

故障排查
问题解决方法
部署停在「UNSUPPORTED_JETSON_MODULE」这台 Jetson 不是 Orin Nano 或 Orin NX 模组。本方案只支持 reComputer J30 / J40(Jetson Orin Nano / Orin NX)
部署停在「UNSUPPORTED_JETPACK」或「UNSUPPORTED_TENSORRT」系统不是 JetPack 6.2,重刷 JetPack 6.2 后再部署
RK3588 / RK3576 检查提示「missing …」提示下方给出了实际路径时,把它填到对应的输入框(如「RKNN 运行库」)再部署;没有给出路径,说明板卡缺少该库,先安装 RKNN 运行库(rknpu2)、MPP、RGA 和 gstreamer1.0-plugins-bad、gstreamer1.0-rockchip
提示「Not an RTSP address」摄像头地址要以 rtsp:// 开头,多个地址之间用英文逗号分隔
提示摄像头地址和编号数量不一致摄像头编号要和地址一一对应,或者把编号留空让它自动编号
下载识别模型失败确认边缘主机能上网,然后重新部署
部署停在「等待车位检测服务启动」在主机上运行 docker logs edge-parking-occupancy-jetson(RK3588 为 edge-parking-occupancy-rk3588,RK3576 为 edge-parking-occupancy-rk3576)查看原因;常见原因是 8080 或 8099 端口被占用,换一个车位编辑页端口或状态检查端口
部署方式

从这台电脑通过网络(SSH)部署到 reComputer J30 / J40(Jetson Orin Nano / Orin NX,JetPack 6.2)。

部署时需要填写(在 SenseCraft Solution 应用里填)
  • 摄像头 RTSP 地址*

    每路摄像头一个地址,多路用英文逗号分隔。先用 VLC 打开试一下——路径或用户名密码写错是最常见的失败原因。

  • 摄像头编号

    可不填。与上面的地址按顺序一一对应,英文逗号分隔(字母、数字、- 和 _),会用在 MQTT 主题里。留空则自动编为 cam-01、cam-02……

  • 站点编号*默认 my-lot

    MQTT 主题的第一段,一个停车场一个(字母、数字、- 和 _)。

  • MQTT 服务器地址*

    接收车位状态的 MQTT 服务器的 IP 地址或主机名。

  • MQTT 端口*默认 1883
  • MQTT 用户名

    服务器允许匿名连接就留空。

  • MQTT 密码
  • 车位编辑页端口*默认 8080

    画车位的网页所用端口。这台主机上已有服务占用 8080 时改成别的端口。不要和状态检查端口相同。

  • 状态检查端口*默认 8099

    服务状态检查使用的端口。只有这台主机上已有其他程序占用 8099 时才需要修改。

部署完成后

部署最后一步会等车位检测服务就绪,日志显示部署成功即表示服务已在运行。在浏览器打开 http://<主机IP>:8080/slots/editor(端口以「车位编辑页端口」为准),能看到摄像头画面。接下来用步骤 2 画车位。

2

画车位

在每路摄像头的画面上给每个车位画一个框,填上车位编号,并看到每个车位的实时状态。

接线
  1. 打开车位编辑页(地址为 http://<边缘主机 IP>:8080/slots/editor,端口以部署时填写的为准),在「摄像头」下拉框里选一路摄像头,能看到实时画面。
  2. 先处理示例车位 P-01:在右侧列表里点它后面的 ✕ 删除;或者拖动它的四个角对齐到一个真实车位,再在列表里把 P-01 改成真实编号。
  3. 在画面上没有车位框的地方按住鼠标拖出一个矩形,松开后就新建了一个车位。
  4. 拖动这个车位的四个角,贴合画面里车位的四个角。
  5. 在右侧列表里把自动生成的编号改成车位编号(例如 B1-023)。
  6. 对这路摄像头能看到的每个车位重复第 3–5 步。删除车位点列表里的 ✕。
  7. 点「保存」。看到「已保存并生效,重启后保留」即完成,保存后立即生效。
  8. 在「摄像头」里切换到下一路,重复以上步骤。

画好后每个车位按实时状态着色:红色为占用,绿色为空闲,灰色为未知(摄像头没有画面或刚保存还没判定)。右侧「实时状态」里的「占用」「空闲」是这路摄像头的车位数。

画框时注意:

  • 一个框只框一个车位,沿车位线拖四个角即可,框必须是凸的(不能有向内凹的角)。
  • 车停进去后,车身在画面中要占到框面积的三分之一左右才会判为占用。框住好几个车位,或框住很远处的小车,都不会判为占用。
  • 被前排车辆挡住大半的车位,换一路角度更好的摄像头来画。
故障排查
问题解决方法
页面打不开确认端口与部署时填的「车位编辑页端口」一致,且电脑能访问边缘主机
画面一片黑或加载失败这路摄像头还没出画面:等几秒,画面每秒自动刷新;仍不行就检查摄像头 RTSP 地址
某路摄像头的车位一直是 unknown(灰色)主机连不上这路摄像头:用 VLC 在同一网络里打开它的 RTSP 地址,检查地址、用户名密码和编码(需为 H.264)
提示车位「不是凸四边形」有一个角向内凹了,拖动那个角,让四个角都朝外
提示「车位 id 不能为空」在右侧列表里给这个车位填上编号
提示「车位 id 重复」同一路摄像头里车位编号不能重复,换一个编号
拖矩形时选中了已有车位在已有车位框内拖动会移动它;从没有车位框的地方开始拖
车停进去了,状态还是 free框太大或车太远,车身占不到框的三分之一:把框收紧到单个车位
部署完成后

车位检测已经在运行,画好的车位会持续上报状态。

初始设置

  1. 确认每路摄像头的示例车位 P-01 都已删除或改成了真实车位。
  2. 在你的余位屏、停车管理系统或 Home Assistant 里订阅主题 <站点编号>/parking/<摄像头编号>/slots。摄像头编号就是部署时填的编号;没填时依次为 cam-01、cam-02……

快速验证

  1. 在能访问 MQTT 服务器的电脑上运行:mosquitto_sub -h <MQTT服务器IP> -t '<站点编号>/parking/+/slots' -v
  2. 每路摄像头都会收到消息,消息里的 stream_ok 为 true。
  3. 让一辆车开进一个画好的车位,约 3 秒后该车位变成 occupied;车开走后约 5 秒变回 free。

怎么读车位状态

每条消息对应一路摄像头,内容是这路摄像头下所有车位的当前状态:

字段含义
camera_id摄像头编号
slots每个车位一项:id 车位编号,state 为 occupied(占用)/ free(空闲)/ unknown(未知)
occupied / free / unknown这路摄像头下占用、空闲、未知的车位数
changed这次状态发生变化的车位编号;为空表示这条消息是摄像头断流、恢复或车位表更新引起的
stream_ok摄像头画面是否正常。断流约 10 秒后为 false,车位变为 unknown

把所有摄像头消息里的 free 相加,就是全场空闲车位数。

后续步骤

  • 车位调整随时回到车位编辑页修改,保存后立即生效。
  • 要加摄像头,重新执行步骤 1,把新摄像头的地址加在最后(填了摄像头编号的话,原有摄像头沿用原来的编号)。已画好的车位会保留。