- 01It started with “I remember seeing it, but I forgot what it said”
- 02How the system works
- 03Tweaks to the OCR step
- 04Classification rules
- 05Calendar example
- 06Adding to reminders and tasks, and why I add things twice on purpose
- 07Handouts often leave out the year
- 08What I noticed after trying it
- 09Who this is for
- 10Summary
Good morning. It’s まさきん.
Handouts from school are still mostly on paper. Event schedules, deadlines for things to hand in, items to bring. There are many kinds of information, and if you miss something by accident, it causes trouble later.
So I built a system that reads handouts with OCR and automatically sorts the contents into my calendar and my reminders. This time I’ll walk through it in detail, including real API call examples.
It started with “I remember seeing it, but I forgot what it said”
When you read a handout once, you feel like you’ve memorized it in that moment. A week later, though, the details are gone. Sometimes a handout stayed stuck on the fridge until the deadline had already passed.
“Seeing” something and “remembering to act on it” are two different things. So I decided to automate the part where what I’ve seen gets put into a system.
How the system works
It works in three stages:
- Scan the handout and convert it to text with OCR (it also handles two-column layouts)
- Classify the contents as either an “event” or a “to-do” (things to hand in, deadlines)
- Use APIs to add each item to the app that suits it best
Events go to the calendar, and to-dos go to reminders. The key point is that each type of item has its own home.
Tweaks to the OCR step
School handouts are often A4 with a two-column layout. If you run OCR on them as-is, text from the left and right columns can get mixed together partway through a line. So I first split the image into left and right halves, then pass each half to OCR separately.
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
This split alone made recognition much more accurate. If the results still show text from the two columns mixed together, I split the image into three parts instead of two, or I adjust where to cut based on where the headings are. I always check the OCR results against the original handout image, not just the text. OCR often breaks tables and ruled lines, and getting a date paired with the wrong day of the week can lead to serious mistakes on the calendar.
Classification rules
Here is how I tell events apart from to-dos.
| Type | Criteria | Where it goes | Color |
|---|---|---|---|
| Events (attendance required) | Dates when a parent needs to attend | Calendar | Red |
| Deadlines and payments | Due dates for things to hand in or money to pay | Calendar + reminders | Orange |
| Items to bring / preparation | Things to get ready by the day before | Reminders | None |
| Everyday items | Daily things like pencil cases and notebooks | Not added | - |
For items that are hard to classify, my general rule is that adding them to both is the safer choice. You can always delete something later if you don’t need it, but if you forget to add it, you’ll never notice.
In the end, this whole system runs on my phone. Both the calendar and reminder notifications come to my phone. Since it is the foundation the system stands on, it might be worth taking another look at your mobile plan too.
Clicking this opens the Rakuten login page. Once you log in, you’ll see the campaign details.
Calendar example
I add events using the Google Calendar API. For color coding I use the colorId parameter: red (colorId: "11") for events I must attend, and orange (colorId: "6") for deadlines.
title: "◯◯小: 運動会"
start.date: "2026-05-23"
end.date: "2026-05-24" # 全日イベントはendを翌日にする
description: "プリント該当箇所の要約"
colorId: "11" # 保護者参加が必要なので赤
colorId has to be passed as a string, not a number. If you pass it as a number, the API returns an error, so watch out for that. Events with a set time (like a parents’ meeting starting at 2 p.m.) are added with start and end times instead of as all-day events.
Before adding anything, I check whether an event with the same title on the same date already exists. The same event sometimes appears in both the grade newsletter and another handout, and if I skip this check, the same event gets added twice.
Adding to reminders and tasks, and why I add things twice on purpose
I add deadlines and items to bring to both my task management app and my reminders app, using the same title. It looks redundant, but I do it on purpose.
python3 things_bridge_client.py add \
--title "◯◯小: 書道セット注文 (4/17まで)" \
--when "2026-04-17" \
--tags "学校,子ども,お金" \
--notes "キャッシュレス決済。申込書のQRから。"
The task management app is good for managing things as a structured checklist. The reminders app, on the other hand, tends to catch my eye through voice assistants and standard notifications. The tools have different strengths, so I keep things in both on purpose.
If I add something to only one place, then on any day I don’t open that app, the information might as well not exist. Keeping it in two places lowers the risk of missing something. To avoid clutter from adding things twice, though, I always fetch the existing list before adding to reminders and check that nothing with the same name is already there.
リマインダーの既存一覧を確認する(重複防止)
→ 同名のリマインダーが無ければ、タスク管理アプリと同じタイトル・同じ期日で新規登録する
Keeping the titles exactly the same, word for word, also makes it easier to find and compare items in both apps later.
Handouts often leave out the year
School handouts almost always leave out the year, like “April 15 (Wed)”. I have to fill in the year based on the current school year. But when a handout given out in March says “April”, I always consider that it may mean April of the next school year.
Also, when I add the day of the week, I always calculate it from the date so it is filled in automatically. If you add the day of the week by hand or from memory, it is easy to get it wrong.
What I noticed after trying it
The biggest help is that “I saw it but forgot” no longer happens. Everything goes onto the calendar and reminders as soon as it is read, so all I have to do is follow the notifications.
That said, OCR is not perfectly accurate. Handouts with handwritten notes added can be especially hard to read. In those cases I don’t force them through the automation. I check them with my own eyes before adding them.
Who this is for
- People who tend to miss things in paper handouts from school
- People who use a calendar and a task manager for different purposes
- People interested in small automations using OCR and API integrations
Summary
I built a system that sorts handout contents into “events” and “to-dos” and automatically adds each to the right place. Just setting a few simple rules, like color coding, adding things twice, and checking for duplicates, has made handling this information much more organized.
How you bring paper information into a system may sound like a small thing, but I think it makes a big difference.
In the end, the notifications always come to my phone. The longer you use a system like this, the more your mobile connection matters. It might not hurt to check your mobile plan once, too.
Clicking this opens the Rakuten login page. Once you log in, you’ll see the campaign details.
This article contains affiliate advertising. If you sign up for a product or service through a link on this site, we may receive compensation from the partner company. The site operator is also an employee of Rakuten Group and may receive compensation through an employee referral program. The content and opinions here are based on the operator’s own experience and research regardless of any advertising relationship, but please read with the above in mind. See the Disclaimer & Affiliate Disclosure for details. Disclaimer & Affiliate Disclosure
This article includes machine-translated content. Please check the official Rakuten Mobile multilingual page for exact terms.
If you have concerns about Rakuten Mobile coverage or signal quality, you can consult through the official signal improvement request form .