基于 SIFT 的游戏小地图识别与大地图实时定位工具。
本项目用于在网页端实时显示玩家在大地图中的位置,核心流程如下:
主要特点:
技术栈:
python run_web.pypython -m venv .venv .venv\Scripts\activate python -m pip install -r requirements.txt npm install python run_web.py
服务启动后访问:http://127.0.0.1:8686
以下参数统一使用环境变量配置。
| 参数 | 默认值 | 作用 | 典型场景 |
|---|---|---|---|
SOCKETIO_ASYNC_MODE | threading | Socket.IO 并发模型(threading / gevent) | 需要更高并发时设为 gevent |
SOCKETIO_ALLOW_UPGRADES | gevent/eventlet 下默认 true,否则 false | 是否允许 polling 升级到 websocket | websocket 握手排障 |
FRONTEND_PREBUILD | auto | 启动前前端预构建策略:auto / off / strict | 线上建议 auto,CI 可用 strict |
FRONTEND_BUILD_DIR | frontend_build/ | 前端构建产物目录 | 自定义部署目录 |
FRONTEND_BUILD_TIMEOUT_SEC | 120 | 前端预构建超时秒数 | 构建机器较慢时调大 |
COMPRESS_LEVEL | 5 | HTTP 压缩级别(br/gzip) | 带宽优先时调高 |
COMPRESS_MIN_SIZE | 700 | 最小压缩阈值(字节) | 小包较多时可调低 |
CV2_NUM_THREADS | 0(OpenCV 自动) | OpenCV 线程数 | 多进程部署时限制线程争用 |
python run_web.py
set FRONTEND_PREBUILD=off
python run_web.py
set FRONTEND_PREBUILD=strict
python run_web.py
set SOCKETIO_ASYNC_MODE=gevent
set COMPRESS_LEVEL=5
set COMPRESS_MIN_SIZE=700
python run_web.py
gunicorn --preload "backend.server:app"不会经过run_web.py,请先手动预构建一次。
python -m backend.frontend_build
SOCKETIO_ASYNC_MODE=gevent gunicorn -w 4 --threads 2 -k geventwebsocket.gunicorn.workers.GeventWebSocketWorker --preload "backend.server:app"
# 启动 Web 后端(默认入口)
python run_web.py
# 启动 SIFT 模式入口
python run_sift.py
# 仅执行前端预构建(不启动服务)
python -m backend.frontend_build
# 安装后可用脚本入口
map-tracker-build-frontend
map-tracker-web
map-tracker-sift
启动 python run_web.py 后,可在服务端终端直接输入以下命令进行热更新:
help show set KEY=VALUE [KEY2=VALUE2 ...]
示例:
set SEARCH_RADIUS=500 LK_ENABLED=false set RENDER_EMA_ALPHA=0.4 COMPRESS_MIN_SIZE=900
说明:
help:显示命令格式show:显示当前后端配置快照set ...:按 KEY=VALUE 修改可热更新项8686node_modules 缺失),预构建会失败并按策略回退