# 英文課文 CD 找不到,我用鏡頭和 AI 做了一台朗讀機 來源:Realpha 讀市場(blog.getrealpha.com) 原文與圖表:https://blog.getrealpha.com/blog/webcam-read-aloud-english-2026-10/ > 小朋友要聽英文課文錄音來練習,CD 卻找不到。我在舊筆電夾上一顆鏡頭,寫了兩支小程式:一支拍課文,一支用離線的自然人聲慢慢念出來,AI 看照片、決定念什麼、念幾遍。這篇記下它怎麼運作、和其他辦法比起來差在哪、做不到什麼,程式全文也放在文末,可以直接拿去用。個人使用心得分享。 Published: 2026-10-04 Locale: zh-TW Tags: 英文學習, 親子, Linux, Piper, Claude Code, 舊電腦, 開源 TL;DR: 課文 CD 找不到時,一顆鏡頭加兩支小程式就能補上:拍下課文,讓 AI 看懂,再用離線的自然人聲放慢念十遍,小朋友聽完就能跟著練。 ![立體主義風格的油畫:攤開的書、夾在螢幕上的鏡頭與聲波交錯在同一個畫面](/covers/webcam-read-aloud-english-2026-10.png) > *讀書百遍,而義自見。*
> —— 董遇語,見《三國志・魏書》裴松之注引《魏略》(三國,約 3 世紀) 2026 年 10 月 3 日晚上將近十二點,我在舊筆電上夾了一顆網路攝影機,和 AI 一起寫了兩支加起來不到二十行的小程式,讓 AI 透過鏡頭看小朋友攤開的英文練習卷和讀本,再用一個不必連網的自然男聲,放慢速度把每一頁念十遍。起因只是一張找不到的課文 CD。它能補上「有人示範正確發音」這件事,但前提是課本印刷清楚、讀的是英文;它不會幫小朋友糾正發音,念錯的地方還是要大人聽。 ## 事情是這樣開始的 小朋友的英文老師要他們聽課文錄音,跟著念熟,再錄自己的版本交回去。問題是附在書裡的 CD 不知道收到哪裡去了,翻遍抽屜也找不到,偏偏隔天就要用。 剛好前一天,我才把一台裝著 Windows 7 的老筆電重新裝成 Linux(過程寫在[〈把家裡的舊電腦重生成 AI 伺服器〉](/blog/old-laptop-ai-server-2026-10/)),上面已經有 Claude Code,一個能在電腦裡自己執行指令的 AI 助手。我手邊還有一顆夾式的網路攝影機。於是想法很直接:既然 AI 看得懂照片,那讓它看課本,再找個好聽的聲音念出來,不就是一台朗讀機了嗎? ## 它怎麼運作 整個流程分三步,像請一位家教坐在旁邊: 1. **拍照**:鏡頭夾在螢幕上方往下看,書攤在鍵盤前面。我們說一句「翻頁了,拍照念吧」,AI 就執行拍照程式,拍下一張課文照片。 2. **看懂**:AI 打開照片,把英文一句一句讀出來,同時把文字列在螢幕上。哪一塊拍糊了,它會直接說是哪一塊。 3. **念出來**:AI 把文字交給朗讀程式,用一個叫 ryan 的美式男聲念。速度預設放慢三成多,每句之間停半秒多,剛好夠小朋友在心裡跟一遍。 ![兩條時間軸上下對照,上面三個短句塊緊緊相連,下面同樣三句的塊變長、塊與塊之間多出一段空白,整條軸因此延伸到右邊更遠處](/figures/read-aloud-slower-pace-gap.svg) ![那天晚上的實景:舊筆電螢幕上方夾著網路攝影機,右邊視窗的 AI 正在用慢速念課文,筆電前面攤著那本古埃及讀本](/figures/read-aloud-desk-photo.jpg) 那天晚上先念的是一張文法練習卷,十題附加問句(She is collecting stickers, isn't she? 這種),空格的地方它念成 blank。接著換成一本講古埃及的讀本,翻到法老 Amenhotep 改變畫風的那兩頁。我跟 AI 說「再念十次」,它就在背景用慢速連念十遍、每遍中間停兩秒,前後大約十分鐘;念的同時我還能繼續跟它講話,做別的事。 ## 這一個小時裡實際撞到的事 **第一張照片什麼都沒拍到。** 我說「拍照念吧」,它拍回來的是鍵盤和我的手。鏡頭夾在螢幕上方,視角比想像中窄,紙要拿到鏡頭正前方二、三十公分、光線亮一點才拍得清楚。後來我們乾脆把書攤在鍵盤前、讓鏡頭往下看。 ![側視圖兩格對照,鏡頭從螢幕上方射出一個往下的窄錐,左格紙舉在錐的外側落在空白區,右格書平攤在鍵盤前方正好落在錐覆蓋的地面範圍內](/figures/read-aloud-webcam-cone.svg) **第一版的聲音太難聽,被我退貨。** 電腦裡原本沒有任何朗讀程式,AI 先裝了 espeak-ng,這是 Linux 上最常見的一套,裝起來最快。結果一念出來,平板、生硬,像老電影裡的機器人。我直接跟它說:「你的語音真的太爛了,找找看有沒有聽起來比較自然的。」它改裝 Piper,一個開源、完全在自己電腦上跑的語音引擎,聲音是用真人錄音訓練出來的。它下載了三種美式聲音,用同一句練習卷的句子各念一次讓我比,我選了 ryan 這個男聲。聽完我又嫌太快,它把速度從 1.0 調成 1.35、每句之間多停 0.6 秒,這兩個數字後來就成了預設值。 **同一台電腦上的另一個 AI 說它「開不了鏡頭」。** 我在旁邊同時開著 Gemini 的對話工具,問它能不能看鏡頭,它回答這個對話介面不支援視訊,請我用手機拍照傳給它。它說的沒錯,但問題不在 AI 看不看得懂,而在它手上有沒有「拍一張照」這個動作。只要給它一支會拍照、會把照片存成檔案的小程式,再告訴它照片在哪裡,看照片它本來就會。我把這段說明寫成一個 AGENTS.md 檔案,Claude、Codex、Gemini 這類工具都會讀它。 **網路攝影機拍出來的字是左右顛倒的。** 很多鏡頭為了讓你視訊時像照鏡子,預設把畫面左右翻過來。人臉看不出差別,課文就變成鏡像字。 ![兩張紙的輪廓並排,左邊摺角在右上、文字行靠左對齊右端參差,右邊摺角跳到左上、文字行靠右對齊左端參差,整張紙像照鏡子一樣被翻過來](/figures/read-aloud-mirror-flip.svg) 拍照程式裡多了一個翻轉的步驟,就是在處理這件事。另外鏡頭剛打開時亮度還沒調好,前幾格畫面會偏暗,所以程式等到第二十格才存檔。 **想省額度改叫 Codex 來念,卡在安全設計。** 我想讓比較便宜的 Codex 接手朗讀,試了才發現它預設把指令關在一個隔離環境裡跑,連暫存資料夾都不能寫,所以朗讀程式改成不存檔、直接把聲音送到喇叭。但隔離環境裡還是摸不到攝影機。 ![一個虛線大框代表隔離環境,框裡放著可執行的指令,框外是攝影機與暫存資料夾,兩條從框內伸向框外的線都被叉號截斷](/figures/read-aloud-sandbox-boundary.svg) 要讓 Codex 用這套程式,得讓它在隔離環境外面執行;Claude Code 也不肯替我啟動一個拿掉防護的 Codex,這一步只能自己在終端機打。我覺得這樣擋是對的,只是要知道有這道門。 **老筆電念得動,而且不必連網。** Piper 在這台十年前的 HP 筆電上跑得很順,念一頁不用等。整個過程聲音都在自己電腦裡產生,小朋友的課本內容不會被傳到任何地方。 ## 和其他辦法比一比 | 辦法 | 發音是否正確 | 能放慢、能重複 | 要不要連網 | 缺點 | |---|---|---|---|---| | 原本的課文 CD | 最標準,老師要的就是這個 | 要自己倒帶 | 不用 | 找不到就沒轍 | | 上網找出版社音檔 | 跟 CD 一樣 | 看播放器 | 要 | 不一定有公開,要花時間找 | | 手機拍照翻譯 App 的朗讀 | 單字大致正確,語調偏平 | 多半只能一次念一段 | 多半要 | 要一段一段按,不適合連念十遍 | | 這套鏡頭朗讀機 | 自然人聲,但不是課本原聲 | 速度、遍數都能用一句話指定 | 不用 | 需要一台 Linux 電腦和一點設定 | 所以 CD 還是第一選擇。如果老師在意的是課本原聲的口音和停頓,這台朗讀機只能當替身。它贏在「臨時要用、要念很多遍、要慢一點」這種情境。 ## 小朋友聽了 AI 念的,會不會學到錯的? 這是我自己最擔心的事。有兩個地方可能出錯:AI 把字看錯,或是朗讀引擎把字念錯。 前者比較好防。AI 會把它讀到的句子列在螢幕上,大人掃一眼就知道有沒有漏句、看錯字。課本上如果有小朋友用鉛筆寫的註解,記得提醒 AI 只念印刷的英文。後者比較少見,但遇到人名、地名這類專有名詞,引擎偶爾會念得怪怪的。我的做法是第一遍自己跟著聽,覺得哪個字怪就查一下字典的發音,請 AI 把那個字換成拼法相近的寫法再念。 還有一件事它做不到:它只負責示範,不會聽小朋友念得對不對。跟著念、錄下自己的聲音、和示範比一比,這一段還是要大人陪。 ## 想自己做一台?程式全在這裡 程式放在 GitHub:[github.com/bockybocky/read-aloud](https://github.com/bockybocky/read-aloud),可以自由取用。它是寫給 Linux 用的(我用的是 Arch Linux 加 Omarchy 桌面),需要 python3、ffmpeg 和 pacat 這三個常見工具。Mac 或 Windows 要改拍照和播音的那兩行才能用。 安裝只要在終端機裡打這三行: ```bash git clone https://github.com/bockybocky/read-aloud cd read-aloud ./install.sh ``` 裝好後打 `say-en "Hello there."`,聽到一個男生說 Hello there 就成功了。 **拍照程式 `snap-paper`**:從鏡頭拍一張照,左右翻正,存成檔案。 ```bash #!/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` 調速度,數字越大越慢。 ```bash #!/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 真正提供的,是「有人用正確的發音、慢慢地、一遍又一遍念給孩子聽」,光碟本身不重要。把需求拆到這一層,替代品往往就在手邊。 ![兩個同樣大小的實心核並排,核裡寫著同一組功能,左邊套著圓形薄殼代表光碟,右邊換成方形邊框代表筆電,殼換了核沒變](/figures/read-aloud-shell-and-core.svg) 下次有東西壞了或找不到,試著用一句話寫下「它替我做的那一件事」,再看看家裡有沒有別的東西能做到同一件事。