謝作如 謝集



掃描儀是辦公室中最常見的設備之一。雖然智能手機上配置的攝像頭像素越來越高,人們習慣于用“隨手一拍”來替代過去的“掃描”動作,但畢竟拍攝的效果不好,得到的圖片往往不夠平整。筆者學校創客空間中有一臺愛普生掃描儀,雖然平時用處不大,但關鍵時刻總需要它的幫忙。為了方便使用,我們希望將其設置為網絡共享,隨時隨處可以使用,最大限度地提升其利用率。
2020年3月,我們曾經利用虛谷號和Python將家里的惠普一體機(型號為“M126a”)改造為網絡版的一體機,使其支持遠程打印、遠程掃描等功能。但是很遺憾,我們暫時找不到這臺愛普生掃描儀在arm64系統下的驅動程序,只能將其安裝在X86架構下的拿鐵熊貓上,經過一番折騰,總算實現了多人共享,普通掃描儀變身為網絡掃描儀(如圖1)。
● 思路分析
因為之前已經成功地在一體機上實現網絡掃描的功能,我們再次選擇這樣的做法,即利用Python寫一個Web服務器,通過訪問網頁來操作掃描儀,具體方法如下:
用Python的Flask框架寫一個Web服務器,運行在連接掃描儀的迷你電腦上。用戶通過網頁發送掃描命令,Python將調用系統的命令驅動掃描儀,得到圖片后再借助格式轉換工具轉化為JPEG格式,最后通過網頁顯示圖片,提示用戶下載。這一過程描述起來有點復雜,但執行速度其實很快,而且對用戶來說過程“透明”:點擊網頁的“掃描”按鈕,一會兒就能得到圖片,是很好的體驗。基于Web的掃描儀應用系統的運行流程如圖2所示。
這一做法的優勢很明顯,只要能上網的終端都可以使用,操作非常簡單,部署起來也方便。創客空間中有各種迷你電腦或者閑置的電腦,只要裝上Linux系統,配置好掃描儀的驅動即可。至于為什么要選擇Linux,是因為Linux下有支持命令行的掃描儀軟件scanimage和格式轉換軟件imagemagick。在Windows下,類似功能的軟件很難找到。
● 程序實現
Flask是Python的輕量級Web開發框架,也是浙教版必修二《信息系統與社會》模塊的教學內容之一。
1.功能測試
先在Jupyter上編寫代碼,模擬一下核心功能,即掃描。
啟動掃描命令(如圖3)。
圖片轉換命令(如圖4)。
很順利,一張圖片就出來了,Python就這么神奇。
2.代碼編寫
借助教材中的案例,我們開發了一個很簡單的Web應用。核心代碼僅僅一個文件——webscan.py。如圖5所示,“templates”中是作為模板的兩個靜態網頁?!皊tatic”中放兩個js文件,借助jquery實現了文件列表的排序功能?!皊tatic”文件中的scan文件夾,則用來存放掃描文件(如圖6)。
“webscan.py”代碼中加了如下幾條路由,具體介紹如下頁表所示。
限于篇幅,下頁圖7的代碼僅僅提供了掃描功能的部分,如果需要完整代碼和相關的網頁模板(“index.html”和“list.html”文件),請訪問虛谷號的GitHub,或者向編輯索取。
● 系統應用
這個基于Web的掃描儀應用系統,最后命名為“WebScan”。代碼用vscode編寫,在Anaconda、mPython等環境中測試通過,支持Python3.5及以上版本。在虛谷號、MacOS和Ubuntu等系統上都能成功部署(如下頁圖8)。
客戶端使用Chrome、Safari、Edge和Firefox等瀏覽器,都能夠正常訪問。同樣,在手機上訪問、操作也很正常。
1.掃描文件(如下頁圖9)
2.瀏覽文件(如下頁圖10)
我們把Web服務器的地址做成二維碼貼在掃描儀上面,手機一掃就打開頁面,然后開始操作,非常方便。
● 拓展思考
在京東和淘寶上,我們都沒有找到價格在1000元內的具備網絡共享功能的平板掃描儀。具備網絡功能的,要么是高拍儀,要么是動輒上萬的高速掃描儀。將辦公室中的普通掃描儀配上迷你電腦,然后放在學校的公用辦公區域,方便師生們使用,應該是一個不錯的創意應用。
想象一下,教師們帶著文稿走到掃描儀前面,放好,然后拿出手機掃一下二維碼。點擊網頁上的按鈕,十幾秒鐘后,掃描的圖片就到了手機里了。這不是很方便嗎?學生沒有手機怎么用呢?比如插上U盤,按下按鈕開始掃描,掃描圖片直接存入U盤帶走。要實現這樣的功能,編程起來也很簡單。有了Python,解決這些問題一點都不困難。