🚌 智能公交车人流量检测与超载预警系统

 

一、 实际应用场景描述 (Scenario)

 

场景设定在早高峰的公交站台。

 

一辆核定载客量为 80 人的公交车驶入站台。此时车内已有 75 人,处于满载状态。随着乘客继续拥挤上车,车门处的人体红外传感器(PIR)或光电计数器开始工作。

 

一旦系统检测到第 81 位乘客试图上车(即总人数 > 80),车载显示屏立刻变红,语音播报 “车辆已满,请勿上车”,同时车门保持关闭,直至有乘客下车腾出空位。

 

二、 引入痛点 (Pain Points)

 

传统人工监管存在以下安全隐患:

 

1. 主观盲区:司机视线受阻或疲劳时,无法精确统计人数。

2. 安全法规:交通法规明确规定客车严禁超载,一旦发生事故,超载车辆需承担更大责任。

3. 效率低下:高峰期靠售票员喊话或人工拦阻,容易造成纠纷和拥堵。

 

我们的方案通过非接触式自动计数和硬阈值拦截,实现无人化、标准化的安全管理。

 

三、 核心逻辑讲解 (Core Logic)

 

本系统采用“双向计数器 + 阈值锁存”逻辑:

 

1. 信号采集:利用安装在车门上方的对射式光电传感器或ToF(飞行时间)传感器。当光束被遮挡,产生一个脉冲信号。

2. 计数逻辑:

   - 

"IN" 计数:乘客上车 (+1)

   - 

"OUT" 计数:乘客下车 (-1)

   - 

"Current_Count = IN - OUT"

3. 安全判定:

   - 若 

"Current_Count >= MAX_CAPACITY (80)" → 触发 

"OVERLOAD" 状态,禁止开门或禁止上车。

 

四、 代码模块化实现 (Code Implementation)

 

我们将系统解耦为三个模块,模拟车载嵌入式系统:

 

"sensor.py": 车门传感器模拟

"counter.py": 客流统计算法

"safety_controller.py": 安全拦截逻辑

"main.py": 主运行循环

 

1. 传感器模块 (

"sensor.py")

 

模拟光电传感器的脉冲信号。

 

# sensor.py

import random

 

class DoorSensorArray:

    """

    模拟车门处的传感器阵列

    可以是红外对射或深度摄像头简化模型

    """

    def __init__(self, detection_probability=0.95):

        self.detection_probability = detection_probability

 

    def detect_passenger(self, direction):

        """

        模拟检测到一个乘客通过

        direction: 'in' 或 'out'

        """

        # 模拟传感器偶尔漏检的情况

        if random.random() < self.detection_probability:

            print(f"[传感器] 检测到一名乘客 {direction.upper()} 站")

            return True

        else:

            print(f"[传感器] 警告:一名乘客 {direction.upper()} 站 漏检")

            return False

 

2. 客流计数模块 (

"counter.py")

 

实现核心的计数逻辑。

 

# counter.py

class PassengerCounter:

    """

    乘客流量计数器

    维护上车和下车的净差值

    """

    def __init__(self, initial_count=0):

        self.in_count = 0

        self.out_count = 0

        self.current_passengers = initial_count

 

    def passenger_entered(self):

        self.in_count += 1

        self.current_passengers += 1

        print(f" -> 累计上车: {self.in_count}, 当前载客: {self.current_passengers}")

 

    def passenger_exited(self):

        self.out_count += 1

        self.current_passengers -= 1

        # 防止出现负数(传感器误判)

        self.current_passengers = max(0, self.current_passengers)

        print(f" -> 累计下车: {self.out_count}, 当前载客: {self.current_passengers}")

 

    @property

    def total_on_board(self):

        return self.current_passengers

 

3. 安全控制器 (

"safety_controller.py")

 

实现核心的安全拦截状态机。

 

# safety_controller.py

from enum import Enum, auto

 

class BusState(Enum):

    NORMAL = auto() # 正常运营

    OVERLOADED = auto() # 超载锁定

 

class SafetyController:

    """

    公交安全控制器

    负责执行“超载禁止上车”的硬性规则

    """

    def __init__(self, max_capacity=80):

        self.max_capacity = max_capacity

        self.state = BusState.NORMAL

 

    def check_capacity(self, current_count):

        """

        核心安全逻辑:硬阈值判断

        """

        if current_count > self.max_capacity and self.state == BusState.NORMAL:

            self.trigger_overload_lockdown()

        elif current_count <= self.max_capacity and self.state == BusState.OVERLOADED:

            self.release_lockdown()

        

        return self.state

 

    def trigger_overload_lockdown(self):

        """触发超载锁定"""

        self.state = BusState.OVERLOADED

        print("\n" + "🚨" * 20)

        print("🚨🚨🚨 [安全警报] 车辆已满载!请勿上车!🚨🚨🚨")

        print("🔒 车门已锁定,拒绝上车...")

        print("📢 语音提示:车辆已满,请等候下一辆车。")

        print("🚨" * 20 + "\n")

 

    def release_lockdown(self):

        """解除超载锁定"""

        self.state = BusState.NORMAL

        print("\n✅ [系统恢复] 载客量已降至安全线以下,恢复正常运营。\n")

 

4. 主程序 (

"main.py")

 

模拟早高峰的上下车动态。

 

# main.py

import time

from sensor import DoorSensorArray

from counter import PassengerCounter

from safety_controller import SafetyController

 

def main():

    print("🚌 智能公交安全监控系统启动...")

    print("=" * 40)

 

    # 初始化系统

    sensor = DoorSensorArray()

    counter = PassengerCounter(initial_count=75) # 假设车上已有75人

    controller = SafetyController(max_capacity=80)

 

    print(f"当前初始载客: {counter.total_on_board} 人\n")

 

    # 模拟早高峰上车过程

    for i in range(10):

        print(f"\n--- 上车周期 {i+1} ---")

        

        # 模拟一名乘客上车

        if sensor.detect_passenger('in'):

            counter.passenger_entered()

 

        # 检查安全状态

        state = controller.check_capacity(counter.total_on_board)

 

        # 如果是超载状态,停止上车模拟

        if state == controller.OVERLOADED:

            print("\n系统已锁定,等待乘客下车...")

            break

 

        time.sleep(1)

 

    # 模拟几名乘客下车

    print("\n--- 模拟到站,乘客下车 ---")

    for _ in range(6):

        if sensor.detect_passenger('out'):

            counter.passenger_exited()

        time.sleep(0.5)

 

    # 再次检查状态,应该恢复正常

    controller.check_capacity(counter.total_on_board)

 

    print("\n系统监测结束。")

 

if __name__ == "__main__":

    main()

 

五、 README 文件与使用说明

 

📂 Project Structure

 

smart_bus_monitor/

├── main.py # 主控制循环

├── sensor.py # 光电传感器模拟

├── counter.py # 客流计数逻辑

├── safety_controller.py# 安全控制器

└── README.md

 

🚀 Getting Started

 

1. 环境要求:

   - Python 3.8+

2. 运行方式:

cd smart_bus_monitor

python main.py

3. 运行现象:程序开始时车上有 75 人。随着新乘客“上车”,计数增加。当人数达到 81人 时,系统触发红色警报,提示“请勿上车”,模拟车门锁定。

 

六、 核心知识点卡片 (Knowledge Cards)

 

知识点 说明 在本项目中的应用

光电/PIR传感 利用光束遮挡或人体红外辐射检测物体存在。 

"sensor.py" 模拟检测乘客通过的事件。

事件计数算法 将物理事件(有人通过)转化为数字累加。 

"counter.py" 维护 

"IN - OUT" 的净计数。

硬阈值安全锁 一旦超过安全红线,系统进入不可逆的锁定状态。 

"safety_controller.py" 中的 

"OVERLOADED" 状态。

状态机 (FSM) 管理车辆的运营与锁定状态切换。 

"BusState" (NORMAL/OVERLOADED)。

 

七、 总结 (Summary)

 

作为全栈工程师,我们在设计涉及公共安全的系统时,必须遵循“Fail-Safe”(失效安全)原则。

 

在这个公交超载案例中,核心不在于 UI 有多漂亮,而在于逻辑的绝对可靠。即使传感器偶尔漏检(如 

"sensor.py" 中的模拟),只要最终人数超限,系统必须能阻断危险。

 

在实际的车载 ECU(电子控制单元)中,这段代码会运行在实时操作系统(RTOS)上,直接与车门继电器和车载显示屏通信。这就是智能仪器技术在智慧城市交通中的最直接体现:用确定的程序,对抗不确定的人流。

利用AI解决实际问题,如果你觉得这个工具好用,欢迎关注长安牧笛!

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐