pyinsane 2 中的图像扫描给出了 StopIteration 错误

Posted

技术标签:

【中文标题】pyinsane 2 中的图像扫描给出了 StopIteration 错误【英文标题】:Image Scanning in pyinsane 2 gives StopIteration error 【发布时间】:2019-12-04 16:30:44 【问题描述】:

我在 Python - Django 中使用 Pyinsane 2 通过网络 HP 打印机扫描图像。 它可以正确检测设备。 但同时给予 scan_session = device.scan(multiple=False) 它给出了 StopIteration 错误。

def scan_process(请求): 打印(“扫描”); pyinsane2.init() 尝试: 设备 = pyinsane2.get_devices() 断言(len(设备)> 0) 设备=设备[0] print("我将使用以下扫描仪:%s" % (str(device)))

    try:
        pyinsane2.set_scanner_opt(device, 'source', ['ADF', 'Feeder'])

    except PyinsaneException:
        print("No document feeder found")

    pyinsane2.set_scanner_opt(device, 'mode', ['Gray'])

    pyinsane2.maximize_scan_area(device)
    scan_session = device.scan(multiple=False)
    try:
        while True:
            try:
                scan_session.scan.read()
            except EOFError:
                print("Got a page ! (current number of pages read: %d)" % (len(scan_session.images)))
    except StopIteration:
        print("Document feeder is now empty. Got %d pages" % len(scan_session.images))
    for idx in range(0, len(scan_session.images)):
        image = scan_session.images[idx]
        image.save("teste_%d.bmp" % idx)
finally:
    pyinsane2.exit()

def scan_process(请求): 打印(“扫描”); pyinsane2.init() 尝试: 设备 = pyinsane2.get_devices() 断言(len(设备)> 0) 设备=设备[0] print("我将使用以下扫描仪:%s" % (str(device)))

    try:
        # pyinsane2.set_scanner_opt(device, 'source', ['ADF', 'Feeder'])
        pyinsane2.set_scanner_opt(device, 'source', ['ADF', 'Feeder'])

    except PyinsaneException:
        print("No document feeder found")
    # return

    # Beware: Some scanners have "Lineart" or "Gray" as default mode
    # better set the mode everytime
    pyinsane2.set_scanner_opt(device, 'mode', ['Gray'])

    # Beware: by default, some scanners only scan part of the area
    # they could scan.
    pyinsane2.maximize_scan_area(device)
    scan_session = device.scan(multiple=False)
    try:
        while True:
            try:
                scan_session.scan.read()
            except EOFError:
                print("Got a page ! (current number of pages read: %d)" % (len(scan_session.images)))
    except StopIteration:
        print("Document feeder is now empty. Got %d pages" % len(scan_session.images))
    for idx in range(0, len(scan_session.images)):
        image = scan_session.images[idx]
        image.save("teste_%d.bmp" % idx)
finally:
    pyinsane2.exit()

【问题讨论】:

【参考方案1】:

立即停止迭代意味着扫描仪报告进纸器中根本没有纸张。如果您使用的是平板扫描仪......那么这是一个错误(但总是很难说这个错误是来自驱动程序还是 Pyinsane2 本身)。

请注意,我不再维护 Pyinsane2。我建议您尝试改用 Libinsane:https://gitlab.gnome.org/World/OpenPaperwork/libinsane。

【讨论】:

如何获得 libinsane ?它在 pypi 中可用吗? 现在停止迭代错误已纠正。我现在收到错误 pyinsane2.sane.rawapi.SaneStatus data is invalid。这现在是 ADF 扫描仪。 Libinsane 主要是一个 C 库,绑定了多种语言(包括 Python):doc.openpaper.work/libinsane/latest/libinsane/install.html 关于“SaneStatus 数据无效”通常是由于 Sane 驱动程序错误。我经常用兄弟扫描仪得到它。通常关闭它们,重新启动它们并使用 Pyinsane2 重新启动/重新加载程序就可以了。 SaneStatus data is invalid" 现在使用 pyinsane2.set_scanner_opt(device, "source", ["ADF Front"]) 更正。谢谢。

以上是关于pyinsane 2 中的图像扫描给出了 StopIteration 错误的主要内容,如果未能解决你的问题,请参考以下文章

在 pyinsane 上的设备选项中设置扫描坐标

python pyinsane脚本失败

从图像或扫描文档中提取表格数据(非 pdf)

致命错误 C1083:无法打开包含文件:'atlbase.h' Pyinsane 包 [重复]

python pyinsane应用

图像滤镜---图像扫描算法