Chinaunix首页 | 论坛 | 博客
  • 博客访问: 101961325
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: LINUX

2008-05-08 10:13:53

 

使用扫描仪如果想像一个典型的办公计算机,用户会想到运行特定程序(比如字处理程序和电子表格)的系统。桌面办公系统的原型具有有一台显示器、一个键盘、一个鼠标作为人机接口,并且连接打印机作为输出。在这个老套的桌面办公系统里缺少一个组件:扫描仪。不是每台计算机都具有或是需要扫描仪,对于很多程序来说,扫描仪都是可有可无的。通过使用扫描仪,用户可以将打印的照片转换文件,从而使用图处理形处理程序对其进行编辑,也可以将文档转换为文字处理文件。用户什至可以利用扫描仪(在打印机和调制解调器的协助下) 将计算机变成一台复印机和传真机。

在Linux下扫描仪需要两种主要的支持类型:对底层接口的支持,比如SCSI或USB;以及对特定扫描仪型号的支持。Linux的主要扫描仪程序包Scanner Access Now Easy(SANE),它包含很多扫描仪的驱动程式。用语可以把SANE当做单独的程序进行配置和使用,也可以在其他软件中调用它。用户什至可以配置SANE来实现通过网络进行操作,从而让多台计算机共享一台扫描仪,就像共享打印机一样。
查找扫描仪支持

很多主流Linux里都包含SANE,如果用户想得到最新的版本,可以查看SANE的Web主页:。这个站点还包含相应扫描仪的信息。所有的支持被分为stable(稳定的:经过测试并且工作正常)、beta(beta测试版:工作情况相当不错)、alpha(alpha测试版:非常新的支持,可能包含重大错误)、untested 未测试的:理论上是可行的,但没有经过测试)和unsuppoted(不支持的:不能正常工作)。有些设备可能不被某个驱动程序支持,但可以使用其他驱动程序。

如果征官方SANE站点不能找到需要的扫描仪驱动程序,您可以在Web上进行搜索,这样可能会发现没有被被收集到SANE主程序包里的试验驱动程序。如果用户的扫描仪是USB摸式的,还呵以查看。这个站点包含了关于USB开发的信息,还具有指向新驱动程序的链接。很多新的和试验性的驱动程序并不是很稳定,它们可能还需要用户重新编译SANE的源代码。如果找不到驱动程序,您最好淘汰先有的扫描仪并且购兴一个新的。

配置扫描仪软件

从根本上讲SANE是一个应用程序接口(API),它提供了一组例程,其他程序可以调用这些例程来使用任何扫描仪。SANE主要由三个部分组成:

● 实现API的库(也就是“中间件”或“后端程序的后端”)

● 访问扫描仪的驱动程序(也就是“后端程序”)

● 调用SANE API的程序(也就是“前端程序”)

不同的前端程序可能能是差别很大的。举例来说,文本模式的前端程序能够在命令行下进行扫描,而基于X窗口的前端程序提供GUI预览扫描和其它常见扫描特性。

配置SANE的工作主要是为扫描仪设置正确的后端程序,这是通过编辑两个文件来完成的:

/etc/sane.d/dll.conf这个文件包含了SANE后端程序的列表,SANE在被调用时可能搜索这个列表。后端程序通常是以扫描仪制造商来命名的,有时会附加型号数字,比如mustek或umaxl220u。文件中以井号“#”开始的行是注释,在执行程序时它们会被忽略。

特定扫描仪的配置文件 除了dll.conf文件之外,/etc/sane.d目录里还包含特定扫描仪的配置文件。这些文件是根据后端程序进行命名的,后缀是.conf,比如mustek.conf或umax1220u。在大多数情况下用户不需要调整这些文件,然而有时用户可以调整这些设置来提高扫描仪的性能。大多数都包含描述参数的说明,按照说明修改一些参数可以改变扫描仪的性能。

说明:所有主流Linux将SANE配置存放在/etc/sane.d,然而如果用户在没有改变默认设置的情况下重新编译SANE的源代码,这些文件将会被保存在/usr/local/etc/sane.d。

用户可以通过输人两个命令来查看可用的扫描仪。第一个命令是sane-find-scanner,这个命令在本地扫描仪接口搜索本地扫描仪,其结果可能是一个或多个输出行,指明了扫描仪所在的设备文件名,比如/dev/usb/scanner0(设备文件之间的符号化链接或重复的设备文件有时会让扫描仪出现两次)。如果sane-find-scanner没有发现肯定存在的扫描仪,请确定它是否连接到了计算机并且打开它,同时还要检查是否加载了合适的驱动程序。USB扫描仪需要scanner驱动程序,SCSI扫描仪需要SCSI主适配器的驱动程序和SCSI类(sg)驱动程序,并口扫描仪需要Linux并口支持(parpor, 在IA-32系统上还需要parport_pc)。sane-find-scanner程序不能检测网络扫描仪(关于这个问题请参见后面的小节“网络扫描”)。

当确定了扫描仪硬件可以访问之后,用户可以查看SANE是否正确地识别了扫描仪型号,为此可以输入scanimage -L命令。这个命令调用scanimage前端程序,这个程序通常是用于扫描图像的,然而在使用了-L参数后,这个程序只是识别可用的扫描仪。如果一切工作正常,用户会看到如下信息:

device ‘umaxl220u:/dev/usb/scanner0’is a UMAX Astra 1220U flatbed scanner

大多数提供SANE配置的Linux在默认情况下关闭了大多数或全部扫描仪。如果scanimage -L命令没有得到希望的结果,用户可以查看/etc/sane.d/dll.conf,并且删除相应后端程序行前面的注释标记。如果需要添加很新的后缀程序,用户应该根据它提供的指令进行操作。Red Hat在这方面是与众不同的,它为很多描仪提供未被注释的配置,因此在安装之后不需要修改就可以正常工作。然而这种设置会稍微降低扫描仪检测的速度。

用户还需要注意另一个配置细节:设备文件权限。设备文件(比如/dev/usb/scanner0,这是前一个例子里scanimage -L返回的结果)对于所有使用扫描仪的用户必须都是可读可写的。很多Linux在默认情况下将这些设置为全局可读可写的,但用户还是应该查看它的设置是否正确。如果文件权限没有设置全局可读可写,用户可以使用chmod来改变权限。如果这个文件属于具有可读可写权限的特殊的扫描仪组,那么就可以将需要使用扫描仪的用户添加到这个组。

实现基本扫描

在scanimage -L命令能够发现扫描仪之后,用户就可以真正使用扫描仪了。由于SANE从技术上讲是个API而不是个程序,用户使用SANE的方式取决于访问SANE的程序。在使用这些程序时需要注意的一个细节是扫描仪的“设备名称”,虽然设备文件包含设备标识符,但“设备名称”不仅仅是设备文件(在/dev目录树里)。设备名称是由后端程序名、一个冒号和设备文件名组成的。举例来说,这个名称可能是mustek:/dev/sg2或umaxl220u:/dev/usb/scanner0。这是由scanimage -L返回的名称。

下面介绍一些常见的基本扫描仪程序包:

scanimage这个程序是SANE的文本模式前端程序,它能够处理很多选项(详细内容请查看它的手册页),但是只需要输入scanimage -d device > scanfile.pnm命令就可以执行基本的扫描操作,其中device是设备名称,比如mustek:/dev/sg2。输出文件是Portable Anymap(PNM)格式,用户可以使用- -format format选项修改输出文件格式。虽然这个程序是一个前端程序,但它通常包含在SANE后面程序包里。

xscanimagc 这个程序是SANE的基本GUI前端程序,它的功能与scanimage类似,但它使用GUI控件来访问大多数选项。它通常是SANE前端程序包的组成部分(sane或sane fontends)。

Xsane这个程序并不是SANE主程序包的组成部分,但却是紧密相关的。它是基于X窗口的前端程序,具有更多的特性。它的站点是。大多数Linux提供了名为xsane的程序包。

Kooka 这是使用K Desktop Environment(KDE) 的前端程序。Kooka提供图象管理的功能和库文件,可以为其他KDE应用程序提供Kooka类型的扫描。详细内容请查看。


还有其他一些基于SANE的特殊扫描程序,比如xcam用SANE作为与相机的接口)和scanadf(支持通过自动文档进纸器进行的扫描)。在下面的“网络扫描”小节里会介绍一种不常见的SANE应用。

我们将XSane作为使用SANE的范例。使用XSane扫描档的步骤如下所示:

1. 输入xsane来加载这个程序。它可能会询问用户使用哪一个扫描仪,即使只有一个描仪时也可能是这样,因为程序可能使用多余的设备文件来检测扫描仪。在这种情况下,用户选择哪个扫描仪都是一一样的。XSane 具有多个窗口,如图3.4所示。从左下角开始按照顺时针方向依次是选项窗口、主把控制窗口、颜色柱状图窗口和预览窗口。从主控制窗口里的View菜单里,用户可以打开或关闭这些窗口,以及其他默认时没确显示的窗口。




图3.4 Xsane提供了多个窗口,用户可以输入扫描的选项和控制


2. XSane在默认情况下启动为Viewer(查看器)模式,这意味着当用户开始扫描时,程序会打开另一个窗口来显示扫瞄的情况,然后用户可以在查看器里操纵和保存扫描的图像。在主控制窗口上方的Sane Mode(XSane模式)选项型可以选择其他模式。在这个范例里需要选择Save(保存)。,这个选项让用户能够将扫描结果保存到一个文件。主控制窗口会进行扩展,从而显示出输入文件名和文件类型的字段。

3. 如果默认的out.pnm不是需要的文件名,用户可以在文件名字段里输入更好的名称,或是单击窗口里像软盘一样图标从而在文件选择对话框里选择一个文件名。

4. 在主控制窗口里的分辨率选择钮里选择扫描分辨率(图3.4中的设置为150)。有些扫描 仪使用滑块设置扫描分辨率。

5.如果文档是灰度级的,比如黑白照片,用户可以在选项窗口里单击Grayscale Scan(灰度扫描)框。有些扫描仪还提供额外的位深度或线条选项。

6.将需要扫描的文档放置到扫描仪的平板上。

7.在预览窗口里单击Acquire view(获取预览)按钮,这时扫描仪应该开始进行操作,以低分辨率进行扫描,并且在预览窗口里显示结果。

8.如果用户不想扫描整页内容,可以在预览窗口里用鼠标选择需要的区域,就像在其他图像程序中所做的操作一样。

9.单击主控制窗口里的Scan(扫描)按钮。XSane应该开始扫描文档,并且将扫描结果保存到用户在第3个步骤指定的文件。

10.如果需要扫描更多的文档,用户只需要重复第3到第9个步骤。否则可以选择File►Quit来退出这个程序。

在XSane里用户可以设置一些额外的属性。举例来说,用户可以使用XSane Mode选项选择扫描结果的发送目的地(使用Copy项形成影印结果、使用Fax选项传真文档、使用E-mail选项把文档用电子邮件发送出去) 用户还可以使用主控制窗口里的滑块调整亮度、对比和伽马值。有些选项只适用于特定的扫描仪,因此用户看到的选项可能与图3.4不同。

说明:在使用某些扫描仪时,当用户退出SANE前端程序时SANE会关闭扫描仪的灯。很多SANE前端程序也提供了手工关闭扫描仪灯的方式,比如图3.4中选项窗口里的Lamp Off 按钮。有些扫描仪只有在关闭扫描仪时才套会关灯。


将扫描仪集成到其他软件

由于SANE是个API,因此在理论上所有程序都可以调用SANE来实现扫描。当然对于某些程序来说实现这种效果比其他程序更有意义。这种编程工作包括调用SANE、让用户访问SANE选项,这意味着提供扫描仪访问的程序通常使用另一个程序包提供的接口工具集。举例来说,GNU Image Manipulatio Program(GIMP)使用XSane接口,Kooka提供的工具可以作为基于KDE的程序与扫描仪接口。

非扫描仪程序的扫描工作细节是不同的。在GIMP里,用户从File►Acquire菜单里选择扫描仪选项(具有多台扫描仪时会有多个选项),其结果通常如图3.4所示XSane窗口,似是主控制窗口里没有XSane Mode选项。以这种方法扫描的结果直接进入GIMP窗口,用户就可以像处理其他图像一样对其进行操作了 (在往后的另一篇文章里,我将会详细地介绍GIMP)。


图像转化为文本:OCR

扫描仪从本质上讲是个图形设备,它的输出是位图图形数据流,能够很方便地在X窗口里显示,也能够保存到图形文件。然而有时候我们扫描一个文档的目的是将其转化为文本,从而使用文字处理程序编辑它、将数据加载到电子表格或是以非图形方式进行处理。为了实现这个目的,就产生了“光学字符识别(OCR)”程序。这些程序以图形文件作为输入,生成输入文件所包含字符的文本文件。基本上来说,OCR程序“取”输入文件的字符。然而这对于计算机程序来说是相当复杂的,这些软件必须克服很多障碍,其中包括输入文件上的条纹和斑点、不同字体的体的字符在外观和尺寸上的变化、字符中夹夹的非文本信息(比如内嵌的图像)。因此OCR软件总是有一定缺陷的,但它的性能还是相当好的,值得一用。通常情况下,用户可以扫瞄文档,然后与原始文档进行对比,进行适当的修改。下面介绍一些主要的
Linux OCR软件包:

Clara这个程宇来自于,它倾向于完成大规模的OCR项目,比如将印刷的书籍转化为数字格式。这个程序包含基于X窗口的GUI,但它没有与扫描仪的直接接口。因此用户必须首先将文档扫描为文件,然后使用Clara处理这些文件。

GOCR这个程序来自于,它是在命令行运行的OCR程序,因此它可以被其也程序调用,比如XSane或Kooka,从而让其它程序具有OCR功能。

OCR Shop还是Linux下的商业OCR软件包,它比开放源码的Clara或GOCR更加成熟,但是价格不菲,入门级软件包的价格大约是1500美元。OCR Shop不使用SANE作为后端程序,因此在购买这个软件之前要确保它支持用户使用的扫描仪。详细信息可以查看。

作为一个OCR的范例,我们使用来自XSane的GOCR。操作步骤如下:

1.根据需要安装GOCR软件包。

2.加载XSane,将XSane Mode设置为Viewer。用户将把图形扫描到查看器里,然后让查看器运行GOCR。

3.将XSane设置为获取灰度或线条图像。

4.单击预览窗口里的Acquire Preview按钮来获取预览图象。

5.在预览窗口里选中要扫描的文档部分。

6.将扫描分辨率设置在150dpi到300dpi之间,这样会得到最佳的OCR结果。

7.单击Scan按钮来扫描文档。XSane会打开一个窗口来显示描的文档,这个窗口可能是很大的。

8.在扫描得到的文档窗口里选择File►OCR - Save as Text,程序会显示一个文件选择对话框,用户可以输入适当的文件名。


9.在文件选择对话框里输入文件名并且单击OK按钮。XSane不会有任何标记来表示GOCR正在运行,但它的确在运行。几秒钟之后,用户指定的文件就会创建完毕,其中包含着对应于扫描文档的文本。

GOCR的输出结果不一定总是满足用户要求的。在编写文章时,GOCR的版本是0.37,也就是说它是一个很早的版本。随着版本的提高,它的精确度也应该相应提高,因此如果OCR对于用户来说是十分重要,就应该常查看GOCR的站点。用户可以通过调整各种扫描参数来提高GOCR的精确度,比如调整分辨率、对比和亮度。


网络扫描

SANE在设计时就考虑到了灵活性,特别是由单独的后端程序、SANE库和前端程序构成SANE的方法,让我们可以方便地用特殊方法将组件连接在一起。像scanimage这种文本模式下的扫描程序就是这种效果的一个很好的例子。另一个更生动的例子是SANE通过网络处理扫描的能力。举例来说,如果用户需要配置一组计算机,比如大学计算机中心的公共工作站,或是同一间办公室里两个职员使用的两台计算机;但是只有一台扫描仪,而且房间的大小使得屋内所有人都能够实际使用这台扫描仪。利用SANE,用户可以将扫描仪连接到一台计算机上,并且让屋内所有计算机都可以使用扫描仪,就像扫描仪直接连接到每台计算机上一样。

警告:网络扫描需要在连接扫描仪的算机上运行服务程序,这种操作会引入一定的危险,因此用户在实施网络扫描配置时应该多加小心。用户应该使用防火墙、TCP Wrappers或xinetd 全选项来限制对扫描仪服务器的访问。


建立网络扫描需要在每台计算机上进行不同的配置。最复杂的配置工作在于服务器端—直接连接扫描仪的计算机。这个系统必须运行SANE服务程序,它就是一个“中间件”,它位于控制扫描仪的后端程序与客户计算机上的前端程序之间。这个SANE服务程序被称为saned,大多数Linux将其保存在/usr/sbin。用户应该将它配置为从超级服务程序(比如inetd或xinetd)上运行。具体操作步骤如下:

1.配置扫描仪,使它能够在服务器上正常工作,具体方法参见前面的“配置扫描仪软件”小节。

2.检查是否安装了saned。它通常是sane或sane-backends软件包的一部分。如果它还没有被安装,用户就要找到并且安装适当的软件包。

3.根据需要在/etc/services下添加SANE端口的条目。有些Linux具有这个条目,而有些没有。如果这个条目不存。就添加如下内容:

sane 6556/tcp # SANE network scanner access

4.为saned创建一个超级服务程序配置。

A.Debian、Slackware和SuSE都默认使用inetd。/etc/inetd.conf中用于saned的设置如下所示,但用户应该使用自己系统上的用户名和组。

sane stream tcp nowait saned.saned /usr/sbin/saned saned

B.Mandrake和Red Hat都使用xinetd作为超级服务程宇。对于这些Linux,用户应该创建一个包含如下内容的/etc/xinetd.d/saned文件:

service sane
{
disable =no
socket_type=stream
protocol =tcp
wait =no
user =saned
group =saned
server =/usr/sbin/saned
}

5.向超级服务程序传递SIGHUP信号。输入ps ax | grep inetd 令来查找进程ID (PID)号码,然后输入kill -SIGHUP pid命令,其中pid是前面找出的PID号码。

6.确保加载saned时超级服务程序所使用的用户或组存在,并且能够访问扫描仪文件。这个用户最好不具有计算机上的其他权限,而且根本就不能登录。

7.在/etc/sane.d/saned.conf文件里添加能够访问扫描仪的主机名称,每台主机占据文件的一行。这个文件是saned使用的主要访问控制方法。

现在saned服务程序应该能够对扫描请求产生响应了,但是我们需要告诉客户端如何访问这个服务程序。为此,用户需要执行如下配置过程:

1.在客户端下的/etc/sane.d/dll.conf文件中添加net选项,这个选项告诉客户端上的SANE库搜索网络扫描仪。

2.编辑客户端上的/etc/sane.d/net.conf文件,添加SANE服务程序的主机名称。

现在客户端可以访问扫描仪了。sane-find-scanner程序不能工作,但scanimage -L能够发现网络扫描仪:

$ scanimage -L
device ‘net:scan.luna.edu:umaxl220u:/dev/usb/scanner0’is a UMAX Astra 1220U
→flatbed scanner

我们注意到扫描仪的设备名称增加了两个元素:标识符以关键字net开始,在关键字之后是服务程序所在的主机名。用户可以将完整的扫描仪设备名称传递给需要使用扫描仪的前端程序,也可以依靠象XSane这类程序的自动检测机能。

提示:用户可以从非Linux操作系统上访问基于SANE服务的网络扫描仪。在 上用户可以找到用于各种操作系统的SANE前端程序的链接。特别值得注意的是用于Windows的前端程序,它们能够用于很多Windows的扫描程序。


小结

外围设备通过各种端口连接到计算机,但最广泛使用而且非常灵活的三种端口是USB、RS-232串口和并行端口。总的来说,这些端口支持键盘、鼠标、调制解调器、扫描仪、打印机、移动磁盘和其它很多设备。了解如何优化这些端口有助于发挥外围设备的最佳性能。作为基术的输入设备,键盘和鼠标的配置对系统操作来说是特别重要的,用户可以利用几个配置文件和命令来调整键盘重复速率、键盘布局和支持滚轮鼠标等设置。扫描仪只是众多外围设备中的一种,但它们约配置通常不如其他设备(比如打印机)那样明显。幸运的是,Linux在它的SANE软件包里寸扣描仪提供了很好的支持,只要Linux支持用户所使用的扫描仪,用户只需要对配置文件进行少许修改就可以在Linux下扫描图像了。



[美] Roderick W.Smith
王军 等译
阅读(1145) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~