用Python让多人“共享”扫描仪

2021-01-11 08:43谢作如谢集
中国信息技术教育 2021年1期
关键词:扫描仪共享代码

谢作如 谢集

扫描仪是办公室中最常见的设备之一。虽然智能手机上配置的摄像头像素越来越高,人们习惯于用“随手一拍”来替代过去的“扫描”动作,但毕竟拍摄的效果不好,得到的图片往往不够平整。笔者学校创客空间中有一台爱普生扫描仪,虽然平时用处不大,但关键时刻总需要它的帮忙。为了方便使用,我们希望将其设置为网络共享,随时随处可以使用,最大限度地提升其利用率。

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”中是作为模板的两个静态网页。“static”中放两个js文件,借助jquery实现了文件列表的排序功能。“static”文件中的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,解决这些问题一点都不困难。

猜你喜欢
扫描仪共享代码
神秘的代码
一周机构净增(减)仓股前20名
重要股东二级市场增、减持明细
挂羊头卖狗肉的“共享”营销
图书馆与出版企业数字资源共享的环境因素分析
用保鲜膜保护超声扫描仪提高猪场生物安全性
近期连续上涨7天以上的股
便携高速文件扫描仪
便携高速文件扫描仪
佳能扫描仪获“优秀金融设备奖”