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