43

カメラを使用して、または使用せずに指紋スキャナーに取り組んでいますか?その可能性と成功率は?、FingerJetFXという名前のオープンソースSDKの1つに出くわしました。これは、Androidでも実現可能性を提供します。

FingerJetFX OSE指紋特徴抽出器はプラットフォームに依存せず、makeファイルに適切な変更を加えて構築でき、オペレーティングシステムの有無にかかわらず次のような環境で実行できます。

  • Linux
  • アンドロイド
  • ウィンドウズ
  • Windows CE
  • さまざまなRTOS

しかし、指紋スキャナーが可能かどうかはわかりません。SDKをダウンロードして掘り下げましたが、SDKを統合する手順が見つからなかったため、以下に示す質問がほとんどありませんでした。

私は提案とガイダンスを探しています:

  1. 指紋スキャナーは、カメラを使用して、またはカメラなしでAndroidで可能ですか?
  2. の助けを借りて、FingerJetFX私は自分の目標を達成できますか?
  3. 2番目の答えが「はい」の場合、誰かがSDKをAndroidに統合するための何らかの手順を教えてくれますか?

あなたの提案はかなりのものです。

4

2 に答える 2

89

Androidカメラベースのソリューション:

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

バイオメトリクスにおけるFTIR

この場合、プリズムに接触する尾根からの光はCMOSセンサーに伝達されますが、谷からの光は伝達されません。Androidカメラから同じ種類の結果を確実に得ることはできませんが、それは理想的な条件下で使用可能なものを得ることができないという意味ではありません。

左側は市販の光学指紋スキャナー(Futronics FS80)で、右側は通常のカメラ(15MPキャノンDSLR)で撮影しました。カメラ画像をトリミング、反転(他のスキャナーの規則に一致させるため)、コントラストなどを行った後、次の結果が得られました。

ここに画像の説明を入力してください

カメラ画像のコントラストが低いことは明らかです。

ここに画像の説明を入力してください

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

ここに画像の説明を入力してください

そして、適切な数の一致する特徴点(赤い円でマークされている)を見つけることになります。

これが悪いニュースです。このような指先のクローズアップは難しい。これらの結果を達成するために、フラッシュ付きのデジタル一眼レフを使用しました。さらに、ほとんどの指紋照合アルゴリズムはスケール不変ではありません。そのため、その後の「スキャン」で指がカメラから離れていると、元の指と一致しない場合があります。

私が視覚化に使用したソフトウェアパッケージは、優れたBSDライセンスのSourceAFISです。現在、C#とJava(制限付き)にのみ移植されていますが、企業の「オープンソースバージョン」/「有料バージョン」のシェナニガンもありません。

非カメラベースのソリューション:

「USBホストモード」をサポートするハードウェアを備えた恐ろしい少数のデバイスの場合、指紋スキャナーをAndroidと統合するカスタムドライバーを作成できます。正直に言うと、これを行った2つのモデルは、非常に苦痛でした。これは、 wiresharkを使用して、スキャナーと、ドライバーが機能しているLinuxボックスとの間のUSBパケットをスニッフィングし、スニッフィングされたコマンドに基づいてAndroidドライバーを作成することで実現しました。

FingerJetFXのクロスコンパイル

画像取得のソリューションを作成したら(両方の潜在的なソリューションには欠点があります)、AndroidでFingerJetFXを実行することについて心配し始めることができます。まず、SDKを使用して、画像を取得してテンプレートに変換する自己完結型のC++プログラムを作成します。その後、実際には2つのオプションがあります。

  1. それをライブラリーにコンパイルし、JNIを使​​用してそれとインターフェースします。
  2. それを実行可能ファイルにコンパイルし、Androidプログラムにサブプロセスとして呼び出させます。

どちらの場合も、 NDKが必要です。私はJNIを使​​用したことがないので、他の人の知恵に任せて、私たちがどれだけ最善を尽くすかを考えます。私はいつもルート#2を選ぶ傾向があります。このアプリケーションでは、ネイティブコードを呼び出して、画像をテンプレート化するという1つのことを行うだけなので、適切だと思います。ネイティブプログラムを実行してクロスコンパイルしたら、この質問への回答を使用して、Androidアプリにパッケージ化し、Androidコードから呼び出すことができます。

于 2013-01-07T22:38:14.193 に答える
3

いくつかの差し迫ったハードルがあります:

  1. 指紋の良好な画像を取得することが重要になります。彼らのサイトによると、fingerjetは標準の指紋画像を期待しています。たとえば、8ビットのグレースケール(高コントラスト)の平坦化された指紋画像です。カメラで指紋写真を撮った場合、ユーザーは写真を撮るために指紋を平らにすることができる平らな透明な表面(ガラス)を持っている必要があります。次に、アプリは画像内の指紋を見つけて、fingerjetで使用できる形式に変換します。OpenCVのようなライブラリはこれを行うのに役立ちます。

  2. FingerJetFX OSEは、定型のAndroidサポートを提供していないようです。Android用のライブラリをコンパイルして、JNI/NDK経由で使用する必要があります。

そこから、fingerjetは、マッチングに使用できるプリントのコンパクトな表現を提供するはずです。

それは実現可能ですが、使用要件(ユーザーが平らな透明な表面を利用できるようにする必要があります)は、取引を妨げる可能性があります...

于 2013-01-07T11:02:05.407 に答える