2026年3月23日5 分鐘閱讀ai-first-projects

用 AI CLI 把手寫筆記數位化:照片變成結構化 Markdown

用 Claude Code 的 vision 功能,把手寫筆記本的照片變成可搜尋、有結構的 markdown 檔案。AI 不只做 OCR -- 它理解內容、整合旁註、用正確的標題、列表和 tags 組織一切。

DH
Danny Huang

那本什麼都記得、什麼都找不到的筆記本

她有三本上學期的筆記本。有機化學、分子生物學、歐洲史。在那六百頁裡的某個地方,有一張她十月上課時畫的圖 -- 一個反應機制,解釋了期末考必考的那個觀念。她記得自己畫過。她記得用的是綠色的筆。但她不記得是在第一本還是第三本,靠前面還是靠後面,左頁還是右頁。

她開始翻。一頁一頁。翻過寫在生物筆記空白處的購物清單。翻過一個沒有名字的電話號碼。翻過三頁被劃掉的論文大綱草稿。圖不在那裡。第二本也沒有。四十分鐘後,她在第三本裡找到了,夾在一張待辦清單和一隻貓的塗鴉之間。

這就是手寫筆記的根本矛盾。寫的動作幫助你學習。研究反覆證實這一點 -- 手寫會啟動比打字更深層的認知處理。但筆記本身在檢索時幾乎無用。筆記本沒有搜尋欄。沒有 tags。沒有 links。它是一種線性儲存媒介,活在一個需要隨機存取的世界裡。

如果你能保留手寫的學習效益,同時獲得數位的檢索能力呢?不是改用平板。不是把每個字重新打一遍。而是拍下你的筆記本,讓 AI 去讀 -- 不只是辨認字元,而是理解內容、把它重組成你可以搜尋的東西。

這篇文章就是在建這個。一套把整疊筆記本照片變成乾淨、結構化 markdown 檔案的流程。那種你真的能搜尋、能連結、能找到東西的檔案。

你會建出什麼

流程的形狀很簡單:

  1. 拍照。 手機相機。不需要特別的設備。
  2. 把照片餵給 Claude Code。 它用 vision 功能讀你的手寫字。
  3. AI 提取並組織內容。 不是扁平的逐字轉錄,而是有標題、列表、tags、旁註整合的結構化 markdown。
  4. 你得到可搜尋的檔案。 按主題分一個、按堂課分一個,你想怎麼切就怎麼切。

跟傳統 OCR 的關鍵差異:Claude 不只是把歪歪扭扭的筆跡轉成字元。它像人類一樣讀頁面。主要段落旁邊有箭頭指向空白處的旁註?AI 理解那個旁註是對段落的補充,會自然地整合進去。一個清單有些項目被圈起來、有些被劃掉?AI 辨識哪些是被強調的、哪些是被刪除的,只輸出相關的內容。一頁開頭是化學筆記、結尾是「記得買牛奶」的提醒?AI 把化學內容和購物備忘分開,各自歸檔到該去的地方。

這不是 OCR。這是閱讀理解。

前置需求

  • Claude Code 已安裝並認證。還沒裝的話,跟著第一個小時教學走,十分鐘搞定。
  • 一支有相機的手機。 近十年內的任何手機都行。
  • 你想數位化的手寫筆記。 筆記本、散頁、便利貼、索引卡、餐巾紙 -- 任何上面有字的東西。
  • 基本 terminal 操作能力。 你會輸入指令。不需要寫程式。

第一步:拍你的筆記

輸出品質取決於輸入品質。不是美學品質 -- 是可讀性品質。幾個原則:

光線比相機畫質重要。 在日光下或明亮的檯燈下拍。避免陰影落在頁面上。AI 讀錯手寫的頭號原因是陰影遮住筆畫,不是相機解析度。

把頁面壓平。 捲起來、字消失在裝訂線裡的筆記本頁面,不管是人還是 AI 都很難讀。把筆記本壓平。用書鎮或第二支手機。

一頁一張照片。 不要試圖拍跨頁。每頁的解析度會降低,而且靠近裝訂線的字會變形。一張照片,一頁。

從正上方拍。 角度變形會讓字母變得模糊。一個 30 度角拍的 a 看起來可能像 o。手機直接放在頁面正上方。

把照片整理到一個資料夾:

mkdir -p ~/handwritten-notes/photos
# 把手機裡的照片傳到這個資料夾
# 用 AirDrop、USB、雲端同步 -- 怎麼方便怎麼來

盡可能按順序命名。大部分手機會在照片加上時間戳,這會保留順序。如果你在拍多本筆記本,用子資料夾:

~/handwritten-notes/photos/
  orgchem-notebook/
    IMG_0401.jpg
    IMG_0402.jpg
    IMG_0403.jpg
    ...(80 頁)
  biology-notebook/
    IMG_0501.jpg
    IMG_0502.jpg
    ...(120 頁)
  history-notebook/
    IMG_0601.jpg
    IMG_0602.jpg
    ...(90 頁)

第二步:設定指示

在你的工作目錄建立一個 CLAUDE.md。這會告訴 AI 你要的輸出結構:

# Handwritten Note Digitization Rules

## Goal

Read photos of handwritten notebook pages. For each page, extract the
content, understand its structure, and output clean structured markdown.

## Input

Photos are in ~/handwritten-notes/photos/, organized by notebook.

## Output

Write organized markdown files to ~/handwritten-notes/output/.

## Reading Rules

1. READ the handwriting carefully. If a word is unclear, use surrounding
   context to infer it. Mark truly illegible words as [illegible].
2. UNDERSTAND the structure of the page. Identify:
   - Main content vs. margin notes
   - Headings vs. body text
   - Lists (numbered or bulleted)
   - Diagrams (describe them in words)
   - Crossed-out text (skip it unless it seems intentional)
   - Circled or highlighted items (mark as emphasized)
   - Arrows connecting ideas (integrate the connection in the output)
3. SEPARATE unrelated content on the same page. Chemistry notes and a
   grocery list on the same page become two different entries.
4. INTEGRATE margin notes into the main content where they belong.
   A margin note next to a paragraph is a comment on that paragraph --
   include it as a parenthetical or a blockquote, not as a separate section.

## Output Format

For each notebook, create markdown files organized by topic or lecture:

  ~/handwritten-notes/output/{notebook-name}/{topic}.md

Each file must include:

### Frontmatter
---
title: "Descriptive Topic Title"
date: YYYY-MM-DD (estimated from context, or "unknown")
source: notebook name and page numbers
tags:
  - subject-tag
  - topic-tag
---

### Content
- Clear headings (H1 for the topic, H2 for subtopics)
- Clean formatted text with proper markdown
- Lists preserved as markdown lists
- Diagrams described in blockquotes: > **Diagram:** description
- Key terms in **bold**
- Formulas in inline code or code blocks
- Margin notes as blockquotes: > **Note:** content

### Cross-References
- If content on one page references content on another, add links
  between the output files: [See Topic Name](./topic-name.md)

## Quality Rules

- Never invent content that is not on the page.
- Preserve the author's meaning, even if the grammar is rough.
- Clean up obvious abbreviations: "w/" becomes "with", "bc" becomes
  "because", "govt" becomes "government" -- unless the abbreviation
  is a standard term in the field.
- Keep technical notation exact. Do not expand chemical formulas or
  mathematical symbols.

## Index

Generate ~/handwritten-notes/output/INDEX.md listing:
- Every notebook processed
- Every topic file created, with page number references
- A tag cloud showing the most frequent topics

這是整個操作的大腦。按照你的思考方式調整輸出格式。學生可能想按堂課分檔。研究者可能想按實驗分檔。正在數位化食譜筆記本的人可能想按菜餚分檔。

第三步:跑數位化

cd ~/handwritten-notes
claude

在 Claude Code 的 prompt 裡輸入:

Read CLAUDE.md for instructions. Then process all photos in photos/orgchem-notebook/.
For each page, read the handwriting, extract the content, and write
structured markdown files to output/orgchem-notebook/.
Show me the first 3 pages as a preview before processing the rest.

預覽步驟很重要。它讓你在 AI 處理 80 頁之前先校準。你可能會發現你的縮寫需要不同的展開規則,或者 AI 把你的 t 讀成了 l。趁早修正指示。

單頁的預覽輸出可能長這樣:

## 第 1 頁(IMG_0401.jpg)- 預覽

**偵測到的內容:** 親核取代反應的上課筆記
**結構:** 標題、三個小節、兩張圖、右側空白處旁註

**建議輸出:**

```markdown
---
title: "親核取代反應:SN1 vs SN2"
date: 2025-09-15
source: orgchem-notebook, page 1
tags:
  - organic-chemistry
  - reaction-mechanisms
  - substitution
---

# 親核取代反應:SN1 vs SN2

## SN2 機制

- 單一協同步驟
- 親核劑從**背側進攻**
- Rate = k[substrate][nucleophile]
- 立體化學反轉

> **圖示:** Newman 投影式,親核劑從碳上離去基的背面
> 靠近。箭頭同時顯示鍵的形成(Nu-C)和鍵的斷裂(C-LG)。

> **旁註:** 「這個金教授每次都考。注意立體化學的翻轉。」

## SN1 機制

- 兩步驟:先離子化,再親核進攻
- Rate = k[substrate](一級反應 -- 親核劑不在速率方程式裡)
- 形成碳陽離子中間體
- 立體中心產生消旋化(兩面都會被進攻)

> **圖示:** 能量圖,兩個過渡態之間有一個碳陽離子
> 中間體的谷。第一步(離子化)的 E_a 比第二步高。

## 什麼時候走哪條路

| 因素 | 有利 SN2 | 有利 SN1 |
|------|----------|----------|
| 受質 | 一級、甲基 | 三級 |
| 親核劑 | 強 | 弱(或溶劑) |
| 溶劑 | 極性非質子性 | 極性質子性 |
| 離去基 | 兩者都要好的 LG | 兩者都要好的 LG |

[參見消除反應](./elimination-reactions.md)了解
競爭的 E1/E2 路徑。
```

看看發生了什麼。一張有箭頭、圈起來的術語、空白處的潦草字跡、兩張圖的手寫頁面,變成了一份乾淨、結構化的文件。關於金教授考試偏好的旁註被保留為上下文,就放在相關內容旁邊。圖示的描述夠詳細,讀書時有用。比較表在筆記本裡可能不是表格 -- 很可能是散落的要點 -- 但 AI 理解了底層的比較關係,把它結構化成了表格。

如果預覽看起來沒問題:

This looks correct. Process all remaining pages in orgchem-notebook/.

第四步:處理棘手的情況

不是每一頁都是整齊的上課筆記。筆記本是混亂的。AI 是這樣處理真實世界的混亂的。

內容混雜的頁面

一頁裡可能上面是生物上課筆記、中間是提醒自己寄 email 給指導教授、下面是一個分子的塗鴉。AI 會分開這些。上課筆記進生物檔案。提醒進 misc/tasks.md 或直接跳過,取決於你的指示。

很爛的字

每個人都覺得自己的字最爛。通常沒有那麼爛。Claude 的 vision 功能能處理大部分手寫風格,包括草寫、草寫印刷混合體、和教授講太快時出現的壓縮潦草字。真的讀不出來時,它標 [illegible] 然後繼續。你可以之後在輸出檔裡搜尋 [illegible],靠著周圍已經清理好的上下文,用記憶填補空缺。

圖表和繪圖

流程圖。電路圖。神經系統的地圖。AI 不能把它們重建成圖片,但它可以用文字描述得夠精確,讓描述本身對讀書有用。一張反應機制的圖變成一段逐步的文字描述。一張流程圖變成一個巢狀列表。如果你需要原始圖片,輸出檔會引用原始照片的路徑。

多語言筆記

如果你在筆記裡切換英文和另一種語言 -- 雙語學生的常見模式 -- AI 兩種都能處理。它會保留原本的語言而不翻譯,除非你另外指示。

第五步:批次處理所有筆記本

用一本筆記本校準好之後,處理剩下的:

Now process photos/biology-notebook/ and photos/history-notebook/
using the same rules. Output to their respective directories.

大批量處理 -- 比如三本筆記本共 300 頁 -- 需要時間。Claude Code 會逐頁處理,讀取每張圖片、寫入每個輸出檔。你可以看著進度跑,也可以去做別的事。輸出以檔案的形式累積在你的資料夾裡,所以你可以在後面的頁面還在處理時,先開始讀前面的成果。

所有筆記本處理完後,產生主索引:

Generate INDEX.md as specified in CLAUDE.md.
Include a summary of what was processed and a tag cloud.

索引變成你的入口。每個主題、每堂課、每本筆記本 -- 從一個檔案就能搜尋。

第六步:讓它可搜尋

你的輸出資料夾現在充滿了結構化的 markdown 檔。重點來了。

找到那張化學圖:

cd ~/handwritten-notes/output
grep -r "reaction mechanism" --include="*.md" -l

三個結果,0.2 秒。你花了 40 分鐘翻找的那張圖在 orgchem-notebook/nucleophilic-substitution.md,第 34 行。

找特定主題的所有東西:

grep -r "mitochondria" --include="*.md" -l

它出現在你的生物筆記、你的歷史筆記(一段關於細胞生物學史的內容裡)、而且意外地出現在你的化學筆記裡,教授提到 ATP 合成的地方。三條你翻頁永遠不會發現的連結。

用任何 markdown 工具打開。 輸出檔在 Obsidian、VS Code、Notion(匯入 markdown)、Bear、或任何文字編輯器都能用。它們就是檔案。沒有 lock-in。

想更進一步?散落筆記整理指南教你怎麼把這些 markdown 檔整理進一個有 wikilinks、tags 和知識圖的 Obsidian vault。

持續數位化的腳本

你會繼續寫手寫筆記。新的筆記本會填滿。這個腳本可以增量處理新照片:

#!/usr/bin/env bash
set -euo pipefail

PHOTOS_DIR="${1:?Usage: digitize-notes.sh <photos-directory>}"
OUTPUT_DIR="${2:-$(dirname "$PHOTOS_DIR")/output}"
PROCESSED_LOG="$OUTPUT_DIR/.processed-photos.txt"

mkdir -p "$OUTPUT_DIR"
touch "$PROCESSED_LOG"

# 找出還沒處理的照片
NEW_PHOTOS=$(comm -23 \
  <(find "$PHOTOS_DIR" -type f \( -name "*.jpg" -o -name "*.jpeg" -o -name "*.png" -o -name "*.heic" \) | sort) \
  <(sort "$PROCESSED_LOG"))

NEW_COUNT=$(echo "$NEW_PHOTOS" | grep -c '.' || true)

if [[ "$NEW_COUNT" -eq 0 ]]; then
  echo "No new photos to process."
  exit 0
fi

echo "Found $NEW_COUNT new photos to digitize."

claude -p "You are a handwritten note digitizer.
Read the CLAUDE.md in $(dirname "$PHOTOS_DIR") for rules.

These are NEW photos to process:
$NEW_PHOTOS

Read the handwriting in each photo, extract and structure the content,
and write organized markdown to $OUTPUT_DIR/.
Append new entries to existing topic files where relevant.
Update INDEX.md with new entries.

After processing, list each file you processed (one per line, full path)."

echo "$NEW_PHOTOS" >> "$PROCESSED_LOG"
echo "Done. $NEW_COUNT pages digitized to $OUTPUT_DIR."

每次拍了新頁面就跑。每次只處理新的。

到底改變了什麼

之前:三本筆記本,六百頁手寫筆記。線性、不可搜尋的存檔。要找任何東西都得一頁一頁翻。你寫下來的知識被鎖在一個無法搜尋、無法連結、無法查詢的媒介裡。

之後:一個資料夾裡的結構化 markdown 檔。每堂課、每個主題、每則旁註 -- 不到一秒就能搜到。圖示用文字描述。空白處的潦草字被整合進它們所註解的內容。跨筆記本的交叉引用連結了相關主題。一份索引映射了你一整個學期的筆記。

手寫在上課時完成了它的任務 -- 它幫你把知識編碼進大腦。AI 完成了手寫做不到的任務 -- 它讓那些知識變得可檢索。你保留了筆。你獲得了搜尋欄。

筆記本還在那裡。照片還在那裡。什麼都沒有丟失或被取代。你只是為同一份知識建了第二個介面 -- 一個能在 0.2 秒而不是 40 分鐘內回答「我在哪裡寫過反應機制?」這個問題的介面。

想開始用 Claude Code,請看第一個小時教學。想把數位化的手寫筆記跟其他數位筆記一起整理,請看完整筆記整理指南

DH
Free Download

Ready to streamline your terminal workflow?

Multi-terminal drag-and-drop layout, workspace Git sync, built-in AI integration, AST code analysis — all in one app.

Download Termdock →
#ai-cli#claude-code#handwriting#ocr#markdown#note-taking#vision#productivity

相關文章