文字轉手寫筆記 是做什麼的?
您將內容轉換為看起來像手寫的頁面。渲染器是 scripts/handnotes.py。它只需要 Python 的 Pillow 和 numpy,這些在 ChatGPT 和 Claude 的程式碼沙盒中都已預先安裝。
預設結果: 方格紙筆記本頁面的手機照片,藍色墨水,使用預設手寫字跡。如果使用者沒有特別要求,就給他們這個。
步驟 0:誰的字跡?
簡短詢問一次:「請盡量多傳幾張您手寫的照片給我(任何您已經寫過的頁面:筆記、作業)。否則我會使用預設手寫字跡。」
- 沒有照片: 使用預設手寫字跡。不要再問。
- 有照片: 先學習它們(請參閱下方「從照片學習手寫字跡」),然後使用
--hand their-hand進行渲染。更多頁面能為每個字母提供更多樣本,效果更自然。3 到 6 頁就很好。
步驟 1:讀取輸入
- PDF: 使用 pypdf、pdftotext 或您自己的閱讀器提取文字。對於掃描的 PDF,請檢視頁面圖片。
- 照片、螢幕截圖、白板: 使用視覺能力自行閱讀。不要執行 OCR 函式庫。
- 文字、解答、網頁: 直接使用提供的內容。
步驟 2:撰寫頁面
有兩種情況。
- 課程筆記: 寫出好學生會寫的內容。簡短的行、關鍵字、原始內容的結構,長度約為原始內容的 15% 到 30%。
- 使用者提供的解答或作業: 保留每個步驟和每個數字。用學生在紙上寫的方式來寫:使用
1/、a)和b)標籤,每個方程式一行,步驟之間用=>。不要添加看起來像 AI 的裝飾:沒有「提示:」、沒有到處都是的螢光筆、沒有粗體。只有在使用者會這樣做時,才在最終結果下劃線或加上!!。
保留使用者的語言。數字、名稱和公式必須完全準確。
標記語言:
# 標題 ## 標題 ### 子標題(加底線)
- 項目符號(2 個空格 = 一層縮排) 1. 編號
-> 箭頭行 !! 重要行(紅色) > 旁註(強調墨水)
[ ] 待辦事項 [x] 已完成(打勾) --- 分隔線 空白行 = 跳過一行
行內:==螢光== **粗體** __底線__ ~~刪除線~~ {red}彩色墨水{/} -> (繪製箭頭)
\$ = 錢字符號 $...$ 行內數學 $$...$$ 獨佔一行 = 顯示公式
數學。 每個公式都放在 $...$ 中,即使是像 $x^2$ 或 $E_2$ 這樣的短公式。支援:
\frac{a}{b}、\sum_{k=1}^{n}、\prod、\int_a^b、\lim_{n \to +\infty}、\sqrt{x}、\sqrt[3]{x}、x^{n+1}、x_i、\left( ... \right)、\binom{n}{k}、\vec{u}、\bar{x}、\mathbb{R}、\text{...}、\mid、希臘字母、\in \subset \cup \cap \emptyset \forall \exists \leq \geq \neq \approx \pm \times \cdot \infty \to \implies \iff,以及空格 \, \; \quad。
依照原始來源撰寫小數(0,81 或 0.81),較大的數字在數學環境內寫成 50\,000。按照閱讀方式撰寫區間:$[0, 1[$。將大型公式放在自己的 $$...$$ 行中。如果公式太寬無法容納在頁面上,它會縮小以適應,但將長公式在 = 處分成兩行看起來更自然。
將頁面儲存為 notes.md。
步驟 3:渲染
python scripts/handnotes.py render notes.md -o notes.pdf
這會產生預設結果:筆記本照片、方格紙、藍色墨水、預設手寫字跡。僅在使用者要求時才更改下列選項:
| 選項 | 值 |
|---|---|
--style | notebook(真實頁面的手機照片:不均勻光線、向下傾斜的線條、傾斜的紙張、原子筆墨水)· ipad(獨立引擎:字母以實心重新描繪,在乾淨頁面上的平滑 Apple Pencil 筆觸) |
--paper | squared(筆記本)或 grid(iPad)、lines、college、seyes、dots、blank |
--hand | default,或由 build-hand 或 learn 建立的資料夾 |
--font | 改用手寫字型:caveat、kalam、patrick、gochi、indie、playpen |
--ink | blue(筆記本)或 black(iPad)、red、green、purple、pencil |
--page | a4、letter、ipad、ipad-landscape |
--seed N | 每次產生相同的頁面;更改 N 以獲得不同的版本 |
使用 -o notes.png 來取得圖片(notes-1.png、notes-2.png,以此類推)而不是 PDF。
步驟 4:檢查,然後交付
查看第 1 頁(如果您無法檢視 PDF,請渲染成 PNG)。確認沒有行跑出頁面或與其他行重疊,並且每個數字都與原始來源相符。然後提供檔案。
從照片學習手寫字跡
這個功能適用於任何人已經寫好的頁面。他們不需要填寫任何東西。
-
切割:
python scripts/handnotes.py segment p1.jpg p2.jpg p3.jpg -o hand-work這會移除筆記本的印刷線條,切割每一塊墨水,並將編號的圖紙寫入hand-work/sheet-pageN-K.png。 -
標籤: 查看每一張圖紙。您知道這些頁面寫了什麼,因為您可以閱讀原始照片。撰寫
hand-work/labels.json(頁碼依照片順序排列):{"1": {"12": "a", "13": "(", "40": "the", "41": "7"}, "2": {"5": "é", "9": "dy"}}- 只標記您確定的片段。跳過任何不清楚、被切一半、與相鄰片段黏在一起、被劃掉或只是線條片段的部分。
- 一個包含幾個連在一起字母的片段可以標記為那個單字或組合("the"、"le"、"qu")。每當該序列出現時就會重複使用它,這看起來非常自然。
- 目標是每個小寫字母和每個數字至少要有 2 或 3 個樣本。
-
建構:
python scripts/handnotes.py build-hand hand-work hand-work/labels.json -o their-hand這會標準化大小和墨水強度,丟棄切割不佳的樣本,並從書寫者自己的筆畫中建構缺少的字母(從 n 得到 u,從兩個 n 得到 m,從兩個 v 得到 w、r、q)。重音符號(é è à ê ç ë)會繪製在其各自的普通字母上。它會印出字型仍然代用的字母。 -
檢查一次渲染。 查看一個頁面並放大任何看起來破碎或太淡的字母。在
their-hand/hand.json列出的their-hand/glyphs檔案中找到它的樣本,移除錯誤的標籤,然後重新建構。
保留 their-hand 資料夾:這是他們的手寫字跡。提供將它壓縮成 zip 檔案的選項,以便他們下次可以重複使用。
還有一個範本路線(template,然後 learn):使用者填寫一個 2 頁的方格框格。這種方式更乾淨,但對他們來說工作量更大,所以只在他們比較喜歡時才提供。