已实现
批量输入与长图处理
支持文件选择和拖放。长图分段并还原坐标,以重叠区归属避免重复框;不宣称自动去噪、手写专用识别或任意布局通用。
desktop_app.py:406–444 · ocr_tiling.py:9–37PROJECT CASE STUDY / DESKTOP · OCR
已交付使用
从微信群聊天截图到订单明细,把 OCR、业务解析与人工核对连接为一个 Windows 工作流。
LOCAL OCR · HUMAN REVIEW · RELIABLE EXPORT
01 / PROJECT OVERVIEW
把“识别出文字”与“得到可信统计”分开:先解析订单证据,再让使用者核对无法确定的信息,最后才生成正式报表。
02 / BACKGROUND
母亲所在单位通过微信群记录订单和配送完成回复。人工统计需要反复查找编号、匹配配送人和瓶数,再汇总为 Excel。
工具保留了原有群聊流程,使用者选择截图和统计日期,在本地整理信息。它没有自动读取微信聊天库,也不要求配送人员改用另一套系统。
THE PROBLEM
聊天截图中的昵称、时间分隔、气泡和编号简写使信息难以直接汇总。OCR 文本中即使出现了订单号,也不能据此确认订单已送达、归谁配送或实际瓶数。
03 / MY ROLE
围绕母亲所在单位的配送统计需求,参与工具设计、开发、异常核对流程与 Windows 软件交付。
项目在 AI 辅助下完成迭代。这里展示实际参与的需求、业务判断、实现与验收,不把辅助生成等同于独立精通。
MY DECISIONS / 个人贡献与取舍
母亲所在液化气配送企业用微信群记录订单与完成回复。改变整套日常工作方式会增加操作负担,所以工具以本地导入截图为入口。我参与整理编号、配送人、瓶数和完成回复之间的规则,并在 AI 辅助下推进解析、核对界面和 Excel 交付。
OCR 得到文字和位置,不等于得到订单事实。简写编号需要结合消息内前缀,一条回复可能展开多个订单;昵称只是候选,无法确认身份时不能凭订单文字猜配送员。瓶数证据不一致、多人回复或缺号需要独立处理。
OrderBook.conflicts 分开收集人员与瓶数冲突;候选保留来源,confirm 先调用 validation,问题未处理不确认。操作流程是导入 → 识别/解析 → 逐项核对原图、补录或修改 → 处理冲突 → 确认 → 导出“配送明细”和“配送员汇总”。人工审核是正常步骤,不是软件出错后的临时补救。
本地软件已交付使用,并向实际使用者做过操作教学,这是本人提供的交付事实。它不等于安装器已在所有电脑上验收,也不等于 OCR 准确率经过测量。当前仍应使用授权样本检查漏单、冲突和导出,不宣传百分之百自动识别。
依据:matching.py:21–55;order_book.py:218–258,263–280;既有 message_rules、Excel 审计;交付与操作教学依据本轮本人提供说明。
04 / TECH STACK
05 / SYSTEM ARCHITECTURE
模型与文件处理在本地。ROI 用于布局筛选,OCR 仍读取整张输入图;原图定位是会话信息,不能当作永久证据附件库。
06 / CORE FEATURES
已实现
支持文件选择和拖放。长图分段并还原坐标,以重叠区归属避免重复框;不宣称自动去噪、手写专用识别或任意布局通用。
desktop_app.py:406–444 · ocr_tiling.py:9–37已实现
按已知明确前缀展开简写和连续区间;倒序、过大范围或语义不明确时留待核对,多单回复不把整句瓶数复制到每单。
message_rules.py:6–44已实现
人员候选取自完成回复,冲突分别记录处理状态。选择配送员不会消除瓶数冲突,新证据可触发重新确认。
order_book.py:236–245 · sender_evidence.py:15已实现
可对照关联消息原图、补录遗漏、改号和删除错误单。删除标记避免重新导入时复活;原图在重启后可能需要重新导入。
desktop_app.py:303–364,522–533 · order_book.py:185已实现
正式输出被缺号、未确认单、人员/瓶数冲突与待关联修正拦截。草稿保留待处理状态,汇总只计已确认送达记录。
order_export.py:35 · order_book.py:272–290已实现
实际工作表为“配送明细”和“配送员汇总”。明细按数字编号排序,汇总按瓶数排序,带筛选/冻结;保存后回读,按群和日期保留历史版本。
order_export.py:46–106 · report_archive.py:1207 / TECHNICAL CHALLENGES
难点不在于调用一次模型,而在于把有误差的文字、含糊的业务回复和可靠的最终统计衔接起来。
08 / SOLUTIONS
长截图会分段识别;零散文字也可能看起来像订单。
TiledOCR 还原原图坐标并划分重叠归属,随后结合浅色气泡轮廓与 OCR 框筛选消息,而不是见到数字就记单。
代码依据 ocr_tiling.py:TiledOCR · desktop_layout.py:detect_desktop_light
实现边界:仅支持已校准的电脑版浅色布局,不是训练出的通用聊天理解模型。
完成回复可能包含一个前缀和多个尾号,模糊横线又可能导致误解。
completion_orders 处理已知语法并展开区间;expand_messages 逐单生成记录,对多单数量保持保守,无法确定的内容进入 review。
代码依据 message_rules.py:completion_orders / expand_messages
同一订单可能有多个完成回复,选择一个人并不意味着瓶数也正确。
sender_reviewed 与 quantity_reviewed 分别控制冲突状态。conflicts 独立检查人员集合与数量集合,人工修改后仍按对应维度重新核验。
代码依据 order_book.py:conflicts · tests/test_conflict_workflow.py
仅检查识别到的订单无法发现所有遗漏;输出文件也可能不可写。
订单簿检查内部缺号,可由使用者指定首尾范围。OrderGate 阻止未处理问题进入正式报表,保存后回读核对表结构与汇总。
代码依据 order_book.py:issues · order_export.py:OrderGate / inspect_report
实现边界:默认只能发现已见编号范围内的缺号;不能推断当天完整业务总量。
SOURCE EXCERPT
这个函数体现了一个产品判断:处理了某一种冲突,不应自动抹去另一种冲突。
order_book.py:236–245 · OrderBook.conflicts def conflicts(self,row):
issues=[]
done=[e for e in row.evidence if e[0]=='delivered']
names={e[2] for e in done if e[2]};nicks={e[3] for e in done if e[3]}
if not row.sender_reviewed and (len(names)>1 or (len(nicks)>1 and not (all(e[2] for e in done) and len(names)==1))):
issues.append('配送员冲突:请查看完成回复并选择实际配送员')
quantities={e[1] for e in row.evidence if e[0] in ('original','delivered') and e[1] is not None}
if not row.quantity_reviewed and len(quantities)>1:
issues.append('瓶数冲突:请核对原始订单与完成回复的实际瓶数')
return issues来自已核验的本地源码节选;为便于阅读保留原有实现片段,不是完整可运行模块。
DEVELOPMENT PROCESS
按现有实现与版本资料整理阶段,不推断未经确认的具体开发日期。
围绕订单与完成回复,整理编号、人员、瓶数和来源证据,保留原有工作习惯。
将模型输出接到布局与消息解析,再让冲突、缺号、补录和修正进入可操作的核对流程。
完善正式导出门禁、两表格式、保存回读与历史版本,继续处理本地软件安装和使用门槛。
09 / TESTING & VALIDATION
仓库测试覆盖解析、布局、冲突流程和导出结构;涉及 OCR 的假模型测试验证规则与坐标,不等于真实识别准确率。
已知前缀的多单回复按规则展开;倒序、歧义内容不自动通过。
tests/test_business_messages.py确认人员后瓶数冲突仍在;新证据要求重新处理相应维度。
tests/test_conflict_workflow.py删除错误记录后再次导入不复活;人工修正优先,新增证据仍需重新确认。
tests/test_delete_history.py · tests/test_pending_preservation.py存在未处理问题时拦截正式导出;两表排序、筛选、冻结及汇总一致。
tests/test_order_export.py · tests/test_excel_polish.py备用路径保存并回读成功后才报告成功,失败保留可操作反馈。
tests/test_conflict_gui.py以上为业务项目源码中的验证设计与测试依据。本轮验证的是作品集网站,没有重新运行这些业务项目的完整测试,也没有对线上系统做操作。
10 / RESULTS
形成了本地 OCR、业务规则和人工核对结合的 Windows 工具,并交付实际使用者学习与试用。当前源码保留工作群隔离与历史报表;没有可公开的准确率、节省工时或跨机器全面验收结果。
11 / FUTURE IMPROVEMENTS
以下是后续改进方向,不是已完成能力。
PROJECT GALLERY

真实软件主界面展示截图导入、统计日期、订单核对状态、增改删与 Excel 出口。当前空表没有真实订单或客户信息;独立冲突核对界面和脱敏 Excel 成品尚未提供。
已展示使用者提供的真实界面。脱敏报表和更多业务场景待补充;不以空数据截图证明识别准确率、运营规模或完整验收。
单位通过微信群记录订单,配送人员在群中回复完成情况。每天几十到上百条订单的业务场景,需要整理编号、人员和瓶数。
原流程是翻阅群聊、人工匹配订单与回复,再统计明细。工具将截图识别与结构化核对串联起来,帮助使用者完成这项工作。
聊天截图包含昵称、时间分隔、气泡和多种编号写法。OCR 文本不能直接等同于准确业务记录。
结构化解析发现订单冲突、瓶数冲突和不确定内容后,交由使用者核对与修正;无法确定的编号、人员和瓶数不强行自动得出结论。
工具已交付使用,并向实际使用者完成操作教学。尚无经过测量的识别准确率或节省工时,不作量化效果承诺。
这个项目让我接触到 AI 识别、业务规则和人工校验如何协作,也让我开始关注本地软件的打包、文件组织和使用门槛。