1. 实际应用场景描述
场景
在大型商场、写字楼、小区停车场停车后,很多人会遇到以下问题:
- 停完车后忘记具体位置,绕圈找车。
- 地下停车场结构复杂,楼层、区域编号难记。
- 手机信号差,地图定位不准。
- 双手提物时无法操作手机查询。
2. 痛点引入
1. 记忆负担:停车后需记住楼层、区域、车位号。
2. 环境复杂:光线暗、标识不清,导致回程迷路。
3. 操作不便:双手提物或下雨天不方便看手机。
4. 定位不准:GPS 在室内信号弱,地图导航失效。
3. 核心逻辑讲解
1. 数据层:
- 停车记录(照片路径、GPS 坐标、楼层、区域、时间戳)存储在本地数据库(SQLite)或 JSON 文件中。
2. 业务逻辑:
- 停车后拍摄车位照片 + 自动获取 GPS 定位。
- 保存记录并生成唯一 ID。
- 回程时通过语音唤醒查询最近停车记录。
- 调用地图 API 生成步行导航路线。
3. 展示层:
- 移动端 Web 页面或桌面端 GUI 展示地图与导航。
4. 创新点(智能时代下的创新课程思路):
- 语音交互:支持 “Hey Park” 唤醒查询。
- 室内定位增强:结合蓝牙信标或 Wi-Fi 指纹(如有)。
- AR 导航:未来可扩展为 AR 实景指引。
- 社区共享:匿名分享停车场热点区域,帮助他人避堵。
4. 代码模块化设计
parking_locator/
│
├── app.py # Flask 主程序(提供 API 与 Web 界面)
├── data/
│ └── parking_records.json # 停车记录数据
├── models/
│ └── record.py # 数据模型
├── utils/
│ ├── location.py # 获取 GPS 坐标
│ ├── speech.py # 语音唤醒与识别
│ └── map.py # 调用地图 API 生成路线
├── static/
│ ├── uploads/ # 停车照片
│ └── style.css
├── templates/
│ ├── index.html # 首页
│ └── history.html # 历史记录页
├── requirements.txt
└── README.md
4.1
"record.py"(数据模型)
class ParkingRecord:
def __init__(self, id, photo_path, lat, lon, floor, area, timestamp):
self.id = id
self.photo_path = photo_path
self.lat = lat
self.lon = lon
self.floor = floor
self.area = area
self.timestamp = timestamp
4.2
"location.py"(获取定位)
import requests
def get_current_location():
# 使用免费 IP 定位(仅示例,真实项目可用 GPS 模块或手机定位)
try:
res = requests.get("https://ipapi.co/json/").json()
return res['latitude'], res['longitude']
except:
return None, None
4.3
"speech.py"(语音唤醒示例)
import speech_recognition as sr
def listen_for_wake_word(wake_word="停车"):
recognizer = sr.Recognizer()
with sr.Microphone() as source:
print("请说出唤醒词...")
audio = recognizer.listen(source)
try:
text = recognizer.recognize_google(audio, language="zh-CN")
if wake_word in text:
return True
except:
pass
return False
4.4
"app.py"(Flask 后端)
from flask import Flask, render_template, request, redirect, url_for
import json
import os
from datetime import datetime
from utils.location import get_current_location
app = Flask(__name__)
UPLOAD_FOLDER = 'static/uploads'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
def load_records():
with open('data/parking_records.json', 'r', encoding='utf-8') as f:
return json.load(f)
def save_records(data):
with open('data/parking_records.json', 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=4)
@app.route('/')
def index():
records = load_records()
return render_template('index.html', records=records)
@app.route('/save', methods=['POST'])
def save_parking():
file = request.files['photo']
floor = request.form['floor']
area = request.form['area']
filename = file.filename
filepath = os.path.join(app.config['UPLOAD_FOLDER'], filename)
file.save(filepath)
lat, lon = get_current_location()
records = load_records()
new_id = len(records) + 1
records.append({
"id": new_id,
"photo": f"uploads/{filename}",
"lat": lat,
"lon": lon,
"floor": floor,
"area": area,
"timestamp": datetime.now().isoformat()
})
save_records(records)
return redirect(url_for('index'))
@app.route('/navigate/<int:record_id>')
def navigate(record_id):
records = load_records()
record = next((r for r in records if r['id'] == record_id), None)
if record:
# 这里可调用地图 API 生成导航 URL
maps_url = f"https://www.google.com/maps/dir/?api=1&destination={record['lat']},{record['lon']}"
return redirect(maps_url)
return "记录未找到"
if __name__ == '__main__':
os.makedirs(UPLOAD_FOLDER, exist_ok=True)
app.run(debug=True)
4.5
"templates/index.html"(简化版)
<h1>停车位置记录</h1>
<form action="/save" method="post" enctype="multipart/form-data">
<input type="file" name="photo" accept="image/*" required>
<input type="text" name="floor" placeholder="楼层" required>
<input type="text" name="area" placeholder="区域" required>
<button type="submit">保存停车位置</button>
</form>
<h2>历史记录</h2>
{% for r in records %}
<div>
<img src="{{ url_for('static', filename=r.photo) }}" width="100">
<p>{{ r.floor }} - {{ r.area }}</p>
<a href="/navigate/{{ r.id }}">导航到这里</a>
</div>
{% endfor %}
**4.6
"requirements.txt"
Flask==2.3.0
requests==2.31.0
SpeechRecognition==3.10.0
pyaudio==0.2.11
5. README.md
# 停车位置记录工具
## 简介
停车后拍摄车位照片+定位,生成导航路线,支持语音唤醒查询,解决商场、小区找不到车位的麻烦。
## 安装与使用
1. 克隆项目
2. 安装依赖:`pip install -r requirements.txt`
3. 运行:`python app.py`
4. 访问 http://127.0.0.1:5000
## 功能
- 拍照+定位保存
- 历史记录查看
- 一键导航
- 语音唤醒(需麦克风)
## 注意
真实部署需考虑移动端适配与室内定位精度提升。
6. 使用说明
1. 停车后打开网页,上传车位照片并填写楼层、区域。
2. 系统自动保存 GPS 坐标与时间。
3. 回程时在电脑或手机上打开网页,点击“导航到这里”。
4. 语音唤醒功能可在终端运行
"speech.py" 测试。
7. 核心知识点卡片
知识点 说明
GPS 定位获取 使用 API 或设备传感器
语音识别 SpeechRecognition + Google API
数据存储 JSON 或 SQLite
Flask 文件上传 安全保存用户图片
创新营销思维 语音交互、AR 导航、社区共享
8. 总结
本项目通过 Python + Flask 实现了一个停车位置记录工具,结合了智能时代下的创新课程思路:
- 痛点驱动:解决停车后找车难、操作不便的问题。
- 数据驱动:照片+定位+结构化信息,确保可回溯。
- 可扩展性:可升级为移动 App、AR 导航、室内定位增强。
如果你愿意,可以升级为移动端 App(Kivy/Flutter),并集成蓝牙信标室内定位,让找车更精准。
利用AI解决实际问题,如果你觉得这个工具好用,欢迎关注长安牧笛!