首页 > 编程问答 >使用操作系统工具通过 Python 3 扫描图像

使用操作系统工具通过 Python 3 扫描图像

时间:2024-07-27 08:18:17浏览次数:15  
标签:python linux windows-10 scanning

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

我已经查看了我能找到的所有选项,包括这个答案: 我想连接我的图像扫描仪程序

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

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

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

通过 linux 来做到这一点的方法也会有帮助,但 Windows 10 是首要关注的问题。


不幸的是,没有直接的通用方法可以使用 Python 直接控制 Windows 上的扫描仪。Windows 传真和扫描不提供可供外部程序直接使用的 API 或命令行界面。

让我们探讨一下为什么以及潜在的解决方法:

1. 缺少标准化的扫描 API: 与打印机(通常具有通用的打印驱动程序)不同,扫描仪没有通用的 API。TWAIN 和 SANE 接近,但并非所有扫描仪都支持,尤其是在消费者级别。

2. Windows 传真和扫描的限制: Windows 传真和扫描是一个以用户为中心的应用程序,不适合程序化控制。它不提供从其他应用程序调用的命令行选项或 API。

可能的方法:

A. 基于 TWAIN/SANE 的库(如果可用):

  • 彻底搜索驱动程序: 即使的打印机不是“企业级”,也要在制造商网站上深入搜索 TWAIN 驱动程序。有时,它们会与其他软件捆绑在一起,或者作为“完整驱动程序包”的一部分提供。
  • WIA(Windows 图像采集): 虽然 WIA 比 TWAIN 更受限制,但它可能对基本扫描有效。可以探索 python-wia 库 ( https://pypi.org/project/python-wia/ )。

B. 图像处理库中的 OCR:

  • 如果的最终目标是从扫描文档中提取文本,请考虑直接使用图像处理库中的 光学字符识别 (OCR) 。可以使用 pytesseract 库 ( https://pypi.org/project/pytesseract/ )(它封装了 Tesseract OCR 引擎)来执行此操作。这种方法需要首先使用扫描仪获取图像,这可以使用上述方法或手动完成。

C. 专门的扫描软件 API(如果可用):

  • 一些扫描仪软件(例如 NAPS2、VueScan)确实提供了 API 或命令行选项。如果的用户安装了这些程序,可以探索它们的文档以进行集成。

D. 作为最后的手段 - UI 自动化:

  • 这应该被视为最后的手段,因为它很脆弱且容易出错。可以使用 pyautogui 之类的库来模拟按键和鼠标点击来自动执行 Windows 传真和扫描 UI。但是,这种方法高度依赖于屏幕分辨率、UI 布局和时间安排,因此不建议在生产环境中使用。

针对 Linux 的说明:

在 Linux 上,更有可能使用 SANE 取得成功,因为它比 TWAIN 更广泛地得到支持。 python-sane 库 ( https://python-sane.readthedocs.io/ ) 提供了 Python 绑定。

重要的注意事项:

  • 用户体验: 请记住,任何需要用户交互的解决方案(例如手动保存文件或处理 UI 提示)都可能会影响用户体验。
  • 安全性: 使用 UI 自动化或执行任意命令行参数时要谨慎,因为它会带来潜在的安全风险。

总结一下,没有直接的通用方法可以使用 Python 控制 Windows 上的扫描仪。最好的方法取决于的具体要求、扫描仪的可用驱动程序/软件以及愿意在易用性和可靠性之间做出的权衡。

标签:python,linux,windows-10,scanning
From: 69906287

相关文章

  • Python,pandas从字符串中解析数字和字符串
    在Python中,我想解析一个字符串并将数字部分(可能有也可能没有小数点)作为浮点数返回,并将后缀作为字符串返回。示例为:7.1英寸->7.1,英寸7.1”->7.1,“7英寸->7.0,英寸-10dB->-10.0,dB-10.2dB->-10.2,dB数字部分和后缀之间没有空格。另外,我想将其应......
  • 如何在 Python 中加载站点的所有资源,包括 AJAX 请求等?
    我知道如何使用Python请求网站并读取其文本。过去,我曾尝试使用像BeautifulSoup这样的库来发出对网站上链接的所有请求,但这并没有得到看起来不像完整URL的内容,例如AJAX请求和大多数对原始域(因为“http://example.com”将丢失,更重要的是,它不是<ahref='url'>......
  • 使用Python进行PDF旋转
    使用python旋转扫描的pdf后,它工作得很好,但将pdf发送给第三方后,第三方仍然将pdf检测为90度pdf有什么办法可以解决旋转和这个问题importPyPDF2withopen('input.pdf','rb')asfile:#CreateaPDFreaderobjectreader=PyPDF2.PdfReader(file)......
  • Python win32serviceutil QueryServiceStatus:返回值是什么意思?
    我正在学习使用pywin32,并尝试在64位Python3.6.4上使用win32serviceutil模块以下代码:importwin32serviceutilasserviceserviceStatus=service.QueryServiceStatus("WinDefend")print(serviceStatus)返回以下元组:(16,4,197,0,0,0,0)我对wind......
  • Python request-html 未下载 Chromium
    importrequestsfrombs4importBeautifulSoupfromrequests_htmlimportHTMLSessionurl="https://dmarket.com/ingame-items/item-list/csgo-skins?title=recoil%20case"sesion=HTMLSession()response=sesion.get(url)response.html.render()soup=B......
  • VS Code 不改变 python 环境
    我正在使用VS-Code和anaconda环境作为python解释器。我通过ctrl+shift+`选择准确的anaconda基础环境,它也反映在vscode的下侧面板中。但是,当我检查python版本时,它显示我系统的默认python环境3.7.9如果您看到下面的截图,anaconda环境是3.......
  • 使用 Python 打开保存为 Parquet 文件中元数据的 R data.table
    使用R,我创建了一个Parquet文件,其中包含一个data.table作为主要数据,另一个data.table作为元数据。library(data.table)library(arrow)dt=data.table(x=c(1,2,3),y=c("a","b","c"))dt2=data.table(a=22222,b=45555)attr(dt,&......
  • Python 需要 Windows 长路径
    我尝试运行此安装:pip3installmsgraph-sdk它给了我这个错误:它说我需要使用此链接启用Windows长路径:https://learn.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=registry#enable-long-paths-in-windows-10-versi......
  • Python griddata() 和 Matlab griddata():某些网格点的结果不同
    在将一些(相当大的物理)Matlab代码转换为Python时,我偶然发现了这种情况。当对相同的二维离散数据进行插值时,Python/Scipy的griddata()函数给出的结果与Matlab的对应函数不同。griddata()Matlab示例代码:Python示例代码:%Samplepoints(x,y):7x5=3......
  • Ebay Python SDK 仅在特定项目类别上返回错误
    我在一个项目中使用ebaySDK一段时间了。最近我尝试导入一些商品,例如手表、手机壳等...并且我使用了eBay自己通过eBay返回的英国商店页面上的类别ID他们的“get_category_suggestions”API端点,但eBay似乎有选择地决定拒绝某些项目并引发服务器错误!为了测试,我做了......