樂高製書籍朗讀器:用Raspberry Pi與Mindstroms將書本數位化

五月 13, 2014
Facebook
Twitter

只要湊齊樂高馬達與積木、一片Raspberry Pi,再加上一片BrickPi擴充板,我們就能夠打造一臺可以將實體書本數位化的書籍朗讀器。

我們當初想要開發一種能夠大聲朗讀內文的書本的數位化工具,而Google的「Google 圖書」這項專案很吸引我們,於是我們就開始思考:「為何不乾脆自己在家裡實現它?」

我們在初步的嘗試中,嘗試驗證一個構想。我們製作了一臺BrickPi書本朗讀器(請見舊文章,讓它大聲地讀出Kindle的內容。

接著,再重新設計朗讀器,讓它可以讀真正的紙本書。在示範影片中,我們將《Horowitz and Hill’s The Art of Electronics》這本紙本書數位化。
图片

我們用樂高打造的機器人朗讀書本

運作原理

簡單來說,朗讀器會翻過書本的每一頁然後拍下照片,再進一步將每張照片轉成純文字檔案。

首先,朗讀器會讓樂高馬達旋轉,讓原本的那一頁進入翻頁階段。重力會產生足夠的摩擦力,讓頁面慢慢地往前提高。接著樂高積木手臂會旋轉一圈,使頁面翻動。

在翻到了新的一頁之後,Raspberry Pi的相機會拍下這一頁的影像並存成JPEG的格式。然後透過使用Raspberry Pi平臺上,光學字元識別(OCR)的開放源碼軟體,由BrickPi將影像檔轉成純文字檔。

最後,再讓Raspberry Pi儲存成純文字檔。現在我們已經完成了一頁的數位化,你可以嘗試看看數位化你自己的書。在示範影片中,我們使用了免費的語音朗讀軟體,Raspberry Pi就負責從我們裝設的喇叭中大聲朗讀書本。當讀完這一頁且儲存後,Raspberry Pi會再度透過BrickPi翻到下一頁去。

實行步驟

我們準備了一些逐步的指示在下方,協助你利用Raspberry Pi和樂高機器人打造自己的朗讀器。所有的程式碼和構造設計都收錄在Dexter Industries Github Repository

以下是各個步驟:

步驟#1:收集所有零件

要打造這個專題,你需要以下的東西:

本次專題我們使用的是EV3系統。不過它也可以用NXT來完成。你也可以利用我們的Lego Digital Design Files來安排成套零件。一份完整的物料清單(BOM)可以透過這個軟體產生。

步驟#2:組裝書本閱讀器

因為我們想要使用Raspberry Pi相機的話,BrickPi和Raspberry Pi必須設置在書本的上方,這樣才能夠取得清楚清晰的頁面影像。我們最後完成的形狀看起來有點像出自星際大戰的,有點傾斜的AT-AT walker

图片

相機就擺在書的正上方

在這個範例中,我們使用了樂高機器人的EV3工具包

額外選項1:你可以在這裡下載Lego Digital Designer的檔案
額外選項2:關於拼湊BrickPi書本閱讀器的樂高積木部分,你還可以在這裡察看一步步的指引

图片

最巧妙的部分在於馬達連接了輪子這一點。這個馬達並沒有固定在平臺上,但可以藉著唯一連接到平臺的軸心自由旋轉。這是非常重要的一部分,因為它可以讓頁面保持被壓平的狀態,如此以來輪子就能抓緊該頁面。還有另一個重要的運作原理是,輪子只會在它把單一頁面抽離出輪子時旋轉,然後就會馬上轉回去,這樣任何可能多翻到的頁數都會被放回去。
图片

Dexter Industries Github Code Repository裡,有個叫作arm_test.py的測試程式碼,可以讓你把機械手臂調整到動作最完美為止。將馬達連接到BrickPiPort A並修改speed_roller、speed_arm、t1和 t2的值,直到你調出最沒有問題的翻頁動作為止。

步驟#3:設置書本閱讀器

Raspberry Pi 相機搭載在樂高上。
Raspberry Pi相機模組有許多優點:提供許多選項、很容易設置、影像品質針對本專題是堪用的等等。我們把它塞進在前一步驟拼好的樂高橫樑中以便固定。

連接好相機之後,還有一件事情得做:調整Raspberry Pi相機的焦距。這臺相機預設定焦在無限遠處,而因為它是一臺定焦相機,你得手動調整它。這裡提供兩個連結,可以幫助你調整焦距。

l          http://www.raspberrypi.org/phpBB3/viewtopic.php?f=43&t=32605&start=325#p352613
l          http://www.raspberrypi.org/phpBB3/viewtopic.php?f=43&t=32605&start=225#p346170

在設置好相機後,拍個測試照來確認是否正確對焦吧。在我們組裝的裝置中,我們讓相機保持在書本上方10英吋左右的地方。(你可能需要依據書本的大小調整高度。)

只要執行“raspistill -o image.jpg”,就能進行測試拍照。

拍幾張測試照確認影像是否清楚以及是否有捕捉到整個頁面。如果相機有正確地初始化,你應該會在目前的資料匣底下看見新的檔案 image.jpg。打開它查看影像。

你有可能會需要重新調整焦距並讓角度對準。


步驟#4:設置語音朗讀軟體

图片

首先我們要設置語音朗讀引擎(TTS)。TTS會取得純文字資料然後將它大聲朗讀出來。在我們的專題中,我們使用了eSpeak。通常語音朗讀的聲音是機械式的,不過透過使用eSpeak,我們可以選擇幾種重音以及朗讀器的性別。
 
第一步來測試音響裝置是否有在Raspberry Pi上正常運作。把耳機或喇叭的接到音源孔後,執行下列的指令:

aplay /usr/share/sounds/alsa/*

如果你可以聽見聲音,就跳到下一步吧。如果不行,這份教學應該可以幫助你設置音響裝置。

現在要安裝eSpeak。在終端執行下列的指令:

sudo apt-get install espeak

在成功安裝之後,再一次執行下列指令(只要你能聽見聲音,就不用理會任何顯示在終端上的錯誤訊息):

espeak “hello”

如果你可以從你耳機或喇叭中聽見「hello」,就進行下一步吧。

步驟#5:設置光學字元識別(OCR)引擎

图片

光學字元識別真的很酷。它可以讀文本的影像然後將它轉成電腦上的純文字。我們使用的是Tesseract OCR Engine。它可以在Raspberry Pi上順暢運作,不要求保持在網路連接狀態,而且能確實地把影像轉成純文字。

首先來安裝Tesseract:

sudo apt-get install tesseract-ocr

接著測試OCR引擎。挑一張有一段文字的清楚影像然後執行Tesseract:

tesseract image.jpg o

「Image.jpg」就是剛才由Raspberry Pi相機拍下的影像,「o」則是存放純文字的檔案名稱(Tesseract會存成o.txt,所以沒有必要寫附檔名)。

現在得等一下。OCR非常消耗處理器的性能。當Raspberry Pi完成處理程序後,打開o.txt。如果OCR完全沒有偵測到任何東西,你可以試試看轉動這張影像然後重新執行Tesseract一次。

步驟#6:全部組合:將書本數位化
图片

在相機、軟體以及平臺本身都順利運作後,現在是讓書本朗讀器甦醒的時候了。
图片

BrickPi GitHub Python Repo下載 bookreader.py 這個程式,然後把它放進存放了BrickPi.py函式庫的資料夾中。接著再執行下一段程式碼讓書本朗讀器甦醒:

sudo bookreader.py

趕緊開始把世界上數以百萬計的書本給數位化吧!

喜歡書本朗讀器的專題嗎?BrickPi是一個開放源碼的硬軟體專題。你可以到我們的GitHub儲藏區來替 BrickPi 貢獻一些資源,讓它能變得完善!

(譯:徐永為)
[原文]

Social media & sharing icons powered by UltimatelySocial