見出し画像

Pythonを使ってmedu4テキストを赤シート対応にする方法(Goodnotes5+赤シート)

はじめに

medu4のテキストを赤シートで暗記したい方へ


https://medu4.com/topics/bcc60304edより抜粋

Pythonでこの問題を解決しました。

実際の画像↓

赤色は見やすいが、暗記には不向き
赤シートで消える!

Goodnotes5には選択した文字の色を変換する機能がありますが、手動なので面倒です。そんな時はPythonを使いましょう!

・Python 3.9.13で動作確認済み
・Pythonの環境構築の方法は記事に含まれていません

Pythonに触れたことがない方はこれをきっかけに勉強してみてください。
おすすめ教材



手順(ソースコード含む)

1.goodnotesファイルをイメージとして書き出す

2.書き出したフォルダのパスを入力し、Pythonファイルに名前をつけて保存

import os
from tqdm import tqdm 
import cv2

#画像が入っているフォルダのパス
dir = "{ここにパスを入力}"

def detect_rectangle_and_change_color(img_path, height):
    # 画像を読み込む
    img = cv2.imread(img_path)
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    # 長方形を検出する
    ret, thresh = cv2.threshold(gray, 200, 255, 0)
    contours, _ = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

    for contour in contours:
        x, y, w, h = cv2.boundingRect(contour)
        if w > 100 and h > height - 10 and h < height + 10:  # 長方形のサイズをチェック
            roi = img[y:y+h, x:x+w]
            # 赤色の文字を薄いオレンジ色(#FFF1B6)に変更 
            mask = (roi[:, :, 2] >= 1.25 * roi[:, :, 1]) & (roi[:, :, 2] >= 1.25 * roi[:, :, 0]) 
            roi[mask] = [182, 241, 255]  

    # 画像を保存
    cv2.imwrite(img_path, img)

# 実行
pathes = os.listdir(dir)
for path in tqdm(pathes):
    detect_rectangle_and_change_color(os.path.join(dir, path), 80)

コードの説明
cv2で適切な大きさの長方形(穴埋め部分)を検出し、長方形内部の赤みがかったピクセルを自分が指定した色(ここでは#FFF1B6)に変換しています。


3.ターミナルでpython実行
pythonファイル名がred2orange.pyなら

python red2orange.py

4.フォルダ内のjpgファイルをまとめてpdf変換し、goodnotes5に新規書類として読み込む

5.完成。
赤シートが使えるようになります。

注意点

・iPadのNight Shiftがオンの場合は文字がうっすら見えるので、オフにしてみてください。

・自分の場合、2-3%の頻度で正しく変換されない箇所がありました。修正するのはやや面倒です。goodnotesから書き出す前に修正しておけば、ある程度ミスは防げます。
また、画像にした後は消しゴムではなく白ペンを使用してください。

以下、変換に失敗した例

長方形の辺上に他の線がある
途中で改行


変換ミスではないが、同じ色の蛍光ペンで見にくい


最後に

pythonの環境構築が面倒な方は、google colaboratory+Google driveマウントでできると思うので試してみてください。

何か分からないことがあれば、自分か周りの友達かChatGPTに相談してください。


この記事が気に入ったらサポートをしてみませんか?