使用 OS 工具通过 Python 3 扫描图像

Posted

技术标签:

【中文标题】使用 OS 工具通过 Python 3 扫描图像【英文标题】:Use OS tools to scan in an image with Python 3 【发布时间】:2021-12-22 15:21:12 【问题描述】:

我正在使用 python 构建一个应用程序,该应用程序需要能够连接到扫描仪并处理生成的 pdf/jpeg/whatever 中的数据。我一直在尝试找到一种方法来连接到扫描仪以请求扫描,但没有真正的进展。

我查看了所有我能找到的选项,包括这个答案:I want to connect my program to image scanner

我发现的大多数解决方案都说您需要使用 pyTwain、pySane、Libinsane、python-imagescanner 或类似的解决方案,这些解决方案似乎都围绕着在 Windows 上使用 TWAIN 或在 Linux 上使用 SANE。我有一个打印机/扫描仪组合,但我找不到它的 TWAIN 驱动程序,因为它不是“企业”打印机,但即便如此我也不知道这台特定的打印机是用户会拥有的,所以我是寻找更通用的解决方案。

对我来说令人困惑的部分是,我仍然可以通过使用 Windows 传真和扫描让扫描仪正常扫描,所以我觉得必须有一种方法让扫描仪接收来自程序的扫描命令。

我真的不需要对扫描仪进行太多控制,只需“扫描图像并将文件保存在这里___”。那么,有没有办法告诉 Windows 发送“扫描”命令并将输出保存到我​​可以访问的特定文件中?也许只是通过os.system() 使用类似命令? (基本上windows能做到的话,我就不能只用windows工具吗?)

通过 linux 执行此操作的方法也会有所帮助,但 Windows 10 是主要问题。

【问题讨论】:

我不认为这实际上是一个 python 问题。它更多的是关于特定的打印机制造商,因为最终取决于他们。你看过他们推荐的东西吗?你可以在这里找到他们开发页面的链接:developers.hp.com/tools 我尽量不提及有关扫描仪的细节,因为我想要更一般的东西。某种仅使用 Python 中的 windows 工具的方法。我试图更新问题以使其更有意义。 如果您想使用命令行工具,这会将您的问题与 Python 完全分离,并使其成为超级用户而不是 Stack Overflow 的一般使用问题。 【参考方案1】:

我不能只为 Windows 回答 Linux。

与扫描仪通信的通用方法是通过 Windows 图像采集。

在大多数情况下,扫描仪需要一些驱动程序支持,这通常可以通过 MsPaint 扫描轻松确认(或者如果安装了传真扫描)。

因此,首先检查 Windows 设备中包含的扫描仪,然后右键单击扫描或尝试在 Paint 中进行扫描。

如果您看到此类消息,则表示客户端无法通过 WIA 使用扫描仪,您需要安装合适的 WIA 驱动程序。

一旦克服了这个障碍,您就可以使用 WIA-CMD-Scanner 应用程序尝试使用 https://github.com/nagimov/wia-cmd-scanner 将图像获取到文件中,它是一个 35 KB 的小型编译 VB exe。

因此,在我的测试中,该扫描仪仅返回 21.59 厘米 x 29.70 厘米的全压板扫描(它不会考虑使用此工具减少扫描区域。)请注意,它仅适用于 Windows 发现的第一个扫描仪(您需要修改代码以针对特定模型)。

对我有用的命令 (YMMV)

wia-cmd-scanner.exe  /w 0 /h 0 /dpi 300 /color RGB /format PNG /output .\scan.png

扫描到文件 .\scan.png (dpi = 300, 颜色模式 'RGB', 输出格式 'PNG') 扫描在 27 秒内完成

自述文件https://github.com/nagimov/wia-cmd-scanner#scripting-and-automation中有一个设置日期/使用for循环的例子

【讨论】:

我老了。我记得 WIA 是 TWAIN 的 替代品。那是 20 多年前的事了。

以上是关于使用 OS 工具通过 Python 3 扫描图像的主要内容,如果未能解决你的问题,请参考以下文章

图像裁剪工具 (Python)

Python实用小工具了解一下,总有一款是你需要的

openCV进阶之二:自动校准扫描图像生成鸟瞰图

Python代码规范:代码规范整改和编码技巧-pylint扫描问题整改

通过编写一个简单的漏洞扫描程序学习Python基本语句

python opencv 批量旋转图像,使 图像内容不改变,并保存