HIIDE 5 Biometrics Collection Device
This was a large-scale project involving more than 12 people and many years to complete. The Handheld Interagency Identity Detection Equipment series 5 (HIIDE 5) incorporates dual iris cameras, a rolled fingerprint sensor, and a face camera. It is the evolution of the previous HIIDE 4 biometrics collection device. The main difference architecturally is the HIIDE 5 utilized a biometrics framework called Platform. The Platform is a device agnostic biometric framework that, in addition to being an API, bundled together frequently used subsystems such as databases, configuration management, authentication, data synchronization, and biometric searching. By doing so, this allowed for rapid biometric device and application development, and any Platform-enabled device or application will be able to communicate with any other Platform-enabled endpoint.
The majority of my responsibilities were on the Platform, with the largest being the creation, maintenance, and documentation of the unmanaged-to-managed interoperability layer. Fundamentally, I needed to bridge the gap between devices written in C++ and end-user applications written in .Net. In the end I decided to write the managed portion in C++/CLI to leverage the existing unmanaged libraries, reduce the number of binaries to be distributed, and facilitate maintainable code. I prototyped all of the translation patterns and utilized an in-house code generation utility to rapidly generate and apply my patterns across the entire Platform API space. By doing so, any bug fixes made in one area were automatically propagated to all similar areas.
In addition to the interoperability layer, I also made improvements to the subject database in the Platform that decreased the time it took to retrieve and delete a single record while at the same time improving robustness. This was achieved by abandoning the flat file-based database and moving to a directory hierarchy-based database. Doing so made finding, retrieving, adding and removing a single subject record an O(1) operation. This optimization was justified since the majority of the accesses involved only a single record. Increased robustness was an additional result since corruption in a single record would only affect that record, as opposed to the flat file scheme in which a single record corruption would make the entire database corrupted.
On the device development side, one of my responsibilities was enhancing the user experience and GUI elements of the device. In particular I analyzed that device operators were having trouble capturing good quality iris images. Many images they captured were off-center or the image of the iris was too big/small or just blurry. To rectify one of the problems I changed the onscreen crosshairs to a bounding box. With the bounding box, the operator’s focus was now to line up the edges of the eye with the edges of the box, ensuring correct size and centering. To rectify the blurriness of the image, a simple onscreen confirmation was added to let the operator know it was okay to move the camera after the iris was captured.
I’ve only touched on a few areas in the whole project that I’ve worked on. Other areas include:
- Platform configuration and authentication subsystem using an inheritance-style approach
- Simplification of the image capturing state machine
- Hardware integration of various device components (such as GPS, LAN, touch screen, buttons, etc) into the Platform API
- Creating a self diagnostic mode on the device to allow administrators troubleshoot any in-the-field type of problems
- Maintaining and bug fixing various aspects of the HIIDE 5 device and Platform
- Documenting Platform APIs