Ответ 1
Решения для камеры на базе Android:
Как кто-то, кто провел значительные исследования по этой точной проблеме, я могу сказать вам, что вам сложно получить подходящее изображение для шаблонирования (извлечение функции) с помощью запасной камеры, найденной на любом текущем устройстве Android. Основной изнурительной проблемой является достижение значительного контраста между пальцами и долинами. Коммерческие оптические сканеры отпечатков пальцев (которые вы пытаетесь имитировать), как правило, достигают необходимого контраста через фрустрированное полное внутреннее отражение в призме.
В этом случае свет от гребней, контактирующих с призмой, передается на датчик CMOS, а свет от долин - нет. Вы просто не будете надежно получать те же результаты от камеры Android, но это не значит, что вы не можете получить что-то полезное в идеальных условиях.
Я взял изображение слева с помощью коммерческого оптического сканера отпечатков пальцев (Futronics FS80) и справа с обычной камерой (15MP Cannon DSLR). После обрезки, инвертирования (в соответствии с другим соглашением по сканеру), контрастности и т.д. Изображения камеры мы получили следующие результаты.
Низкая контрастность изображения камеры очевидна.
Но программное обеспечение может точно определять поток гребня.
И мы получим достойное количество совпадающих мелочей (отмеченных красными кругами.)
Вот плохая новость. Взятие этих типов близких снимков кончика пальца затруднено. Для достижения этих результатов я использовал DSLR со вспышкой. Кроме того, большинство алгоритмов сопоставления отпечатков пальцев не являются инвариантными по масштабам. Поэтому, если палец находится дальше от камеры при последующей "проверке", это может не совпадать с оригиналом.
Программный пакет, который я использовал для визуализации, является отличным и BSD лицензированным SourceAFIS. Никакой корпоративной версии "с открытым исходным кодом" / "платной версии" не существует, хотя в настоящее время он только портирован на С# и Java (ограниченный).
Решения без камеры:
Для пугающего небольшого количества устройств с аппаратным обеспечением, поддерживающим "Режим хоста USB", вы можете написать собственный драйвер для интеграции отпечатка пальца сканер с Android. Я буду честен, для двух моделей я сделал это, потому что это была огромная боль. Я выполнил его, используя wireshark, чтобы обнюхать USB-пакеты между сканером и linux-ящиком с рабочим драйвером, а затем написать драйвер Android на основе прин тых команд.
Кросс-компиляция FingerJetFX
Как только вы разработали решение для получения изображений (у обоих потенциальных решений есть свои недостатки), вы можете начать беспокоиться о том, как FingerJetFX работает на Android. Сначала вы будете использовать свой SDK для написания автономной программы на С++, которая берет изображение и превращает его в шаблон. После этого у вас действительно есть два варианта.
- Скомпилируйте его в библиотеку и используйте JNI для взаимодействия с ним.
- Скомпилируйте его в исполняемый файл и позвольте программе Android назвать его подпроцессом.
Для или вам понадобится NDK. Я никогда не использовал JNI, поэтому я отложу мудрость другие о том, как нам это лучше всего. Я всегда выбираю маршрут №2. Для этого приложения я считаю это уместным, так как вы действительно на самом деле вызываете собственный код, чтобы сделать что-то одно, создайте шаблон своего изображения. После того, как вы запустили свою собственную программу и скомпилировали ее, вы можете использовать ответ на этот вопрос, чтобы упаковать ее с помощью своего приложения для Android и вызвать ее с вашего Android-кода.