怎樣快速掃描一本書並做成電子版?
寫在前面
未經授權翻印圖書是觸犯法律的,傳播出去更是有巨大的法律風險,請注意圖書的版權頁申明。本文展示的圖片僅為展示效果,以分享經驗為目的。如果涉及侵權,請聯繫我,我將及時刪除。
-------------------
我最近掃了一本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 個回答,查看全部。
延伸閲讀:
買了紙質版的書以後,你們會再買他的電子版嗎?