我正在使用 HP PSC 1610 一体式打印机通过 scanimage 扫描 Raspberry Pi 3 A+ (512MB RAM) 上的图像。扫描在较低分辨率(100 和 200 dpi)下工作良好,但当分辨率高于 300 dpi 时,扫描过程开始但突然停止,并出现错误 scanimage:
sane_read: Error during device I/O.
最初,我认为此错误与超时有关,因为以 600 dpi 进行扫描比以 1200 dpi 进行扫描更进一步。但是,现在我猜这一定是内存错误,因为我尝试设置
export SANE_TIMEOUT=30000
,然后创建 hpaio.conf 文件设置了 dumb-read
和 connection-timeout
属性。没有任何改变
我尝试创建更多交换,但似乎没有太大区别。
我尝试使用
hp-scan
(安装 hplip
后)和 pyinsane2
进行扫描 - 没有任何变化。
我还尝试更改缓冲区大小(在 scanimage --buffer-size 上),但仍然没有任何反应。
有谁知道如何解决这个问题?还是我真的被低分辨率困住了?
编辑 1 - 收到的建议是:
free -h
会输出有 230Mb 的可用 RAM。考虑到我的 Pi 上什至没有 DE,这正常吗?我感谢任何帮助
几天后我找到了这个问题的“解决方案”;或者更确切地说,是一个临时解决方案。而且还挺出乎意料的……
在我的 Raspberry Pi 上,我尝试更改 SD 卡(更改为 32 GB)以创建更多交换空间。扫描仪仍然无法完成这项工作。我也尝试过扫描部分图像,但花了很长时间。
然后,为了测试/确保我没有遗漏任何东西,我测试了
xsane
。而且...成功了!?我仍然不明白为什么在 GUI(标准树莓派桌面)上运行的 xsane 可以工作,而在命令行(没有 DE)上运行 scanimage
却不能。我最好的猜测是 xsane 对 sane-backend
具有较低级别的访问权限和更好的内存管理,因此程序本身在必要时可以分段扫描图像并将它们连接起来,而无需停止扫描仪,从而允许它扫描在预期/正常时间内以高分辨率完成图像。
但是,有时如果缓存压力太大或交换空间太小,它会无法完成作业并输出 I/O 错误。当缓存压力在70%左右且系统有4GB的swap时,不会发生错误。
现在,关于 @MarkSetchell 将图像与各种扫描结合起来的想法,令我担心的是扫描仪不会从与上一个条纹完全相同的位置恢复扫描(因为 1200dpi 的分辨率约为 21μm/像素) )。但是,对于那些可能需要使用此方法的人,请不要担心,因为如果您将条纹配置为垂直于扫描仪的移动方向,这根本不会成为问题。
如果有人找到命令行 scanimage 方法的明确解决方案,我们将不胜感激。
谢谢您的帮助