Commit graph

1084 commits

Author SHA1 Message Date
Daniel Drake 3048b37176 Port imaging layer to asynchronous model 2008-02-16 12:48:44 +00:00
Daniel Drake aeeec97fb2 upekts: port to asynchronous model 2008-02-16 12:48:25 +00:00
Daniel Drake 5b1f6a0df7 Port primitive driver layer to asynchronous model 2008-02-16 12:47:56 +00:00
Daniel Drake 69760547df Disable all drivers while internal API is being reworked 2008-01-30 14:17:08 +00:00
Daniel Drake bf7093d607 Port to libusb-0.9.0 (synchronous I/O)
Straightforward port to libusb-0.9.0 sync I/O functions, to give libusb-1.0
a bit of a test drive and to create a reference point for later.
2008-01-30 14:16:35 +00:00
Gustavo Chain 6f456f399d Add Secugen FDU2000 driver
[dsd@gentoo.org: some trivial changes:
fixed some warnings
fixed fp_img memory leak on error
renamed endpoint constants (calling a bulk endpoint 'ctrl' is confusing,
as a control endpoint is something different)
]
2007-12-27 01:09:32 +00:00
Daniel Drake 659d8346be Compiler flags update
Dropped -Wextra as it is not that useful.
Set compiler flags to be more like the kernel's.
Set std=gnu99
Fixed some warnings.
2007-12-27 01:06:55 +00:00
Daniel Drake 642010643d uru4000: Add support for Microsoft Fingerprint Reader v2
After lot 713, Microsoft fingerprint readers changed. The new version
comes with a new USB product ID and a challenge-response authentication
scheme where the device challenges the authenticity of the driver.

An independent third party produced documentation on the computations
needed to convert a challenge into the correct response, and I then used
this documentation to produce a clean-room reimplementation of the
authentication scheme.
2007-12-07 15:05:16 +00:00
Daniel Drake 3479dee0e4 aeslib: image assembly
All 3 authentec drivers now use a shared image assembly function.
2007-11-26 23:28:14 +00:00
Daniel Drake e228f2c7da Introduce shared functions for authentec drivers
Currently provides register writing functionality only, more common ground
will be moved here soon.
2007-11-26 22:53:41 +00:00
Anthony Bretaudeau 8e0e8e4386 aes1610: imaging improvements
bz threshold is now 10 (instead of 15). I think it is ok for the moment.
If we manage to get higher image quality in the future, we'll change that.

max_frame is set to 350. 150 was too low => incomplete fingerprints

the driver was designed to stop the acquisition as soon as it gets a blank
frame (=> incomplete fingerprints). Now it waits to have at least 50 blank
frames before stopping.
2007-11-26 17:51:31 +00:00
Daniel Drake 1ee6210be3 Hookup AES1610 driver
An oversight pointed out by Michele B.
2007-11-22 17:25:27 +00:00
Daniel Drake 69700855e2 Implement identification for imaging devices 2007-11-21 00:30:00 +00:00
Daniel Drake 3f70d6f794 Identification infrastructure 2007-11-20 22:12:24 +00:00
Anthony Bretaudeau c5a550e42c Add Authentec AES1610 driver
This is an active capacitance swipe-type device similar to but smaller
than the AES2501.

Image processing performance is good but matching performance is not so
good. The bozorth3 matcher needs tweaking in order to better cope with
small sets of minutiae.

With a lowered threshold, matching performance is good enough for now.
2007-11-19 18:39:03 +00:00
Daniel Drake 6245acea84 Add API to delete enroll data 2007-11-19 18:29:26 +00:00
Daniel Drake 887e0e6acf Add API to access minutiae 2007-11-19 00:27:27 +00:00
Daniel Drake fa742a2142 Use G_N_ELEMENTS macro 2007-11-17 23:47:06 +00:00
Daniel Drake fa24d51304 Fix variable get_img_width/height return value
Fix the functions to conform to the documentation: -1 means non-imaging
device, 0 means variable. Internally, -1 is used to represent variable
height (to be noticably different from the memset-imposed default of zero).
2007-11-17 13:17:15 +00:00
Daniel Drake ba24c0884a Rework some image handling; add public binarization API
I want to offer the ability for an application to view a binarized
version of a scanned print. This lead onto a few changes:

 1. Store minutiae and binarized data inside fp_img
 2. Move resize code to the capture path, it previously happened much
    later.
 3. Add fp_img_binarize() to return a new image in binarized form.
 4. Add a BINARIZED_FORM flag to prevent an image being binarized again.

In future, it would be nice to be able to binarize without detecting
minutiae, but this involves some work on the NBIS interaction.
2007-11-17 12:51:28 +00:00
Jan-Michael Brummer 72c304999a Add UPEK TouchChip driver
The UPEK TouchChip is an active capacitance imaging device with a
press-type sensor. It also has image storage capabilities which will
hopefully be accessible through libfprint in the near future.

This device can be found in the Samsung P35 laptop.
2007-11-17 12:51:20 +00:00
Daniel Drake 791eeab859 aes2501: restore default bozorth3 match threshold
With the multiple register writing code, the image quality is much
better. It's trivially easy to get a match score of 100, and 200 is
possible with a little effort. Remove the lowered match threshold.
2007-11-16 15:44:39 +00:00
Daniel Drake be0e9debd9 aes2501: write multiple registers simultaneously
Instead of writing each register in a separate USB transaction, we now
write up to 16 at once.

This drastically improves scan image quality due to reducing the amount of
time needed per iteration of the sampling loop (sending 1 USB transaction
per iteration instead of 7).
2007-11-16 15:35:48 +00:00
Daniel Drake bfc55c4f0f Use older ImageMagick API
Debian ship an ImageMagick that is more than 2 years old. Switch to using
older APIs so that we have compatibility all-round.
2007-11-16 14:24:04 +00:00
Daniel Drake 3fa3c0daf7 Initialize enrolled image pointer to NULL
Currently this is a dangling pointer if the image capture fails, and then
we try to standardize an invalid pointer --> crash
2007-11-16 13:14:30 +00:00
Daniel Drake 069b4a30eb Doc and build updates
Add ChangeLog generation makefile target.
Group all copyright notices in AUTHORS.
Update some doxygen comments, and allow fp_dev_close(NULL)
2007-11-15 23:00:04 +00:00
Vasily Khoruzhick 06e8040956 aes2501: Detect reversed scans
aes2501 can be mounted 180 degrees rotated (this happens on most part of
laptops), so driver should detect whether sensor is 180degrees rotated
and assemble frames in right order.
2007-11-15 16:21:03 +00:00
Daniel Drake 2ad14c0212 Add AES2501 driver
This driver works quite nicely. Seems a little too sensitive though (too
much black in the standardized image, not enough ridge gap definition).

Processing results are quite good, but you need a good enrollment image
(i.e. long!). It's best to get such images by pressing harder than you
might think necessary and swiping slowly.
2007-11-15 09:54:39 +00:00
Daniel Drake 5485f8031d Return images through enroll/verify path
Added new API functions to obtain images, even when scans are bad, perhaps
a useful way to show the user just how good/bad the scan actually was.

Drivers and examples updated accordingly.
2007-11-15 09:54:39 +00:00
Daniel Drake a86cd51959 Clean up on exit, and convert to singly-linked-lists
This adds fp_exit() to the public API, intended to be called while the
driving app is shutting down.
2007-11-15 09:54:38 +00:00
Daniel Drake a76f55db0d upekts relicensing
Pavel Machek and Timo Hoenig agreed to relicense their work. Thanks guys,
I look forward to working together.
2007-11-15 09:54:35 +00:00
Daniel Drake 71e4bb39ec Allow drivers to specify custom bz3 match threshold
aes4000 detects fewer minutiae and hence returns lower scores.
2007-11-12 23:28:46 +00:00
Daniel Drake e3451158e9 Custom image resizing
mindtct appears to completely ignore the pixels-per-mm input parameter
(ippmm). When processing AES4000 images, the binarized image is
completely mangled and a lot of ridge information is lost.

Resizing the AES4000's small images results in a huge imaging performance
gain.

We use imagemagick for the resizing, as it's resizing code resamples the
image too (smoothing it out), which further improves performance.
2007-11-12 23:28:46 +00:00
Daniel Drake a73cbc10fb aes4000: image quality improvements
The windows driver takes one sample at the previous register settings
and then changes some registers before resamping (and getting much better
images). The exact changes that it makes seem to vary, perhaps based on
the histogram.

Anyway, this is an approximation of the settings used for the 2nd sample
which should help matching results.
2007-11-12 23:28:46 +00:00
Daniel Drake b9238e8b8a Support images with variable dimensions
For example, AES2501 returns images that vary in height.
2007-11-12 23:28:45 +00:00
Daniel Drake 8e7afef736 uru4000: add Digital Persona U.are.U 4000 support
My UareU4000 device isn't working properly -- only seeing an all-white
image and no finger-on detection, however I think this code should work
for working devices.
2007-11-04 21:12:48 +00:00
Daniel Drake f498fcd1ea Fix img_capture_continuous build
Also enable it in the default development build
2007-11-04 19:10:23 +00:00
Daniel Drake f733ddcc3b uru4000: retry scanner powerup 3 times
When we include the await_finger_off procedure (i.e. set mode 12), the
current power-up code is unreliable - no 56aa interrupt arrives sometimes.
Comparing the F0 data and hwstat at this point between a working and a
non-working run yields no differences.

Work around this issue by retrying power-on 3 times.
2007-11-04 19:02:38 +00:00
Daniel Drake cbe1111e4e uru4000: handle images without headers
While testing the new code on my MS keyboard, I found some strange
conditions where occasionally, the device will stop providing images
headers until it is replugged.

Detect and work around this when it happens.
2007-11-04 19:01:51 +00:00
Daniel Drake 2e6c3b940c API documentation 2007-11-04 00:21:54 +00:00
Daniel Drake 7e6f25908b remove imgdev abstraction from public API
Make it easier for application developers, don't have to care about this
level of abstraction which we're intending to make superfluous to them.
2007-11-02 17:06:44 +00:00
Daniel Drake fc77786e46 uru4000: interrupt handling fixes
This should improve driver stability somewhat. Powerup problems seem to
happen when we receive 3 unrelated interrupts while waiting for the
power-on interrupt, so let's assume that the device can only buffer 3
interrupts, and when the buffer is full, it discards new ones.

When we detect a possible buffer overflow, ask the caller to retry the
operation.

Also, saw the interrupt of death a few times, so add in a warning when
this happens. Haven't seen it since handling interrupt overflows though.
2007-10-31 22:47:04 +00:00
Daniel Drake 07a81b07be upekts: initialise and deinitialise device during verify/capture
Otherwise it heats up, and verify retries fail because we didn't end the
session.
2007-10-31 22:46:50 +00:00
Daniel Drake fc0a97a801 Build system tweaks
Install fprint.h header
Include headers in distribution
distcheck fixes
Include and install pkgconfig file
2007-10-31 15:44:36 +00:00
Daniel Drake 447b1f01b3 Print discovery
Add concept of "discovered prints" and flesh out the API. A discovered print
was found based on file name but has not been checked for file integrity,
and of course there is no guarantee that it is usable when you try to
use it later (might have been deleted, etc).

The .fprint directory structure was changed - instead of using mnemonics
like "rind" we use their numeric value in the fp_finger enum as the filename.
2007-10-31 13:13:57 +00:00
Daniel Drake b96aade69c Flesh out driver_id/devtype API
Add accessor functions to the various structures
2007-10-30 22:25:26 +00:00
Daniel Drake cc3e976042 Add 'discover' hook for drivers
Drivers can now offer a discover function, and are expected to offer the
device devtype during discovery, without accessing the USB device. Hmm.
Maybe we'll have to change that later...
2007-10-30 22:15:45 +00:00
Daniel Drake f0ef386f43 More NBIS cleanups 2007-10-30 20:55:35 +00:00
Daniel Drake 6f633cc771 Use glib's byte order functions 2007-10-29 23:06:06 +00:00
Daniel Drake 294f9ad447 Improve print_data structure and on-disk format
Drivers now have an ID number. These will be assigned by me and documented
on the wiki. 0 cannot be used.

Drivers now define a devtype for each device they initialise. This is to
cope with the situation where a driver can support varying devices where
their print data is incompatible (i.e. image scaling is totally changed).
This doesn't apply to any existing supported devices.

Print data no longer includes driver name, and includes driver ID instead.

Paths to saved print data now include driver ID and devtype, and no longer
include driver name.

APIs exposed for converting a print_data into a blob which can then
be loaded back again later. Useful for systems who don't want to use
my simple storage system (which is only aimed at a single user).

File format is now defined and will be documented on the wiki. The header
is larger as we can no longer rely on directory paths in all scenarios.

Print data compat check now checks devtype and driver ID.
2007-10-28 22:13:51 +00:00
Daniel Drake 4e5cfdf92a NBIS cleanup
Part 1 of many. Remove some unused/pointless code, and made some code
static.
2007-10-28 15:57:27 +00:00
Daniel Drake 6b8d17ef26 Add bozorth3 from NBIS; implement verify for image devices
uru4000 works splendiferously (YAY!)
aes4000 is going to need some work though :(
2007-10-28 12:03:15 +00:00
Daniel Drake 41b25f28a4 Add mindtct from NBIS; implement enroll for image devices
mindtct is mostly as-is for now, with just a couple of bits ripped out.
2007-10-27 22:48:09 +01:00
Daniel Drake be67f85caa Add Authentec AES4000 driver 2007-10-27 19:33:00 +01:00
Daniel Drake 3bbb7b8b51 Internal image allocation API changes
Creating by dimensions is likely not useful now that we can infer image
size from a device in question.
2007-10-27 18:10:33 +01:00
Daniel Drake da071ff8a2 Add API for freeing images 2007-10-27 15:16:54 +01:00
Daniel Drake c2a83ec948 Improved image dimension handling
Drivers now specify the size of the image they provide, and theres an API
so that you can get the size of an image before you capture it.
2007-10-27 14:45:14 +01:00
Daniel Drake 9960a7ff34 Image standardization
Initially supports flipping and colour inversion
2007-10-27 14:24:57 +01:00
Daniel Drake 0ddfef6c21 Add uru4000 driver 2007-10-27 00:10:58 +01:00
Daniel Drake f367ae8f4b Zero out fprint_data fields on allocation 2007-10-27 00:09:46 +01:00
Daniel Drake f3a838e856 Initial implementation for image device access and capture
Also added new example: img_capture
2007-10-27 00:09:18 +01:00
Daniel Drake 0aac3706d7 upekts: release interface on error condition and normal exit 2007-10-25 15:36:13 +01:00
Daniel Drake 0ac74ef649 Pass driver_data from ID table to driver init function 2007-10-25 15:00:30 +01:00
Daniel Drake 2709c6dc8c Basic image driver foundations
The basic model is that image drivers declare a fp_img_driver structure
rather than a fp_driver struct. fp_img_driver will contain primitive imaging
operations such as 'scan finger and return image'. The imgdev layer will
generically implement the primitive fp_driver operations, and the imgdev
layer will fix up the enroll/verify/etc pointers at driver registration
time.

Removed const from all fp_driver declarations, as these are now modified
dynamically in the case of imaging drivers.
2007-10-23 23:27:21 +01:00
Daniel Drake c97f4bb1a7 Fix verify debug messages
Teach it about the various error conditions.
2007-10-16 14:35:33 +01:00
Daniel Drake 801fcfc07c upekts: fix memory corruption
Found by valgrind
2007-10-16 14:34:47 +01:00
Daniel Drake 680142f268 storage: add save/load functionality
Prints can now be saved to disk (but you currently must classify which
finger they are) and you can load them later.

Added 2 simple example programs to demonstrate this.
2007-10-16 14:34:22 +01:00
Daniel Drake 3b8f8c195c upekts: support large messages
Add support for messages with a length greater than 255.
Also picked out a few more retry codes.
2007-10-16 13:41:23 +01:00
Daniel Drake bf9ce44f43 upekts: verify implementation
We can now verify live fingerprints using the verify example.
Error handling during verification needs to be improved.
2007-10-15 22:09:46 +01:00
Daniel Drake f59112d57c Unhide fprint_data buffer from drivers
May as well keep things out in the open.
2007-10-15 22:07:22 +01:00
Daniel Drake 68bdfc7868 Verification infrastructure
Similar model to enrollment.
2007-10-15 22:06:56 +01:00
Daniel Drake 39271b4fe5 Enrollment: improved error reporting
Convert enrollment function to return a signed integer, which is negative
on error or corresponds into fp_enroll_result otherwise.
Now we can treat a 'FAIL' condition differently from an actual error: fail
means that enrollment didn't complete because the data was nonsense or
whatever (e.g. scanned a different finger for each stage?).

Updated upekts accordingly.
2007-10-14 00:51:20 +01:00
Daniel Drake ab5b1ca8e9 upekts: communication handling and enrollment implementation
This completes an enrollment implementation for the upekts driver.
It's based on code from libthinkfinger, but as there seemed to be many
unknown details there, I spent some time analysing the bus messages in
more detail and have effectively rewritten almost all of the borrowed code.

Note that libthinkfinger is GPL licensed, so that reflects on this code too.
At release time I will ask them if they are OK for me to relicense it.
2007-10-13 17:13:25 +01:00
Daniel Drake 2995144310 Build system tweaks
Add configure-time controls for logging
Set some default compile-time warnings
2007-10-13 16:03:53 +01:00
Daniel Drake 50e2de0730 Enrollment tweaks
upekts will need to know when the first enrollment stage is attempted for
the first time, so add an __enroll_stage counter which actually indicates
the next stage to enroll. -1 is a special value and it means 0 is next *and*
it is the initial attemt.

Added more debug output to the enroll handler.
Added new fp_enroll_status codes for too short or uncentered scans.

Changed the print_data allocator to consider the device rather than the
driver, this feels more natural. Added missing return value.

Make fp_enroll_status codes start at 1. 0 can now be used as a
special/temporary value by the drivers. Also check that we aren't exceeding
the number of enroll stages.

Also add a missing exit() call to the verify example and update for the
above.
2007-10-13 15:51:33 +01:00
Daniel Drake e6624fe508 Add 16 bit endianness functions 2007-10-12 15:28:46 +01:00
Daniel Drake ec91736ac4 Add logging infrastructure
Also added some debug/error messages to existing code. For now debugging is
always on, this will be made optional later.
2007-10-12 15:14:29 +01:00
Daniel Drake 016ff33533 Enrolment infrastructure 2007-10-08 19:53:50 +01:00
Daniel Drake b071f3cdb9 Initial fingerprint data representation ideas 2007-10-08 18:24:29 +01:00
Daniel Drake 2c06a4ebfa Expose driver info to library users 2007-10-08 17:18:29 +01:00
Daniel Drake 711bb1151b open/close device functions 2007-10-08 17:16:56 +01:00
Daniel Drake 7d31cb4d45 Basic device discovery infrastructure 2007-10-08 17:16:54 +01:00
Daniel Drake 046bdc0bda Initial driver registration mechanism
Also added the basis of the upekts driver, which is the first I'll
implement.
2007-10-08 17:16:51 +01:00
Daniel Drake 7d3612d9f6 Create repo structure 2007-10-08 17:16:13 +01:00