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 错误的主要内容,如果未能解决你的问题,请参考以下文章