英文課文 CD 找不到,我用鏡頭和 AI 做了一台朗讀機

小朋友要聽英文課文錄音來練習,CD 卻找不到。我在舊筆電夾上一顆鏡頭,寫了兩支小程式:一支拍課文,一支用離線的自然人聲慢慢念出來,AI 看照片、決定念什麼、念幾遍。這篇記下它怎麼運作、和其他辦法比起來差在哪、做不到什麼,程式全文也放在文末,可以直接拿去用。個人使用心得分享。

讀書百遍,而義自見。
—— 董遇語,見《三國志・魏書》裴松之注引《魏略》(三國,約 3 世紀)
2026 年 10 月 3 日晚上將近十二點,我在舊筆電上夾了一顆網路攝影機,和 AI 一起寫了兩支加起來不到二十行的小程式,讓 AI 透過鏡頭看小朋友攤開的英文練習卷和讀本,再用一個不必連網的自然男聲,放慢速度把每一頁念十遍。起因只是一張找不到的課文 CD。它能補上「有人示範正確發音」這件事,但前提是課本印刷清楚、讀的是英文;它不會幫小朋友糾正發音,念錯的地方還是要大人聽。
事情是這樣開始的
小朋友的英文老師要他們聽課文錄音,跟著念熟,再錄自己的版本交回去。問題是附在書裡的 CD 不知道收到哪裡去了,翻遍抽屜也找不到,偏偏隔天就要用。
剛好前一天,我才把一台裝著 Windows 7 的老筆電重新裝成 Linux(過程寫在〈把家裡的舊電腦重生成 AI 伺服器〉),上面已經有 Claude Code,一個能在電腦裡自己執行指令的 AI 助手。我手邊還有一顆夾式的網路攝影機。於是想法很直接:既然 AI 看得懂照片,那讓它看課本,再找個好聽的聲音念出來,不就是一台朗讀機了嗎?
它怎麼運作
整個流程分三步,像請一位家教坐在旁邊:
- 拍照:鏡頭夾在螢幕上方往下看,書攤在鍵盤前面。我們說一句「翻頁了,拍照念吧」,AI 就執行拍照程式,拍下一張課文照片。
- 看懂:AI 打開照片,把英文一句一句讀出來,同時把文字列在螢幕上。哪一塊拍糊了,它會直接說是哪一塊。
- 念出來:AI 把文字交給朗讀程式,用一個叫 ryan 的美式男聲念。速度預設放慢三成多,每句之間停半秒多,剛好夠小朋友在心裡跟一遍。

那天晚上先念的是一張文法練習卷,十題附加問句(She is collecting stickers, isn’t she? 這種),空格的地方它念成 blank。接著換成一本講古埃及的讀本,翻到法老 Amenhotep 改變畫風的那兩頁。我跟 AI 說「再念十次」,它就在背景用慢速連念十遍、每遍中間停兩秒,前後大約十分鐘;念的同時我還能繼續跟它講話,做別的事。
這一個小時裡實際撞到的事
第一張照片什麼都沒拍到。 我說「拍照念吧」,它拍回來的是鍵盤和我的手。鏡頭夾在螢幕上方,視角比想像中窄,紙要拿到鏡頭正前方二、三十公分、光線亮一點才拍得清楚。後來我們乾脆把書攤在鍵盤前、讓鏡頭往下看。
第一版的聲音太難聽,被我退貨。 電腦裡原本沒有任何朗讀程式,AI 先裝了 espeak-ng,這是 Linux 上最常見的一套,裝起來最快。結果一念出來,平板、生硬,像老電影裡的機器人。我直接跟它說:「你的語音真的太爛了,找找看有沒有聽起來比較自然的。」它改裝 Piper,一個開源、完全在自己電腦上跑的語音引擎,聲音是用真人錄音訓練出來的。它下載了三種美式聲音,用同一句練習卷的句子各念一次讓我比,我選了 ryan 這個男聲。聽完我又嫌太快,它把速度從 1.0 調成 1.35、每句之間多停 0.6 秒,這兩個數字後來就成了預設值。
同一台電腦上的另一個 AI 說它「開不了鏡頭」。 我在旁邊同時開著 Gemini 的對話工具,問它能不能看鏡頭,它回答這個對話介面不支援視訊,請我用手機拍照傳給它。它說的沒錯,但問題不在 AI 看不看得懂,而在它手上有沒有「拍一張照」這個動作。只要給它一支會拍照、會把照片存成檔案的小程式,再告訴它照片在哪裡,看照片它本來就會。我把這段說明寫成一個 AGENTS.md 檔案,Claude、Codex、Gemini 這類工具都會讀它。
網路攝影機拍出來的字是左右顛倒的。 很多鏡頭為了讓你視訊時像照鏡子,預設把畫面左右翻過來。人臉看不出差別,課文就變成鏡像字。
拍照程式裡多了一個翻轉的步驟,就是在處理這件事。另外鏡頭剛打開時亮度還沒調好,前幾格畫面會偏暗,所以程式等到第二十格才存檔。
想省額度改叫 Codex 來念,卡在安全設計。 我想讓比較便宜的 Codex 接手朗讀,試了才發現它預設把指令關在一個隔離環境裡跑,連暫存資料夾都不能寫,所以朗讀程式改成不存檔、直接把聲音送到喇叭。但隔離環境裡還是摸不到攝影機。
要讓 Codex 用這套程式,得讓它在隔離環境外面執行;Claude Code 也不肯替我啟動一個拿掉防護的 Codex,這一步只能自己在終端機打。我覺得這樣擋是對的,只是要知道有這道門。
老筆電念得動,而且不必連網。 Piper 在這台十年前的 HP 筆電上跑得很順,念一頁不用等。整個過程聲音都在自己電腦裡產生,小朋友的課本內容不會被傳到任何地方。
和其他辦法比一比
| 辦法 | 發音是否正確 | 能放慢、能重複 | 要不要連網 | 缺點 |
|---|---|---|---|---|
| 原本的課文 CD | 最標準,老師要的就是這個 | 要自己倒帶 | 不用 | 找不到就沒轍 |
| 上網找出版社音檔 | 跟 CD 一樣 | 看播放器 | 要 | 不一定有公開,要花時間找 |
| 手機拍照翻譯 App 的朗讀 | 單字大致正確,語調偏平 | 多半只能一次念一段 | 多半要 | 要一段一段按,不適合連念十遍 |
| 這套鏡頭朗讀機 | 自然人聲,但不是課本原聲 | 速度、遍數都能用一句話指定 | 不用 | 需要一台 Linux 電腦和一點設定 |
所以 CD 還是第一選擇。如果老師在意的是課本原聲的口音和停頓,這台朗讀機只能當替身。它贏在「臨時要用、要念很多遍、要慢一點」這種情境。
小朋友聽了 AI 念的,會不會學到錯的?
這是我自己最擔心的事。有兩個地方可能出錯:AI 把字看錯,或是朗讀引擎把字念錯。
前者比較好防。AI 會把它讀到的句子列在螢幕上,大人掃一眼就知道有沒有漏句、看錯字。課本上如果有小朋友用鉛筆寫的註解,記得提醒 AI 只念印刷的英文。後者比較少見,但遇到人名、地名這類專有名詞,引擎偶爾會念得怪怪的。我的做法是第一遍自己跟著聽,覺得哪個字怪就查一下字典的發音,請 AI 把那個字換成拼法相近的寫法再念。
還有一件事它做不到:它只負責示範,不會聽小朋友念得對不對。跟著念、錄下自己的聲音、和示範比一比,這一段還是要大人陪。
想自己做一台?程式全在這裡
程式放在 GitHub:github.com/bockybocky/read-aloud,可以自由取用。它是寫給 Linux 用的(我用的是 Arch Linux 加 Omarchy 桌面),需要 python3、ffmpeg 和 pacat 這三個常見工具。Mac 或 Windows 要改拍照和播音的那兩行才能用。
安裝只要在終端機裡打這三行:
git clone https://github.com/bockybocky/read-aloud
cd read-aloud
./install.sh裝好後打 say-en "Hello there.",聽到一個男生說 Hello there 就成功了。
拍照程式 snap-paper:從鏡頭拍一張照,左右翻正,存成檔案。
#!/bin/bash
# Take one photo from the webcam (un-mirrored). Usage: snap-paper [output.jpg]
OUT=${1:-/tmp/paper.jpg}
ffmpeg -y -loglevel error -f v4l2 -video_size 1280x720 -i /dev/video0 -vf "select=gte(n\,20),hflip" -frames:v 1 "$OUT" && echo "$OUT"朗讀程式 say-en:把英文交給 Piper 念出來。-v 換聲音,-r 調速度,數字越大越慢。
#!/bin/bash
# Speak English text with Piper. Usage: say-en [-v voice] [-r slowness] "text" (or pipe text in)
# slowness: 1.0 = normal speed, bigger = slower
set -o pipefail
V=en_US-ryan-high
R=1.35
while [ "$1" = "-v" ] || [ "$1" = "-r" ]; do
[ "$1" = "-v" ] && V=$2
[ "$1" = "-r" ] && R=$2
shift 2
done
D=~/.local/share/piper-tts
RATE=$(grep -o '"sample_rate": *[0-9]*' "$D/voices/$V.onnx.json" | grep -o '[0-9]*$')
{ [ $# -gt 0 ] && echo "$*" || cat; } |
"$D/bin/piper" -m "$D/voices/$V.onnx" --length-scale "$R" --sentence-silence 0.6 --output-raw 2>/dev/null |
pacat --raw --format=s16le --channels=1 --rate="$RATE"安裝程式會一起下載三個聲音:ryan(男聲)、lessac 和 amy(女聲)。想換女聲,就跟 AI 說「換 amy 念」,或自己打 say-en -v en_US-amy-medium "..."。
最後把 repo 裡的 AGENTS.md 放在你開 AI 助手的資料夾,它就知道「看課本」該先拍照、「念出來」該用哪個聲音。之後只要對它說一句「拍照念吧,每句念三遍」就好。
帶得走的一件事
工具不見的時候,先問自己:它真正替我做的是哪一件事?那片 CD 真正提供的,是「有人用正確的發音、慢慢地、一遍又一遍念給孩子聽」,光碟本身不重要。把需求拆到這一層,替代品往往就在手邊。
下次有東西壞了或找不到,試著用一句話寫下「它替我做的那一件事」,再看看家裡有沒有別的東西能做到同一件事。
留言
載入留言中…