sane-bh - SANE backend for Bell+Howell Copiscan II series document
scanners
The sane-bh library implements a SANE (Scanner Access Now
Easy) backend that provides access to Bell+Howell Copiscan II series
document scanners. The Copiscan II 6338 has been the primary scanner model
used during development and testing, but since the programming interface for
the entire series is consistent the backend should work for the following
scanner models:
COPISCAN II 6338 Duplex Scanner with ACE
COPISCAN II 2135 Simplex Scanner
COPISCAN II 2137(A) Simplex Scanner (with ACE)
COPISCAN II 2138A Simplex Scanner with ACE
COPISCAN II 3238 Simplex Scanner
COPISCAN II 3338(A) Simplex Scanner (with ACE)
If you have a Bell+Howell scanner and are able to test it with
this backend, please contact sane-devel@alioth-lists.debian.net with
the model number and testing results. Have a look at
http://www.sane-project.org/mailing-lists.html concerning
subscription to sane-devel. Additionally, the author is curious as to the
likelihood of using this backend with the newer 4000 and 8000 series
scanners. If you have such a beast, please let me know.
The Bell+Howell Copiscan II series document scanners are high
volume, high throughput scanners designed for document scanning
applications. As such, they are lineart/grayscale scanners supporting a
fixed number of fairly low resolutions (e.g. 200/240/300dpi). However, they
do have a number of interesting and useful features suited to needs of
document imaging applications. This backend attempts to support as many of
these features as possible.
The main technical reference used in writing this backend is the
Bell and Howell Copiscan II Remote SCSI Controller (RSC) OEM
Technical Manual Version 1.5. The Linux SCSI programming HOWTO, the
SANE API documentation, and SANE source code were also extremely valuable
resources.
The latest backend release, additional information and helpful
hints are available from the backend homepage:
http://www.martoneconsulting.com/sane-bh.html
This backend expects device names of the form:
special
Where special is the path-name for the special device that
corresponds to a SCSI scanner. For SCSI scanners, the special device name
must be a generic SCSI device or a symlink to such a device. Under Linux,
such a device name takes a format such as /dev/sga or
/dev/sg0, for example. See sane-scsi(5) for details.
- Scan Mode
Options:
- --preview[=(yes|no)]
[no]
- Request a preview-quality scan. When preview is set to yes image
compression is disabled and the image is delivered in a
SANE_FRAME_GRAY frame.
- --mode lineart|halftone
[lineart]
- Selects the scan mode (e.g., lineart,monochrome, or color).
- --resolution
200|240|300dpi [200]
- Sets the resolution of the scanned image. Each scanner model supports a
list of standard resolutions; only these resolutions can be used.
- --compression
none|g31d|g32d|g42d [none]
- Sets the compression mode of the scanner. Determines the type of data
returned from the scanner. Values are:
none - uncompressed data - delivered in a SANE_FRAME_GRAY frame
g31d - CCITT G3 1 dimension (MH) - delivered in a SANE_FRAME_G31D frame
g32d - CCITT G3 2 dimensions (MR, K=4) - delivered in a SANE_FRAME_G32D
frame
g42d - CCITT G4 (MMR) - delivered in a SANE_FRAME_G42D frame
NOTE: The use of g31d, g32d, and g42d compression values
causes the backend to generate optional frame formats which may not be
supported by all SANE frontends.
- Geometry
Options:
- --autoborder[=(yes|no)]
[yes]
- Enable/Disable automatic image border detection. When enabled, the RSC
unit automatically detects the image area and sets the window geometry to
match.
- --paper-size
Custom|Letter|Legal|A3|A4|A5|A6|B4|B5 [Custom]
- Specify the scan window geometry by specifying the paper size of the
documents to be scanned.
- --tl-x 0..297.18mm
[0]
- Top-left x position of scan area.
- --tl-y 0..431.8mm
[0]
- Top-left y position of scan area.
- --br-x 0..297.18mm
[297.18]
- Bottom-right x position of scan area.
- --br-y 0..431.8mm
[431.8]
- Bottom-right y position of scan area.
- Feeder
Options:
- --source Automatic
Document Feeder|Manual Feed Tray [Automatic Document Feeder]
- Selects the scan source (such as a document feeder). This option is
provided to allow multiple image scans with
xsane(1);ithasnootherpurpose.
- --batch[=(yes|no)]
[no]
- Enable/disable batch mode scanning. Batch mode allows scanning at maximum
throughput by buffering within the RSC unit. This option is recommended
when performing multiple pages scans until the feeder is emptied.
- --duplex[=(yes|no)]
[no]
- Enable duplex (dual-sided) scanning. The scanner takes an image of each
side of the document during a single pass through the scanner. The front
page is delivered followed by the back page. Most options, such as
compression, affect both the front and back pages.
- --timeout-adf 0..255
[0]
- Sets the timeout in seconds for the automatic document feeder (ADF). The
value 0 specifies the hardware default value which varies based on the
scanner model.
- --timeout-manual
0..255 [0]
- Sets the timeout in seconds for semi-automatic feeder. The value 0
specifies the hardware default value which varies based on the scanner
model.
- --check-adf[=(yes|no)]
[no]
- Check ADF Status prior to starting scan using the OBJECT POSITION command.
Note that this feature requires RSC firmware level 1.5 or higher and dip
switch 4 must be in the on position. NOTE: This option has not been tested
extensively and may produce undesirable results.
- Enhancement:
- --control-panel[=(yes|no)]
[yes]
- Enables the scanner's control panel for selecting image enhancement
parameters. When the option is set to no the following options are used to
control image enhancement. See the Bell+Howell scanner users' guide for
complete information on ACE functionality.
- --ace-function -4..4
[3]
- Specify the Automatic Contrast Enhancement (ACE) Function.
- --ace-sensitivity 0..9
[5]
- Specify the Automatic Contrast Enhancement (ACE) Sensitivity.
- --brightness
0..255 [0]
- Controls the brightness of the acquired image. Ignored for ACE capable
scanners.
- --threshold
0..255 [0]
- Select minimum-brightness to get a white point. Ignored for ACE capable
scanners.
- --contrast 0..255
[inactive]
- Controls the contrast of the acquired image. This option is not currently
used by the scanner (and perhaps never will be).
- --negative[=(yes|no)]
[no]
- Swap black and white, yielding a reverse-video image.
- Icon:
- --icon-width 0..3600pel (in
steps of 8) [0]
- Width of icon (thumbnail) image in pixels.
- --icon-length
0..3600pel (in steps of 8) [0]
- Length of icon (thumbnail) image in pixels.
- Barcode
Options:
- --barcode-search-bar
<see list> [none]
- Specifies the barcode type to search for. If this option is not specified,
or specified with a value of none, then the barcode decoding feature is
completely disabled. The valid barcode type are:
none
ean-8
ean-13
reserved-ean-add
code39
code2-5-interleaved
code2-5-3lines-matrix
code2-5-3lines-datalogic
code2-5-5lines-industrial
patchcode
codabar
codabar-with-start-stop
code39ascii
code128
code2-5-5lines-iata
- --barcode-search-count
1..7 [3]
- Number of times that the RSC performs the decoding algorithm. Specify the
smallest number possible to increase performance. If you are having
trouble recognizing barcodes, it is suggested that you increase this
option to its maximum value (7).
- --barcode-search-mode
<see list> [horiz-vert]
- Chooses the orientation of barcodes to be searched. The valid orientations
are:
horiz-vert
horizontal
vertical
vert-horiz
- --barcode-hmin
0..1660mm [5]
- Sets the barcode minimum height in millimeters (larger values increase
recognition speed). Of course the actual barcodes in the document must be
of sufficient size.
- --barcode-search-timeout
20..65535us [10000]
- Sets the timeout for barcode searching in milliseconds. When the timeout
expires, the decoder will stop trying to decode barcodes.
- --section
<string> []
- Specifies a series of image sections. A section can be used to gather a
subset image or to provide a small area for barcode decoding. Each section
is specified in the following format (units are in millimeters):
<width>x<height>+<top-left-x>+<top-left-y>[:functioncode...]
Multiple sections can be specified by separating them with
commas.
For example 76.2x25.4+50.8+0:frontbar identifies an area 3
inches wide and 1 inch high with a top left corner at the top of the page
two inches from the left hand edge of the page. This section will be used
for barcode decoding on the front page only.
For example 50.8x25.4+25.4+0:frontbar:front:g42d identifies
an area 2 inches wide and 1 inch high with a top left corner at the top of
the page one inch from the left hand edge of the page. This section will be
used for barcode decoding on the front page as well as generating an image
compressed in g42d format.
Ordinarily barcodes are searched in the entire image. However,
when you specify sections all barcode searching is done within the specific
sections identified. This can significantly speed up the decoding
process.
The following function codes are available:
front - generate an image for the front page section
back - generate an image for the back page section
frontbar - perform barcode search in front page section
backbar - perform barcode search in back page section
frontpatch - perform patchcode search in front page section
backpatch - perform patchcode search in back page section
none - use no image compression
g31d - use Group 3 1 dimension image compression
g32d - use Group 3 2 dimensions image compression
g42d - use Group 4 2 dimensions image compression
If you omit a compression functioncode, the full page compression
setting is used. If you specify multiple compression functioncodes, only the
last one is used.
- --barcode-relmax
0..255 [0]
- Specifies the maximum relation from the widest to the smallest bar.
- --barcode-barmin
0..255 [0]
- Specifies the minimum number of bars in Bar/Patch code.
- --barcode-barmax
0..255 [0]
- Specifies the maximum number of bars in a Bar/Patch code.
- --barcode-contrast
0..6 [3]
- Specifies the image contrast used in decoding. Use higher values when
there are more white pixels in the code.
- --barcode-patchmode
0..1 [0]
- Controls Patch Code detection.
The contents of the bh.conf file is a list of device names
that correspond to Bell+Howell scanners. See sane-scsi(5) on details
of what constitutes a valid device name. Additionally, options can be
specified; these lines begin with the word "option". Each option
is described in detail below. Empty lines and lines starting with a hash
mark (#) are ignored.
The following options can be specified in the bh.conf
file.
- disable-optional-frames
- This option prevents the backend from sending any optional frames. This
option may be useful when dealing with frontends which do not support
these optional frames. When this option is in effect, the data is sent in
a SANE_FRAME_GRAY frame. The optional frames sent by this backend
are: SANE_FRAME_G31D, SANE_FRAME_G32D,
SANE_FRAME_G42D and SANE_FRAME_TEXT. These frames are
generated based on the compression and barcode options. These frames are
never sent in preview mode.
- fake-inquiry
- This option is used for debugging purposes and its use is not encouraged.
Essentially, it allows the backend to initialize in the absence of a
scanner. This is useful for development and not much else. This option
must be specified earlier in the configuration file than the devices which
are to be "faked".
- /etc/sane.d/bh.conf
- The backend configuration file (see also description of
SANE_CONFIG_DIR below).
- /usr/lib/x86_64-linux-gnu/sane/libsane-bh.a
- The static library implementing this backend.
- /usr/lib/x86_64-linux-gnu/sane/libsane-bh.so
- The shared library implementing this backend (present on systems that
support dynamic loading).
- SANE_CONFIG_DIR
- This environment variable specifies the list of directories that may
contain the configuration file. On *NIX systems, the directories are
separated by a colon (`:'), under OS/2, they are separated by a semi-colon
(`;'). If this variable is not set, the configuration file is searched in
two default directories: first, the current working directory
(".") and then in /etc/sane.d. If the value of the
environment variable ends with the directory separator character, then the
default directories are searched after the explicitly specified
directories. For example, setting SANE_CONFIG_DIR to
"/tmp/config:" would result in directories tmp/config,
., and /etc/sane.d being searched (in this order).
- SANE_DEBUG_BH
- If the library was compiled with debug support enabled, this environment
variable controls the debug level for this backend. E.g., a value of 255
requests all debug output to be printed. Smaller levels reduce verbosity.
- ADF support
- With document scanners, automatic document feeder (ADF) support is a key
feature. The backend supports the ADF by default and returns
SANE_STATUS_NO_DOCS when the out-of-paper condition is detected.
The SANE frontend scanadf(1) is a command line frontend that
supports multi-page scans. It has been used successfully with this
backend. The SANE frontend xsane(1) is an improved GUI frontend by
Oliver Rauch. Support for multi-page scans is included in xsane version
0.35 and above.
- Duplex
scanning
- Some models, such as the COPISCAN II 6338, support duplex scanning. That
is, they scan both sides of the document during a single pass through the
scanner (the scanner has two cameras). This backend supports duplex
scanning (with the --duplex option). The front and back page images
are delivered consecutively as if they were separately scanned pages.
- Hardware
compression
- The scanner is capable of compressing the data into several industry
standard formats (CCITT G3, CCITT G3-2D, CCITT G4). This results in
increased performance as less data is passed from the scanner to the host
over the SCSI bus. The backend supports these compression formats via the
--g31d, --g32d, --g42d options, respectively. Many SANE frontends
are not equipped to deal with these formats, however. The SANE frontend
scanadf(1) supports these optional frame formats. The compressed
image data is written directly to a file and can then be processed by a
scan-script using the --scan-script option. Examples of this are
given on the scanadf(1) homepage.
- Automatic Border
Detection
- The scanner can automatically detect the paper size and adjust the
scanning window geometry appropriately. The backend supports this useful
feature with the --autoborder option. It is enabled by default.
- Batch Mode
Scanning
- The batch scan mode allows for maximum throughput. The Set Window
parameters must remain constant during the entire batch.
- Icon
Generation
- The Icon function generates a thumbnail of the full page image, that can
be transferred as if it were a separate page. This allows the host to
quickly display a thumbnail representation during the scanning operation.
Perhaps this would be a great way of implementing a preview scan, but
since a normal scan is so quick, it might not be worth the trouble.
- Multiple
Sections
- Multiple sections (scanning sub-windows) can be defined for the front and
back pages. Each section can have different characteristics (e.g.
geometry, compression). The sections are returned as if they were
separately scanned images. Additionally sections can be used to greatly
enhance the accuracy and efficiency of the barcode/patchcode decoding
process by limiting the search area to a small subset of the page. Most
Copiscan II series scanners support up to 8 user-defined sections.
- Support
Barcode/Patchcode Decoding
- The RSC unit can recognize Bar and Patch Codes of various types embedded
in the scanned image. The codes are decoded and the data is returned to
the frontend as a text frame. The text is encoded in xml and contains a
great deal of information about the decoded data such as the location
where it was found, its orientation, and the time it took to find. Further
information on the content of this text frame as well as some barcode
decoding examples can be found on the backend homepage.
- Decoding a single
barcode type per scan
- The RSC unit can search for up to six different barcode types at a time.
While the code generally supports this as well, the
--barcode-search-bar option only allows the user to specify a
single barcode type. Perhaps another option which allows a comma separated
list of barcode type codes could be added to address this.
- Scanning a fixed
number of pages in batch mode
- The separation of front and back end functionality in SANE presents a
problem in supporting the 'cancel batch' functionality in the scanner. In
batch mode, the scanner is always a page ahead of the host. The host,
knowing ahead of time which page will be the last, can cancel batch mode
prior to initiating the last scan command. Currently, there is no
mechanism available for the frontend to pass this knowledge to the
backend. If batch mode is enabled and the --end-count terminates a
scanadf session, an extra page will be pulled through the scanner, but is
neither read nor delivered to the frontend. The issue can be avoided by
specifying --batch=no when scanning a fixed number of pages.
- Revision 1.2 Patch
detector
- There is an enhanced patchcode detection algorithm available in the RSC
with revision 1.2 or higher that is faster and more reliable than the
standard Bar/Patch code decoder. This is not currently supported.
This is a new backend; detailed bug reports are welcome -- and
expected ;)
If you have found something that you think is a bug, please
attempt to recreate it with the SANE_DEBUG_BH environment variable
set to 255, and send a report detailing the conditions surrounding the bug
to sane-devel@alioth-lists.debian.net.
The sane-bh backend was written by Tom Martone, based on
the sane-ricoh(5) backend by Feico W. Dillema and the bnhscan program
by Sean Reifschneider of tummy.com ltd. Some 8000 enhancements added by Mark
Temple.