Androidカメラベースのソリューション:
この正確な問題について重要な研究を行った人として、現在のAndroidデバイスにあるストックカメラを使用してテンプレート(特徴抽出)に適した画像を取得することは難しいと言えます。主な衰弱させる問題は、指の尾根と谷の間の重要なコントラストを達成することです。市販の光学指紋スキャナー(模倣しようとしている)は、通常、プリズムのフラストレーションのある全反射によって必要なコントラストを実現します。

この場合、プリズムに接触する尾根からの光はCMOSセンサーに伝達されますが、谷からの光は伝達されません。Androidカメラから同じ種類の結果を確実に得ることはできませんが、それは理想的な条件下で使用可能なものを得ることができないという意味ではありません。
左側は市販の光学指紋スキャナー(Futronics FS80)で、右側は通常のカメラ(15MPキャノンDSLR)で撮影しました。カメラ画像をトリミング、反転(他のスキャナーの規則に一致させるため)、コントラストなどを行った後、次の結果が得られました。
カメラ画像のコントラストが低いことは明らかです。

しかし、ソフトウェアは尾根の流れを正確に決定することができます。

そして、適切な数の一致する特徴点(赤い円でマークされている)を見つけることになります。
これが悪いニュースです。このような指先のクローズアップは難しい。これらの結果を達成するために、フラッシュ付きのデジタル一眼レフを使用しました。さらに、ほとんどの指紋照合アルゴリズムはスケール不変ではありません。そのため、その後の「スキャン」で指がカメラから離れていると、元の指と一致しない場合があります。
私が視覚化に使用したソフトウェアパッケージは、優れたBSDライセンスのSourceAFISです。現在、C#とJava(制限付き)にのみ移植されていますが、企業の「オープンソースバージョン」/「有料バージョン」のシェナニガンもありません。
非カメラベースのソリューション:
「USBホストモード」をサポートするハードウェアを備えた恐ろしい少数のデバイスの場合、指紋スキャナーをAndroidと統合するカスタムドライバーを作成できます。正直に言うと、これを行った2つのモデルは、非常に苦痛でした。これは、 wiresharkを使用して、スキャナーと、ドライバーが機能しているLinuxボックスとの間のUSBパケットをスニッフィングし、スニッフィングされたコマンドに基づいてAndroidドライバーを作成することで実現しました。
FingerJetFXのクロスコンパイル
画像取得のソリューションを作成したら(両方の潜在的なソリューションには欠点があります)、AndroidでFingerJetFXを実行することについて心配し始めることができます。まず、SDKを使用して、画像を取得してテンプレートに変換する自己完結型のC++プログラムを作成します。その後、実際には2つのオプションがあります。
- それをライブラリーにコンパイルし、JNIを使用してそれとインターフェースします。
- それを実行可能ファイルにコンパイルし、Androidプログラムにサブプロセスとして呼び出させます。
どちらの場合も、 NDKが必要です。私はJNIを使用したことがないので、他の人の知恵に任せて、私たちがどれだけ最善を尽くすかを考えます。私はいつもルート#2を選ぶ傾向があります。このアプリケーションでは、ネイティブコードを呼び出して、画像をテンプレート化するという1つのことを行うだけなので、適切だと思います。ネイティブプログラムを実行してクロスコンパイルしたら、この質問への回答を使用して、Androidアプリにパッケージ化し、Androidコードから呼び出すことができます。