Using AI

How I Use OCR to Automatically Add School Handouts to My Calendar and Reminders

How I Use OCR to Automatically Add School Handouts to My Calendar and Reminders

Photo: freestocks.org (CC0 1.0) via Flickr

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:

  1. Scan the handout and convert it to text with OCR (it also handles two-column layouts)
  2. Classify the contents as either an “event” or a “to-do” (things to hand in, deadlines)
  3. 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.

TypeCriteriaWhere it goesColor
Events (attendance required)Dates when a parent needs to attendCalendarRed
Deadlines and paymentsDue dates for things to hand in or money to payCalendar + remindersOrange
Items to bring / preparationThings to get ready by the day beforeRemindersNone
Everyday itemsDaily things like pencil cases and notebooksNot 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.

Try the fee simulator and get 100 points, no sign-up required Review your mobile plan as the foundation of your system

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

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.

Try the fee simulator and get 100 points, no sign-up required Review the mobile line that delivers your notifications

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 .

ABOUT THE AUTHOR
まさきん

Rakuten Group employee · Digital Marketer (holds a Financial Planner qualification)

In his early 40s, part of a dual-income household with four kids. Works as a digital marketer at Rakuten Group, while also using his Financial Planner (FP) qualification to focus on household finances and building assets.

View Profile

Related Articles

RELATED
Gemini (Google AI Pro) Family Sharing Covers Up to 5 Family Members: Setup Steps and Scope Using AI

Gemini (Google AI Pro) Family Sharing Covers Up to 5 Family Members: Setup Steps and Scope

Google AI Pro can be shared with up to 5 family members besides the manager. The Gemini app and storage are shared, while YouTube Premium Lite is for the manager only. Flow limits are shared across the family. I went through the official help to sort out the setup steps and how child accounts are handled.

2026.10.13 · 11 min read
3 Reasons Your AI Subscription Billing Date Does Not Match Your Budget: Claude Upgrades Change It Using AI

3 Reasons Your AI Subscription Billing Date Does Not Match Your Budget: Claude Upgrades Change It

If you upgrade Claude to Max mid-month, your billing cycle resets and that day becomes your new billing date. The yen conversion of dollar charges is set when the data reaches your card company, and statements and budgeting apps lag by a few days. Here are 5 steps to decide the month using the receipt email as your source of truth.

2026.10.13 · 12 min read
Turning Unprocessed freee Accounting Transactions into a Monthly Reconciliation Run: 7:30 on the 5th, 3 Categories, and a Cap of 15 Items Handed to a Human Using AI

Turning Unprocessed freee Accounting Transactions into a Monthly Reconciliation Run: 7:30 on the 5th, 3 Categories, and a Cap of 15 Items Handed to a Human

About 18 unprocessed transactions sat untouched in freee Accounting across 6 weekly checks. Here is my design for a reconciliation run on my home Mac at 7:30 a.m. on the 5th of each month, and where I drew the line: one monthly task for the items that can be confirmed, and one task each, capped at 15, for the ones that need a human decision.

2026.10.12 · 13 min read
Switch to Rakuten Mobile, get up to 14,000 points Try the fee simulator and get 100 points, no sign-up required →
Apply Now →