可用于快速求解数独及通过图像识别数独题目。项目采用 Bitmask 回溯与 SSE2 加速求解器,结合 ONNX Runtime 实现 AI 推理,支持 HTTP 服务与图像上传,具备高吞吐低延迟特性。【此简介由AI生成】
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 17 天前 | ||
| 17 天前 | ||
| 17 天前 | ||
| 17 天前 | ||
| 17 天前 | ||
| 17 天前 | ||
| 17 天前 | ||
| 17 天前 | ||
| 17 天前 | ||
| 17 天前 | ||
| 17 天前 |
Sudoku Solver (C++)
基于 C++ 的高性能数独求解与图像识别网站。
📖 新同学? 从 docs/GETTING_STARTED.md 开始,15 分钟从零到运行。
30 秒快速开始
Linux
# 1. 安装依赖 (只需一次)
yum install -y gcc-c++ cmake make opencv cpp-httplib-devel openssl-devel zlib-devel brotli-devel
# 2. 下载 ONNX Runtime + 准备模型 (只需一次)
# 详见 docs/GETTING_STARTED.md
# 3. 编译
cd sudoku-cpp && mkdir -p build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release && make -j$(nproc)
# 4. 运行
./sudoku-server --port 8000 --log-level warning --workers 4
Windows
# 1. 安装工具链 (只需一次)
winget install Microsoft.VisualStudio.2022.BuildTools Kitware.CMake Python.Python.3.12
# vcpkg + 依赖: 详见 docs/GETTING_STARTED.md
# 2. 编译
cd sudoku-cpp && mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=C:\vcpkg\scripts\buildsystems\vcpkg.cmake
cmake --build . --config Release
# 3. 运行
cd Release && sudoku-server.exe --port 8000 --log-level warning --workers 4
浏览器打开 http://localhost:8000。
性能一览
| 端点 | 延迟 | 吞吐 (4 workers) |
|---|---|---|
| GET / 首页 | 0.19ms | 160,000 r/s |
| POST / 求解 | 0.22ms | 160,000 r/s |
| POST / upload (300KB) | ~7ms | 2,325 r/s |
| POST / upload (3.2MB) | ~30ms | — |
16核 openEuler 24.03, wrk + xargs 多图混合压测。完整报告: docs/PERFORMANCE.md
技术栈
| 组件 | 技术 |
|---|---|
| 平台 | Linux (openEuler/CentOS/Ubuntu) + Windows (11, VS 2022) |
| HTTP | cpp-httplib 0.46 |
| 模板 | inja v3.4 (启动时预渲染) |
| AI 推理 | ONNX Runtime 1.18 (Session 池 + 请求批处理) |
| 图像 | OpenCV 4.5 + libjpeg-turbo |
| 求解器 | Bitmask 回溯 + SSE2 加速 |
文档导航
| 文档 | 适合 |
|---|---|
| docs/GETTING_STARTED.md | 新人必读 — 环境配置 → 首次运行 |
| docs/ARCHITECTURE.md | 系统设计、模块职责、数据流 |
| docs/API.md | 全部 7 个接口的请求/响应格式 |
| docs/DEPLOY.md | 生产部署 (systemd/Docker) + 性能调优 |
| docs/PERFORMANCE.md | 吞吐量报告、优化历程、C++ vs Python |
| training/README.md | CNN 模型训练、反馈闭环 |
| tests/README.md | 测试与压测脚本使用说明 |
项目结构
sudoku-cpp/
├── src/ # C++ 源码 (15 文件, ~2000 行)
│ ├── main.cpp # 入口
│ ├── server.cpp / .h # HTTP 层
│ ├── batch_engine.cpp / .h # 批处理推理引擎 (核心)
│ ├── recognition.cpp / .h # 图像预处理
│ ├── correction.cpp / .h # 透视校正
│ ├── solver_wrapper.cpp / .h # 求解器 (LRU + 对象池)
│ └── solver_bitmask.cpp / .hpp # Bitmask 回溯求解器
├── docs/ # 文档
├── tests/ # 压测脚本
├── training/ # Python 训练脚本
├── models/ # ONNX 模型
├── onnxruntime/ # ONNX Runtime 库 (vendored)
├── static/ + templates/ # 前端 (SPA)
└── third_party/ # 单头库 (inja, nlohmann/json)
API 速查
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | / |
SPA 首页 |
| POST | / |
求解 {"asks": [81个0-9]} |
| POST | /uploadfile/ |
上传图片 → AI 识别 |
| POST | /feedback/ |
保存校正 (需 --enable-feedback) |
| GET | /feedback/{hash} |
查询校正 |
| GET | /health |
运行时指标 |
| GET | /static/* |
静态资源 |
API 详情: docs/API.md
优化历程
| 版本 | 关键改动 | 吞吐 (upload 64c) |
|---|---|---|
| v1.0 | 基础 C++ 移植 | 18 r/s |
| v1.1 | ONNX Runtime + 去 clone + 批量 tensor | 62 r/s |
| v2.0 | Session 池 + 请求批量合并 | 235 r/s |
| v3.0 | TARGET=1000 + SHA256 缓存 | 2,325 r/s |