吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1811|回复: 14
收起左侧

[Python 原创] 智能语音交互:Python驾考灯光模拟系统

[复制链接]
dukeimp 发表于 2026-4-4 14:07

智能语音交互:Python驾考灯光模拟系统

项目概述

本项目是一款基于Python开发的驾考科目三灯光模拟测试工具。它旨在通过高度仿真的语音播报与交互逻辑,帮助学员在计算机端即可完成灯光操作的记忆强化与反应训练。
该程序不仅解决了传统死记硬背的枯燥问题,还利用计算机的原生语音合成技术,实现了跨平台(Windows/macOS/Linux)的自动化语音播报,为用户提供了一个沉浸式、智能化的备考环境。
核心功能亮点

全真语音模拟:程序能够自动朗读题目场景(如“通过急弯、坡路”),完全模拟真实考场的语音指令环境,训练学员的听觉反应能力。
智能跨平台适配:采用系统检测机制,自动适配不同操作系统的语音引擎。
Windows:调用pyttsx3库进行本地离线语音合成。
macOS:调用系统原生的say命令。
Linux:调用espeak引擎。
随机化题库机制:内置多种典型路况场景(如跟车、会车、无路灯行驶),每次考试都会随机打乱题目顺序,防止学员产生顺序依赖记忆。
即时反馈系统:用户作答后,系统会立即判断正误,并给出文字与语音的双重反馈(“回答正确”或“回答错误”),强化记忆点。
可视化数据统计:考试结束后,自动生成得分统计与正确率分析,帮助学员直观了解掌握情况。
技术架构与实现

本项目采用模块化编程思想,代码结构清晰,易于维护与扩展。
核心逻辑层:使用light_scenarios列表存储场景与答案的映射关系,通过random.sample实现题库的随机抽取。
交互控制层:利用input函数接收用户指令,配合time.sleep控制答题节奏,模拟真实考试的紧迫感。
语音引擎层:封装text_to_speech函数,通过platform模块识别操作系统,并动态调用对应的子系统或第三方库(subprocess、pyttsx3)实现语音输出。
场景覆盖范围

系统涵盖了驾考中最核心的灯光操作场景,具体包括但不限于:
近光灯应用:有路灯照明良好道路、同方向近距离跟车、与机动车会车。
远光灯应用:无路灯照明不良条件行驶。
远近交替应用:通过急弯/坡路/拱桥、无交通信号灯控制路口、超越前方车辆。
项目价值

对于学员:打破了时间和空间的限制,无需去驾校也能随时进行灯光模拟测试,利用碎片化时间高效备考。
对于开发者:这是一个极佳的Python系统编程案例,展示了如何结合系统调用、第三方库与逻辑控制来构建实用的桌面工具。
总结

这款“智能语音驾考助手”不仅是一个简单的刷题脚本,更是一个具备听觉交互能力的智能化测试系统。它以代码为基石,以语音为桥梁,将枯燥的交规知识转化为生动的实战演练,是Python技术在教育辅助领域的一次精彩应用。




[Python] 纯文本查看 复制代码
import random
import time
import platform
import subprocess

# -------------------------- 基础配置 --------------------------
# 灯光场景配置:(场景名称, 正确答案:1=近光,2=远光,3=远近交替两次)
light_scenarios = [
    ( "有路灯照明良好道路行驶", 1),
    ( "交通信号灯控制路口直行", 1),
    ("同方向近距离跟车", 1),
    ( "与机动车会车", 1),
    ("无路灯照明不良条件行驶", 2),
    ("无交通信号灯控制路口", 3),
    ( "通过急弯、坡路", 3),
    ("通过急弯、拱桥", 3),
    ("通过拱桥、人行横道", 3),
    ( "超越前方车辆", 3)
]

# 答案选项说明
options = """
请选择答案(输入数字1/2/3):
1 - 近光灯
2 - 远光灯
3 - 远近交替两次
"""

# -------------------------- 语音播报函数 --------------------------
def text_to_speech(text):
    """跨平台语音播报(Windows用pyttsx3,Linux用espeak,macOS用say)"""
    try:
        system = platform.system()
        if system == "Windows":
            # Windows需先安装:pip install pyttsx3
            import pyttsx3
            engine = pyttsx3.init()
            engine.setProperty('rate', 150)  # 语速(默认200,150更清晰)
            engine.setProperty('volume', 1.0)  # 音量(0.0-1.0)
            engine.say(text)
            engine.runAndWait()
        elif system == "Linux":
            # Linux需先安装espeak:sudo apt-get install espeak
            subprocess.run(['espeak', text], check=True)
        elif system == "Darwin":  # macOS
            subprocess.run(['say', text], check=True)
        else:
            print(f"⚠️  不支持的系统({system}),跳过语音播报")
    except Exception as e:
        print(f"❌ 语音播报失败:{e}")
        print(f"📢 文字提示:{text}")

# -------------------------- 主考试流程 --------------------------
def light_exam():
    print("="*50)
    print("🎯 灯光模拟考试开始!")
    print("规则:语音播报场景后,等待2秒请作答(输入1/2/3)")
    print("="*50 + "\n")

    # 随机打乱场景序列
    random_scenarios = random.sample(light_scenarios, len(light_scenarios))
    score = 0  # 得分
    total = len(random_scenarios)  # 总题数

    for idx, (scenario, correct_ans) in enumerate(random_scenarios, 1):
        # 1. 语音播报场景
        print(f"\n【第{idx}题】")
        broadcast_text = f":{scenario}"
        print(f"播报:{broadcast_text}")
        text_to_speech(broadcast_text)

        # 3. 接收用户答案
        while True:
            user_input = input(options + "你的答案:").strip()
            if user_input in ["1", "2", "3"]:
                user_ans = int(user_input)
                break
            print("❌ 输入错误!请输入1、2或3")

        # 4. 判断对错并计分
        if user_ans == correct_ans:
            print("✅ 回答正确!")
            score += 1
            text_to_speech("回答正确")
        else:
            correct_opt = {1: "近光灯", 2: "远光灯", 3: "远近交替两次"}[correct_ans]
            print(f"❌ 回答错误!正确答案是:{correct_ans}({correct_opt})")
            text_to_speech("回答错误")

        # 每道题间隔1秒,进入下一题
        time.sleep(1)

    # -------------------------- 考试结束统计 --------------------------
    print("\n" + "="*50)
    print("🎬 灯光模拟考试结束!")
    print(f"总分:{score}/{total}")
    accuracy = (score / total) * 100 if total > 0 else 0
    print(f"正确率:{accuracy:.1f}%")
    print("="*50)

    # 语音播报最终成绩
    result_text = f"考试结束,你的得分是{score}分,正确率{accuracy:.1f}%"
    text_to_speech(result_text)

# -------------------------- 运行脚本 --------------------------
if __name__ == "__main__":
    # 提示安装依赖(Windows)
    if platform.system() == "Windows":
        try:
            import pyttsx3
        except ImportError:
            print("⚠️  检测到Windows系统,缺少pyttsx3依赖,正在自动安装...")
            subprocess.run(['pip', 'install', 'pyttsx3'], check=True)
            import pyttsx3
            print("✅ 依赖安装完成!")

    # 启动考试
    light_exam()

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
xxxlsy + 1 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

shuaigeA 发表于 2026-4-4 21:10
从你的代码中,我看出了几个问题:
-------------------------------------------------
broadcast_text = f":{scenario}" # 多加了字符 :
print(f"播报:{broadcast_text}")
-------------------------------------------------
# 应该定义一个局部或全局变量存储字典,不然每次回答错误都会创建一个新字典。
correct_opt = {1: "近光灯", 2: "远光灯", 3: "远近交替两次"}[correct_ans]
eason888 发表于 2026-4-4 14:23
tingfengkanhai 发表于 2026-4-4 14:32
lijinfeng 发表于 2026-4-4 14:40
py的库真是又多又好用啊,等一个测试反馈
lb00426 发表于 2026-4-4 15:40
学习大佬的技术,努力成为大佬
52pojie181227 发表于 2026-4-4 17:26
非常感谢
gfy82 发表于 2026-4-5 08:21
可以简单的使用一下
chlong 发表于 2026-4-5 09:36
可以在完善一下,谢谢
 楼主| dukeimp 发表于 2026-4-5 09:43
tingfengkanhai 发表于 2026-4-4 14:32
有成品吗,大佬,我没电脑,这个很有用

成品没有,这个仅仅只有模拟灯光,开发一个app不划算
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-7-15 01:26

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表