早上好,我是まさきん。
学校发的讲义,现在依然以纸质为主。活动日程、提交物的截止日期、要带的东西。信息种类很多,一不留神漏看的话,之后会很麻烦。
于是我做了一个机制,用OCR读取讲义,按内容自动分类,分别登记到日历和提醒事项里。这次连API调用的实际例子都会具体介绍。
起因是「明明看过却记不住内容」
讲义看过一遍,当时会觉得自己已经记住了。但一周之后,内容就忘得差不多了。也发生过贴在冰箱上,结果截止日期都过了的情况。
「看过」和「不忘记地执行」是两件不同的事。所以我决定把「把看过的内容落实到机制里」这部分自动化。
机制的流程
做的事情分为以下3个阶段。
- 扫描讲义,用OCR转换成文字数据,也支持双栏排版
- 把内容分类成「活动」或「要做的事」,也就是提交物、截止日期
- 把分类结果分别通过API自动登记到合适的App里
活动登记到日历,要做的事登记到提醒事项。按角色分开存放位置,是这里的关键。
OCR部分的技巧
学校的讲义大多是A4双栏排版,如果直接拿去OCR,有时候左右两栏的文字会在行的中间混在一起。所以我会先把图片左右切成两半,再分别交给OCR处理。
from PIL import Image
def split_two_columns(image_path):
img = Image.open(image_path)
width, height = img.size
left = img.crop((0, 0, width // 2, height))
right = img.crop((width // 2, 0, width, height))
return left, right
光是这样切分,识别精度就有了明显改善。如果看了识别结果,发现左右文字还是混在一起,我会考虑不切成两栏而是三栏,或者以标题的位置为线索调整切分范围。识别结果不只看文字数据,我一定会跟原始讲义图片对照确认。因为表格和格线在OCR时容易变形,尤其是日期和星期的组合一旦弄错,登记到日历上会造成致命的失误。
分类规则
我把区分「活动」和「要做的事」的标准,整理成以下这样。
| 类型 | 判断标准 | 登记位置 | 颜色标记 |
|---|---|---|---|
| 活动,需要参加 | 需要家长参加的日程 | 日历 | 红色 |
| 截止日期、缴费 | 提交物或收款的期限 | 日历加提醒事项 | 橙色 |
| 要带的东西、准备 | 前一天之前需要准备的物品 | 提醒事项 | 无 |
| 每日携带物品 | 笔盒、笔记本等日常用品 | 不登记 | - |
判断不清的项目,原则上我倾向于「两边都登记比较保险」。之后不需要的话可以删掉,但漏登记的话就会在完全没意识到的情况下过去。
这个机制说到底是在手机上运行的。日历也好,提醒事项也好,通知最终都会送到我的手机上。作为支撑这个机制的基础,资费方案或许也值得重新审视一下。
日历登记的实际例子
活动我是用Google日历的API登记的。颜色标记用到了一个叫colorId的参数,需要家长参加的活动指定为红色,也就是colorId: "11",截止日期类指定为橙色,也就是colorId: "6"。
title: "◯◯小学:运动会"
start.date: "2026-05-23"
end.date: "2026-05-24" # 全天事件的end要设为第二天
description: "讲义相关部分的摘要"
colorId: "11" # 需要家长参加,所以是红色
colorId需要以字符串的形式传递,而不是数值,如果传成数值类型会导致API报错,这一点需要注意。时间明确的活动,比如家长会14点开始,我不会登记成全天事件,而是指定具体的开始和结束时间。
登记之前,我会先确认是否已经存在相同标题、相同日期的事件。因为年级通讯和其他发放物上有时会写到同一个活动,如果省略确认步骤,同一个日程就会被重复登记。
登记到提醒事项、任务,以及有意为之的双重登记
截止日期和要带的东西,我会用相同的标题,同时登记到任务管理App和提醒事项App这两处。看起来有点多余,但这是特意这样做的。
python3 things_bridge_client.py add \
--title "◯◯小学:订购书法用具套装(截止4/17)" \
--when "2026-04-17" \
--tags "学校,孩子,金钱" \
--notes "无现金支付。扫申请单上的QR码。"
任务管理App适合以清单的形式结构化管理。而提醒事项App有个特点,就是通过语音助手或系统标准通知,更容易不经意间被看到。两个工具擅长的领域不一样,所以我特意让它们重复。
如果同样的内容只登记在一处,那天没打开那个App的话,信息就等于不存在。让它们双重存在,可以降低漏看的风险。不过,为了避免双重登记带来的噪音,登记到提醒事项之前,我一定会先获取现有的清单,确认是否已经有同名的项目。
先确认提醒事项的现有清单(防止重复)
→ 如果没有同名的提醒事项,再用与任务管理App相同的标题、相同的期限新建登记
把标题一字不差地对齐,之后想把两边拿来对照确认时,也更容易查找。
日期省略年份的问题
学校的讲义大多像「4月15日(星期三)」这样,省略了年份。需要从当前学年补上年份,但如果是3月发的讲义上写着「4月」,就一定要考虑它指的可能是下一学年的4月。
另外,如果要处理补充星期信息的部分,我一定会用日期机械地计算出星期,而不是靠人工或记忆去套。因为靠人工或记忆去套星期,很容易出错。
尝试后的感受
最省心的一点,是「看过却忘记」的情况消失了。因为在读取的那一刻就已经反映到日历和提醒事项里,剩下的只需要跟着通知走就行。
不过,OCR的精度并不是完美的。尤其是带手写补充说明的讲义,有时候不太容易识别。这种情况下,我不会强行走自动化流程,而是先用自己的眼睛确认过再登记。
适合这样的人
- 容易漏看学校发的纸质讲义的人
- 把日历和任务管理分开使用的人
- 对用OCR和API对接做一点小自动化感兴趣的人
总结
我做了一个机制,把讲义内容分类成「活动」和「要做的事」,分别自动登记到合适的位置。颜色标记、双重登记、防重复检查,这些不起眼的规则只要事先定好,信息的处理就会变得相当有条理。
如何把纸质信息纳入机制,虽然不起眼,但我觉得是效果很大的一个小技巧。
说到底,接收通知的终究都是我的手机。机制用得越久,通信环境的重要性也会越高。资费方案偶尔检查一下,或许也不是坏事。
本文包含联盟营销广告。如果您通过本站链接申请相关商品或服务,我们可能会从合作企业获得报酬。此外,运营者是乐天集团的员工,也可能通过员工推荐计划获得报酬。文章内容与评价均基于运营者的真实体验与调查完成,与是否存在广告无关,但请您在阅读前了解上述关系。详情请参阅免责声明与联盟营销说明。 免责声明与联盟营销说明
本文包含机器翻译内容。正式条件请以乐天移动官方网站的多语言页面为准。
如果您对乐天移动的通信区域·信号状况有疑问,可以通过官方的 电波改善调查申请表 进行咨询。