跳到主要内容
核心产品案例案例截图/复盘版本:BETA 0.2.2Windows 桌面端

01 · 概览 / 从产品定义到真实发布

LootPilot

《逃离塔科夫》实时物品价格辅助工具。把截图、OCR、物品匹配与价格数据组织为一条非侵入式决策链路,缩短玩家从看到物品到判断价值的时间。

核心识别流程

18.61s → 7.14s

处理耗时降低约 62% · 14 张离线参考图 · 识别数量不变

本案例的截图与复盘依据为 BETA 0.2.2,不代表当前公开版本;历史验证条件在图注中单独标明。

Current state / 版本状态

案例截图/复盘版本BETA 0.2.2
最后核验2026-09-26
LootPilot BETA 0.2.0 实际主界面
实际界面 · BETA 0.2.0 截图。最新候选能力以正文和验证记录为准。

项目能力 Project Capabilities

从问题判断到可交付结果
需求洞察 User Insight
产品定义 Product Definition
OCR 工作流设计 OCR Workflow Design
性能优化 Performance Optimization
数据与接口整合 Data & API Integration
用户反馈迭代 Feedback-driven Iteration

01 · 问题定义

真正的问题不是查不到价格,而是判断来得太慢。

网站和小程序已经能查价格;真正未被解决的是:玩家必须离开当前操作上下文,才能完成一个需要快速反复发生的价值判断。

我的贡献

我负责围绕局内查价确定产品范围,区分单件即时确认与背包批量整理,定义触发、结果展示和异常规则,并根据计时测试与用户反馈安排迭代。AI 辅助代码实现和调试;需求取舍与验证结论由我判断。

  • 范围取舍:移除地图扩展,让维护与迭代重新聚焦价格判断。
  • 场景拆分:单扫与整屏扫描采用不同处理策略,分别回应即时查询与批量比较。
  • 验证依据:用离线计时检查处理耗时,以公开反馈识别状态和显示适配问题。

下文分别呈现实际界面、可靠性规则与性能验证记录。

01

看到物品

02

记住名称

03

切换窗口 / 手机

04

搜索并比价

05

回到游戏

06

做出判断

01

上下文切换

切出游戏、输入名称、比对结果,再回到现场;查询本身打断了判断。

02

查询成本

单件查询尚可接受,但背包内物品增加后,重复操作成本快速上升。

03

依赖价格记忆

市场价格持续变化,熟悉物品也可能因过期记忆产生错误判断。

04

时间敏感

局内整理、取舍和撤离都发生在有限时间内,结果必须及时出现。

02 · 关键体验与交互

界面不是终点;每个触点都对应一条产品判断。

全局快捷键减少操作路径,结果贴近物品位置降低视线往返;单扫和整屏扫描使用不同性能档位,让即时确认与批量判断各自承担合适的等待成本。

LootPilot 单物品快速扫描:局部 OCR、候选匹配与价格结果LootPilot 单物品快速扫描深色界面
当前能力

单物品快速扫描

提示窗优先策略将识别区域控制在鼠标附近的原生提示文本;失败后才按性能档位回退,避免无意义的全屏 OCR。

LootPilot 全背包扫描:格线、占用、批量 OCR 与价格浮层LootPilot 全背包扫描深色界面
当前能力

全背包扫描

批量结果保留与原物品位置的关联,并只显示可靠匹配;整包合计与可选换包建议帮助用户比较,而不是替用户操作。

Decision

用全局快捷键发起扫描。

Why · 用户的主要任务仍在游戏内,打开主窗口再点击会重新引入上下文切换。

Impact · 单扫 Alt+Q、整屏 Alt+W 均可配置,应用后台运行时仍可触发。

Decision

把结果放回物品附近。

Why · 价格若只出现在主窗口,用户仍需重新建立结果与物品的对应关系。

Impact · 结果浮层使用屏幕物理坐标定位,并在 WPF 显示层完成 DPI 换算。

Decision

把复杂度留在设置里。

Why · 不同分辨率、界面缩放和性能偏好需要调节,但不应增加每次扫描的步骤。

Impact · 快捷键、识别档位、标签位置、显示阈值和 DPI 适配集中配置。

03 · 可靠性取舍

状态设计既包含界面反馈,也包含用户看不见的系统约束。

当前产品已有明确的扫描反馈、空结果、缓存与不可用提示;“部分成功”主要通过只显示可靠项体现,而不是创造一套不存在的独立界面。

状态触发条件系统行为界面反馈下一步
空闲应用就绪 / 上次流程结束等待快捷键;保留当前模式目录主窗口显示“已就绪”发起单扫或整屏扫描
扫描中整屏快捷键关闭旧浮层,锁定重复触发并捕获屏幕“正在扫描并读取物价…”进入识别处理
处理中截图完成格线、占用、OCR、匹配与后处理扫描反馈层持续显示输出可靠结果
部分成功仅部分文字通过阈值保留可靠项,过滤低置信度项仅显示有效价格标签继续判断或重新扫描
成功匹配结果大于 0计算合计、保存最近扫描并渲染浮层价格标签与扫描摘要自动关闭或再次扫描
无可靠结果OCR / 匹配未达阈值不生成价格标签提示未找到足够可靠的名称调整画面后重试
离线 / 缓存价格刷新失败且缓存存在继续使用当前模式本地目录显示“正在使用本地缓存”继续扫描或稍后刷新
不可用接口失败且无缓存阻止无数据扫描结果提示接口不可用联网后刷新数据
状态空闲
触发
应用就绪 / 上次流程结束
行为
等待快捷键;保留当前模式目录
反馈
主窗口显示“已就绪”
下一步
发起单扫或整屏扫描
状态扫描中
触发
整屏快捷键
行为
关闭旧浮层,锁定重复触发并捕获屏幕
反馈
“正在扫描并读取物价…”
下一步
进入识别处理
状态处理中
触发
截图完成
行为
格线、占用、OCR、匹配与后处理
反馈
扫描反馈层持续显示
下一步
输出可靠结果
状态部分成功
触发
仅部分文字通过阈值
行为
保留可靠项,过滤低置信度项
反馈
仅显示有效价格标签
下一步
继续判断或重新扫描
状态成功
触发
匹配结果大于 0
行为
计算合计、保存最近扫描并渲染浮层
反馈
价格标签与扫描摘要
下一步
自动关闭或再次扫描
状态无可靠结果
触发
OCR / 匹配未达阈值
行为
不生成价格标签
反馈
提示未找到足够可靠的名称
下一步
调整画面后重试
状态离线 / 缓存
触发
价格刷新失败且缓存存在
行为
继续使用当前模式本地目录
反馈
显示“正在使用本地缓存”
下一步
继续扫描或稍后刷新
状态不可用
触发
接口失败且无缓存
行为
阻止无数据扫描结果
反馈
提示接口不可用
下一步
联网后刷新数据

04 · 迭代与决策

测量 → 定位 → 修改 → 验证

完整识别流程的等待时间直接影响局内判断。优化不是凭感觉删步骤,而是先把链路拆开计时,再针对真实瓶颈调整。

优化前18.61s
优化后7.14s
验证结果处理耗时降低约 62%

Balanced 模式 · 14 张离线参考图 · 识别数量不变

历史离线基准,用于比较同组样本的处理耗时,不代表所有设备或当前公开版本的统一性能。

01 · 测量

建立可重复基准

记录截图、格线检测、占用判断、OCR、匹配与后处理,而不是只比较单次总耗时。

02 · 定位

确认 OCR 与回退成本

像素处理优化后,等待主要集中在 OCR 推理;强制放大和完整格线增强扩大了未匹配单元的成本。

03 · 修改

优化真正的瓶颈

缓存规范化名称索引、复用编辑距离缓冲,调优 ONNX Runtime,并收敛 OCR 放大与回退策略。

04 · 验证

速度与识别数同时检查

同一组 14 张参考图的识别数量保持不变,避免用漏识别换取更短耗时。

LootPilot 历史验证截图,展示 Balanced 模式从 18.61 秒降至 7.14 秒
历史验证截图:Balanced 模式 18.61s → 7.14s,14 张离线参考图,识别数量不变。

Decision

把性能定义成产品质量,而不只是工程指标。

Why
用户需要在有限时间内做价值判断;识别正确但等待过长,依然无法融入真实流程。
Change
建立离线基准和分阶段诊断,并把回退策略、匹配索引与 OCR Runtime 作为一条链路共同优化。
Result
Balanced 平均耗时从 18.61 秒降至 7.14 秒,且检测数量保持不变。

Decision

从单物品扩展到整屏扫描。

Why · 重复单扫不能覆盖背包整理中一次比较多个可见物品的任务。

Impact · 加入动态格线、占用判断、批量 OCR、位置映射和扫描合计。

Decision

主动删除地图扩展。

Why · 地图导航扩大维护与内容边界,却没有增强价格判断这一核心价值。

Impact · 本地迭代记录 0.12.5:移除地图、定位与相关设置,发布包重新聚焦视觉识别。

05 · 项目结果

结果来自发布、测量与公开反馈三个层级。

公开互动用于证明产品被看见和被讨论,但不等同于用户数、下载量、留存或商业转化。

产品交付真实 Windows 软件

公开源码与测试版持续发布;从产品定义到测试、打包和迭代完整落地。

性能验证18.61s → 7.14s

Balanced 平均处理耗时降低约 62%,14 张参考图识别数量不变。

公开验证3000+ / 5200+ / 60+

LootPilot + ShadePilot 两项公开产品累计点赞 / 收藏 / GitHub Stars。

Feedback Loop · 2K / 超宽屏识别框

  1. 用户反馈:2K 与超宽屏下识别框位置不稳定,结果与物品的对应关系不够可靠。
  2. 问题复现:在 2K、4K 与超宽屏配置下复现识别框、结果浮层与屏幕边缘的偏移。
  3. 我的判断:问题不只在 OCR,而是捕获坐标、屏幕坐标与 DPI 缩放混用。
  4. 具体修改:分离图像捕获空间与屏幕显示空间,统一 DPI 换算与边缘定位策略。
  5. 对应 Release / Version:BETA 0.2.0(公开发布记录);当前公开版本 BETA 0.3.5(公开测试版)。
  6. 验证方式:用同类 2K / 4K / 超宽屏样本复测识别框与结果定位;修复后通过本地复测确认。

通过 B 站评论、游戏群与 GitHub Issue 持续收集真实使用问题,将模糊反馈拆成可复现问题、优先级与版本任务,再进入后续迭代。

规格与版本附录展开查看完整规则、异常处理与版本记录。

A1 · 产品目标

缩短从看到物品,到完成价值判断之间的时间。

同时尽可能减少对当前游戏流程的打断,让信息回到决策发生的位置。

核心目标

快速获得当前物品的可用价格信息。

结果必须足够及时、足够接近决策现场,并在证据不足时保持克制。

辅助目标

  • 减少上下文切换
  • 覆盖单件与批量场景
  • 降低触发与阅读成本
  • 保持轻量、短时的结果反馈
  • 不读取或修改游戏进程

非目标

  • 不自动操作角色或拾取物品
  • 不自动交易或模拟输入
  • 不修改游戏数据
  • 不把第一阶段扩展成完整市场分析平台

A2 · 用户场景

用真实任务定义产品,而不是虚构用户画像。

三个场景对应三种不同的信息缺口:陌生物品、批量整理,以及已经过期的价格记忆。

场景 01

快速确认单件物品

遇到不熟悉的物品,用一次全局快捷键完成局部识别与价格确认。

  1. 聚焦物品
  2. 触发快捷键
  3. 提示窗 OCR
  4. 显示价格
  5. 做出判断
场景 02

批量扫描背包

整理多个可见物品时,一次扫描完成格线检测、批量识别与价值对比。

  1. 打开背包
  2. 触发整屏扫描
  3. 批量 OCR
  4. 结果定位
  5. 比较价值
场景 03

修正过期价格记忆

认识物品但不确定当前价格时,以当前模式的价格目录替代过期记忆。

  1. 识别熟悉物品
  2. 读取当前目录
  3. 比较市场 / 商人价
  4. 修正判断

A3 · 核心产品流程

一次触发背后,是两条彼此解耦的产品链路。

价格目录在启动、模式切换和定时刷新时更新;用户扫描不必等待一次新的网络请求。识别链路只使用当前可用目录,因此联网失败不会自动变成错误价格。

数据准备扫描前保持价格目录可用
更新时机启动 / 切换模式 / 定时刷新
→
更新策略主价格源 → 备用源 → 本地缓存
→
可用结果当前模式价格目录
识别流程用户发起一次扫描
用户操作全局快捷键
↓
系统处理屏幕捕获
↓
系统处理识别区域 / 格线
↓
系统处理本地 OCR
↓
系统处理文本规范化与物品匹配
↓
条件判断达到可靠阈值?
否
留空 / 提示重试
是
读取当前价格 → 格式化 → 定位浮层
↓
用户操作比较价值并做出判断
用户操作、系统处理、条件判断与降级策略采用统一视觉编码;所有节点均来自当前实现。

A4 · 功能架构

功能围绕“识别—价格—结果”组织,而不是按技术模块堆叠。

以下均为 BETA 0.2.2 本地候选代码中的已有能力;换包建议只提供建议,不执行点击、移动或输入。

产品LootPilot

本地单用户 Windows 应用

01

识别

  • 单物品扫描
  • 全背包扫描
  • 本地 OCR
  • 规范化物品匹配
02

价格

  • PvP / PvE / 赛季模式
  • 主接口与备用接口
  • 分模式本地缓存
  • 最优价格格式化
03

结果

  • 物品附近浮层
  • 背包价格标签
  • 扫描价值合计
  • 最近扫描记录
04

设置

  • 全局快捷键
  • 识别性能档位
  • 显示与 DPI 适配
  • 最低显示价格
05

系统

  • OCR 后台预热
  • 定时刷新
  • 扫描计时
  • 错误反馈

A5 · 产品规格

把体验意图转化为可以直接开发的规则。

以全背包扫描为例:单物品扫描解决即时查询,但整理背包时,用户需要“一次触发,多物品识别”。规格必须同时定义触发、输入、质量门槛、数据降级和结果生命周期。

功能全背包扫描
问题陈述玩家缺少一次性评估多个可见物品的高效方式。
目标批量识别 / 正确映射 / 更快反馈 / 低视觉干扰
FR-01当前能力

扫描触发

用户可在 LootPilot 后台运行时通过全局快捷键发起整屏扫描;处理期间再次触发会被忽略,避免扫描互相覆盖。

  • 输入 · 全局快捷键
  • 保护 · 忙碌状态
FR-02当前能力

屏幕捕获

关闭旧结果层后捕获当前目标屏幕,并把画面与屏幕物理坐标交给识别流程。

  • 输入 · 当前屏幕
  • 输出 · 图像与屏幕边界
FR-03当前能力

格线检测与 OCR

检测仓库、容器与随身区域的格线和占用,再输出文字块、边界框与 OCR 置信度。

  • 输出 · 文字 / 边界框 / 置信度
  • 回退 · 随身区域 OCR
FR-04当前能力

物品匹配

规范化 OCR 文本,优先命中已索引名称,再进行相似度匹配;低于阈值的结果直接留空。

  • 精确索引 → 相似度匹配
  • 质量门槛 · 不强制匹配
FR-05当前能力

价格解析

从当前模式目录读取跳蚤与商人价格。联网刷新失败时保留本地缓存;没有有效目录时不输出误导价格。

  • 主接口 → 备用接口 → 缓存
  • 原则 · 宁可无结果,不给错误结果
FR-06当前能力

结果浮层

只为可靠匹配项生成与屏幕位置关联的标签和整包摘要;新扫描会清理旧结果,标签按时自动关闭。

  • 定位 · 物理像素 → WPF 坐标
  • 生命周期 · 替换 / 超时关闭

产品质量原则

没有结果优先于错误结果

识别成功不等于产品成功。只有 OCR、物品映射与价格目录都满足可靠条件,系统才显示价格。

A6 · 数据模型与能力边界

理解数据结构,但不把本地工具伪装成 SaaS。

以下是基于当前代码记录整理的产品层简化数据模型,不是完整数据库结构。字段被压缩到足以解释产品规则的层级。

数据实体

物品

当前价格目录中的物品记录

  • id
  • name / short_name
  • width / height
  • flea_price
  • trader_price / trader_name
  • used_in_tasks / used_in_hideout
  • types
数据实体

OCR 结果

识别与匹配之间的最小信息

  • raw_text
  • item?
  • confidence
  • source_region
  • text_block.bounds
数据实体

扫描记录

本地保存的最近整屏扫描摘要

  • scanned_at
  • game_mode
  • item_count
  • flea_total
  • trader_total

能力边界

本地用户

LootPilot 当前是本地单用户 Windows 应用,因此不需要角色权限系统。用户能力包括:扫描物品、查看价格、配置设置、管理本地缓存与收藏。只有未来引入账号、同步或社区数据时,才需要设计账号、角色与权限。

A7 · 异常情况

异常不是附录,而是桌面产品体验的一部分。

这些情况来自当前实现、变更记录与真实反馈。处理原则保持一致:优先保护判断质量,再恢复功能覆盖。

01

OCR 无文字

返回空结果,不创建价格浮层;提示用户调整画面后重试。

02

部分识别

只渲染达到匹配阈值的物品,低置信度项主动留空。

03

相似名称 / 错词

结合规范化、目录匹配分数与 OCR 置信度设置质量门槛。

04

API 不可用

主价格源失败后尝试备用源;仍失败则使用当前模式本地缓存。

05

缓存缺失

明确显示接口不可用,不用其他模式或未知旧数据填充。

06

重复快捷键

忙碌状态直接忽略重复触发,避免多个扫描流程冲突。

07

分辨率 / DPI 偏移

区分物理像素与 WPF 坐标,并按屏幕、缩放和 UI 比例换算。

08

可变背包高度

精确格线优先;随身区域使用按分辨率缩放的 OCR 回退策略。

09

结果浮层残留

每次扫描前关闭已有结果与反馈层,并通过显示时长自动清理。

10

复杂画面 / 遮挡

不把低质量候选强制映射为物品;接受没有结果。

A8 · 版本演进

版本不是功能清单,而是一串产品判断。

时间线只保留改变范围、交互或可靠性的阶段;以下按有依据的产品迭代阶段整理;公开发布与本地验证分别标注。

01

0.11.0

公开 MVP

首次公开单物品与全背包扫描,验证 OCR 查价链路。
02

0.11.2–0.11.3

提示窗优先

局部提示窗优先,并适配 720p–4K、屏幕边缘与窗口客户区。
03

本地迭代记录 · 0.12.5

范围收敛

移除地图导航与相关资源,让产品回到价格识别主线。
04

本地迭代记录 · 0.12.6–0.12.7

量化优化

建立离线基准和分阶段计时,将 Balanced 平均耗时降至 7.14 秒。
05

BETA 0.2.0

交互与 DPI

拆分单双扫描性能档位,统一窗口、设置与跨 DPI 浮层定位。
06

BETA 0.2.1–0.2.2

案例复盘版本

补齐可变随身区域扫描,并加入只提供建议、不自动操作的换包辅助。
设计方向

下一步:继续提高真实高分辨率覆盖、错误反馈和安装体验;价格历史、分析与反馈闭环仅作为未来能力,不写成当前已实现功能。

A9 · 项目复盘

把技术链路做对,只是产品成立的起点。

真正影响使用体验的,是识别、等待、映射、反馈与系统环境能否在同一条路径里共同工作。

01

识别能力不等于完整产品

识别准确本身不会自动形成可用产品;延迟、映射和反馈同样决定用户是否能完成判断。

02

优先保证主流程

技术上正确的结果,如果迫使用户离开主要任务,仍然会在真实场景中失败。

03

围绕系统条件设计

桌面产品必须把 DPI、窗口、快捷键、缓存和第三方数据可用性纳入体验设计。

04

真实发布暴露真实问题

公开发布暴露了静态原型无法发现的分辨率、状态、安装与模式切换问题。

Continue exploring

继续查看相关实践与完整经历。

Resume
查看 ShadePilot 案例

Contact

联系我

如果你想聊产品设计、数字产品或合作机会,可以通过下面的方式联系我。