怎樣快速掃描一本書並做成電子版?

語言: CN / TW / HK

寫在前面

未經授權翻印圖書是觸犯法律的,傳播出去更是有巨大的法律風險,請注意圖書的版權頁申明。本文展示的圖片僅為展示效果,以分享經驗為目的。如果涉及侵權,請聯絡我,我將及時刪除。

-------------------

我最近掃了一本1260頁的書,最終制作成了具有文字檢索功能的pdf和djvu格式。整個過程大約花費一整天時間(主要是查詢各種方法消耗時間,下次再掃估計要求低點兩個小時可以搞定),費用為零。(不用掃描器,僅使用手機+電腦)。

效果大概像這樣:

實際操作非常簡單,不過有很多小trick,特別分享給有需要的人士。大致流程是:

  • (用手機)拍照
  • 照片效果優化,例如裁剪、轉成黑白圖、調明暗對比等(掃描全能王一鍵搞定)(Edit: 後來發現了一款更牛逼的開源軟體,見下文)
  • 在電腦端將大量圖片組合成pdf或djvu文件
  • 對pdf和djvu文件做OCR,並將結果嵌入對應的文件中,這樣就可以在閱讀的時候選中文字進行拷貝

下面逐一詳細講解:

問題分析

我的需求是,從圖書館借了一本在網上找不到的經典圖書,由於太過經典,想要保留一份電子檔。碰到這個需求時,我第一反應是在網上搜到了包含本帖的若干個提問。總結一下網友提出的方案和我認為的弊端:

  • 買一個傳統掃描器,很多二手貨很便宜。譬如這裡提到的中晶V700Plus,淘寶二手標價才168起。弊端包括:1. 二手不敢信(十幾年的老機器了),新的又不合算。2.掃描速度好像也不是很快。3. 一次性使用,浪費了資源。
  • 有好幾家創業公司推出了專用的拍照式書籍專用掃描器。弊端是:更貴、評價似乎也不是很好、浪費資源
  • 淘寶上有不少書籍掃描服務商。我問了其中一家,不破壞圖書的情況下需要兩毛錢/頁。掃我那本書要花200+軟妹?算了吧

由於早就聽說了“掃描全能王”這款神級手機APP,下載先試用了一下,效果非常令我滿意。不僅自動查詢書籍邊緣自動裁剪,還能自動優化影象。

最難的問題——掃描,都能這麼輕鬆的解決,其它步驟不就簡單多了嗎?動手吧!

拍照

由於頁數比較多,端著手機拍又慢,效果又不好,一個人還不好操作。

因此你需要一個工作臺:

如上圖所示,關鍵點在於:

  • 給手機接上有線耳機,這樣耳機上的音量鍵就可以當做快門鍵
  • 把手機架高(例如放紙箱上,用重物把手機下巴壓住,這樣攝像頭能外伸出來很多)
  • 書最好放在深色的桌子上,這樣掃描程式能更好的自動獲取邊界
  • 書的兩側架兩盞檯燈(由於條件簡陋,僅拿了個白色的箱子當反光板用,好在掃描全能王能自動去除黑白圖中的陰影。彩色掃描的話,仍然需要很好的光源,並用白紙包住光源,保證光是柔和的散射光。當然,找個陰天在室外操作是最佳方案)
  • 先拍奇數頁,再拍偶數頁。如此操作可以加快翻頁速度

在這臺架子的輔助下,我掃描(拍照)的平均速度大約能達到3秒/頁

裁剪與優化

---------------- edit ----------------

原先使用的“掃描全能王”確實不錯,但是今天發現了一個更牛逼的開源軟體 Scan Tailor Advanced

Windows安裝包原始連結見下文。為答謝大家支援,已漢化該軟體,下載地址:連結: http:// pan.baidu.com/s/1hYNKpS -oG6MS3DP2tcZigg 提取碼: vnt7。github連線不暢的童鞋可以在我的網盤下載。裡面還有個資料夾叫“中文語言包”。其中的檔案:

  • scantailor_cn.qm:編譯好的漢化語言檔案
  • scantailor_cn.ts:翻譯的原始檔,macOS和Linux使用者可以下載這個檔案放在translations目錄裡,這樣編譯之後就能有中文。
  • 使用說明.txt:裡面講了簡單的操作步驟。
  • 如果操作正確,在軟體的設定頁面裡可以把語言改成中文。(語言顯示為“C”,正不知道為啥呢)

它可以實現的功能有(全都帶* 自動 *批處理):

- 90/180/270°旋轉影象,所以橫豎拍都沒事

- 切割頁面,所以可以雙面拍攝(雙面時頁面通常展不平,需要用到下文會講的去畸變)

- 糾偏,拍斜了能自動檢測並糾回來

- 檢測頁面內容範圍,只取有效文字範圍

- 增加邊距

- 影象增強(陰影、雜點去除)

- 去畸變(這個有點屌)

Edit: 實測雙面拍攝之後畸變太大,自動去畸變效果並不好,不過可以手動一張一張的調,這樣有點費事我不推薦。最好還是展平一次一頁的拍,有塊玻璃壓住頁面就更棒了!(淘寶幾十塊錢定做一塊加厚鋼化玻璃。推薦霧面的,普通光面玻璃容易反光,像鏡子一樣)

上文已經提供了github原始碼連結,Windows還提供了安裝包: 64位32位 。Linux和macOS需要自行下載編譯哦。我在macOS和Ubuntu 16.04下測試通過。win安裝包是github官方提供的,我並沒有為大家打包哈。

編譯所需依賴項的不完整列表:

- cmake >= 3.9.6

- boost >=1.60

- libjpeg

- libtiff

- libpng

- qt5 >= 5.6

- zlib

注:ubuntu 16.04編譯Scan Tailor Advanced稍微費勁點,主要是gcc,boost,qt5的版本都老掉牙,需要手動安裝boost和qt5,並改一點點程式碼照顧老黃曆的gcc。

--------------------------------------

以下為原方案,比Scan Tailor效果差不少。

全部由“掃描全能王”在手機(後來換到iPad,因為螢幕大好操作)上操作實現。由於這款軟體的幫助實在太大,特意給它打個廣告。本人與該公司全無瓜葛,利益無關。

具體操作可以自行去應用商店裡下載後體驗。簡單說就是:

從相簿匯入照片 => 逐張照片處理(多數工作自動化一鍵搞定)=> 把處理後的圖再匯出到手機相簿

這款APP有直接匯出為PDF的功能。由於如下原因,我沒有這麼做:

- 我是奇偶頁分開拍照的,匯入APP之後不能調節順序,只能按照匯入的順序處理和匯出至PDF。我那本書頁數非常多,光是調節順序就得累死我呀

- 免費版在PDF頁面右下角會有水印,去除起來相對較麻煩。(也有簡單的辦法,就是再加個純白的水印在原水印的位置,但是有點醜陋,會加大頁邊距。碰到彩色掃描更是行不通)

- 收費版是會員制的,一個月會員30,一年會員200+。喜歡簡單省事的同學可以考慮一下。

在電腦端組合成PDF/DJVU

注:以下有些步驟可以用命令列的開源軟體提高效率,安裝方式(由於不太懂Windows,只提供Ubuntu和macOS的操作指南):

Ubuntu 16.04下

sudo add-apt-repository spa:alex-p/tesseract-ocr
sudo apt update
sudo apt install tesseract-ocr tesseract-ocr-eng tesseract-ocr-chi-sim imagemagick pdf2djvu djvu2pdf

macOS下

brew install tesseract imagemagick djvu2pdf

很多操作我是在Ubuntu下完成的,mac版並沒有測試。另外macOS可以使用automator完成差不多功能。

  • 調節順序

匯入電腦後,碰到的第一個問題是怎麼排序。用批量重新命名工具即可,把原來的"IMG_1327.JPG"重新命名成類似這樣:奇數頁"book-0001.jpg", "book-0003.jpg",偶數頁"book-0002.jpg"。。。然後再扔進同一個資料夾

要是你找不到合適的重新命名工具,要麼手工一個個改,要麼懂一點程式設計,參考如下Python程式碼:

#!env python
import os

def rename(dirname, start_with):
    files = os.listdir(dirname)
    files.sort()
    for f in files:
        if f.endswith('jpg'):
            output_name = dirname + 'book-{0:04d}.JPG'.format(start_with)
            os.rename(dirname + f, output_name)
            start_with += 2
    print('DONE')

rename('/path/to/odd/images/directory', 1)   # 指定奇數頁圖片資料夾位置,並重命名
rename('/path/to/even/images/directory', 2)  # 指定偶數頁圖片資料夾位置,並重命名
  • (可選)微調影象

這是因為原始圖片解析度不一致,先轉換一下比較好。另外,影象邊緣不可避免還是有些黑色的陰影痕跡需要去除。

我從掃描全能王匯出的圖片多數解析度在1500x2336左右(其實是可以調高的,我後來才發現)。所以我打算把圖片統一解析度到1550x2336(注意不是縮放,而是不足1550白色背景來補,多了裁掉)

將所有圖片放在同一資料夾下,執行如下shell(zsh)命令:

for file in ./*(.); do convert $file -background white -gravity center -extent 1550x2336 -sharpen 0x3 $file; echo "finished $file"; done;

要去除黑邊的話,先製作一張1550x2336的png圖片,中間部分扣空,僅保留很窄的白色邊框,然後跟每張圖片組合一下就能蓋住黑色陰影了,就像加了個白色的相框。

假設這個邊框png檔案叫做'/tmp/frame.png',也是一條命令搞定(可以和上一條命令組合成一條命令)

for file in ./*(.); do composite $file /tmp/frame.png -dissolve "0.01" $file; echo "finished $file"; done;
  • 轉成PDF

兩條命令搞定(並且同時搞定OCR)

ls . > file_list.txt
tesseract file_list.txt book pdf

注意:

  • 'book'和'pdf'之間有一個空格,不要以為是'book.pdf'
  • tesseract是一個開源的OCR庫,預設識別英文,實測4.0.0版本以上英文識別 非常完美 。因為從這一版本開始加入了基於神經網路的檢測演算法。4.0.0版本以下就不要嘗試了,效果只能說很爛,這也是為什麼安裝tesseract要用ppa。
  • 由於我正好是掃英文書,所以沒試中文效果。如果要做中文OCR識別,大概的操作需要對應替換成(記得先安裝中文識別庫):
tesseract  -l chi_sim  file_list.txt book pdf

結語

寫這篇回答之後,發現這個主題在國外一點也不新鮮,還有一個專門的網站 www.diybookscanner.org ,歡迎入坑。

舉個例子:

原文連結在此:

Original ~600pg/hr, very portable scanner now achieving ~900pg-1100pg/hr

本想分享點經驗,發現門檻還是有點高。就不分享djvu轉換的方法了。英文好可以參考

這篇文件

Help:DjVu files - Wikisource, the free online library

這篇文件

以及這個OCR指令碼

User:Inductiveload/Scripts/DJVU OCR

以及 這個指令碼

寫得有點極客,其實不懂的話只是稍微麻煩一點。或者花點錢買一個月會員省事。

來源:知乎 www.zhihu.com

作者:鄒魯

【知乎日報】千萬使用者的選擇,做朋友圈裡的新鮮事分享大牛。點選下載

此問題還有71 個回答,檢視全部。

延伸閱讀:

就目前來看,讀書是看電子版的還是看紙質版的比較好呢?

買了紙質版的書以後,你們會再買他的電子版嗎?