# Fingerprint in Java einlesen



## Gast2 (19. Sep 2007)

Hallo zusammen,

ich habe einen Fingerprinter(USB) und möchte gern die Biometrische Daten in einem Textfeld anzeigen lassen.

1. Hat damit schon mal jemand erfahrung gemacht.
2. Wie bekomme ich eine Verbindung zwischen meinem Fingerprinter und meine Programm hin
3. Muss man vielleicht noch irgendwas besonderes beachten, da ich damit noch total keine Erfahrungen gemacht habe ??

thx John


----------



## tuxedo (19. Sep 2007)

Java hat mit USB erstmal ein Problem. "Von Haus aus" kannst du nicht auf USB zugreifen. Was bietet denn der "Fingerdrucker" (der ja nicht druckt, sondern eher ließt) für Softwareschnittstellen an?

- Alex


----------



## Gast2 (19. Sep 2007)

ja sry liest =)

öhm ganz dummer frage wo bekomm ich die Softwareschnittstelle her oder sagen wir was genau meinst du damit???
also ich hab ihn mal per USB angestöpselt und versuch jetzt irgendwie das geleste in einem Textfield auszugeben...
aber ich hab kein plan wie ich die verbindung zwischen java und dem printer hinbekomm....


----------



## tuxedo (19. Sep 2007)

Naja, vielleicht fangen wir mal mit folgendem an:

Hersteller?
Typenbezeichnung?

Wenn wir das geklärt haben sollte man sich mal den Treiber anschauen. Vielleicht gibts hier nen Standard auf den man aufsetzen kann.

- Alex


----------



## Gast2 (19. Sep 2007)

ach ok jetzt versteh ich was du meinst ...muss daheim nachschauen kanns dir heut abend mitteilen ,aber ich denke eher nicht dass es sowas gibt...
Sagen wir es gibt kein Standard ??? Wie ist dann wie Vorgehensweise lese grad was über JNI????


----------



## tuxedo (19. Sep 2007)

Bei Scannern gibt es ja beispielsweise eine TWAIN-Schnittstelle (kann gut sein dass ich da auch nicht mehr auf dem aktuellen Stand bin). Sowas wäre eine genormte Schnittstelle. Und für manche oder viele solcher genormten Schnittstellenn gibts schon Bibliotheken für Java. 

Wenn das Ding jetzt aber keine solche Schnittstelle bietet, dann musst du direkt an den Treiber ran. Aber dazu müsste der einigermaßen dokumentiert sein. Dann kannst du mit JNI oder JNA da drauf aufbauen. Aber das ist nicht ganz trivial. Da sollte man schon einigermaßen C/C++ beherrschen. 

Aber du kannst ja auch mal google befragen. Bin mir sicher dass du nicht der erste bist der über sowas nachdenkt.

- Alex

[edit]

hab eben selbst mal gesucht... glaube du wirst schlechte karten haben: http://www.velocityreviews.com/forums/t147539-fingerprint-reader-sdk.html


----------



## Gast2 (19. Sep 2007)

mhm ... wozu brauch ich c/c++ kentnisse???
okay ich muss also aus java heraus den treiber ansprechen der den printer steuert... 
und sowas macht man über jni oder jna ... ich hoffe mal soweit hab ich alles verstanden oder??? 
Ich such jetzt mal ein paar beispeiel im netz ich hoffe ich find was...  dann schreib ich nochmal =)!!!!
Aber wenn ich die Sache auch richtig verstanden hab bin ich nachher nicht mehr plattformunabhängig sondern die Sache läuft nur noch auf Windows ....


----------



## tuxedo (19. Sep 2007)

Ähm, du weißt schon was hinter JNI steckt?

Um einen C/C++ Treiber in Java zu nutzen musst du einen C/C++ Wrapper schreiben. Java greift dann auf den Wrapper zu und dieser auf den Treiber.

Bei JNA musst du eigentlich kein C/C++ coden, jedoch musst du die Treiber-API soweit verstehen dass du deren Konstrukte, Klassen und alles was da so drin ist, auch Java mappen kannst. 

Plattformunabhängigkeit erreichst du nur wenn du 

a) einen Treiber für Windows und für Linux/Unix/mac hast
b) sich diese Treiber alle wrappen/mappen lassen

Was du zu allererst brauchst sind Informationen und Daten vom Hersteller. Bietet der nix an oder behält alle Details für sich kannst du's quasi vergessen. Dann müsstest du den Treiber schon reverse-engineeren ... 

- Alex


----------



## Gast2 (19. Sep 2007)

hört sich ja nicht prickelnd an .... ok danke dann werde ich mich mal in den nächsten tage einlesen und heut abend daheim schauen ob ich informationen bekomm.... schreib den hersteller usw. heute abend noch rein


----------



## tuxedo (19. Sep 2007)

Wenn du auf der Webseite kein SDK oder sowas in der Art findest wirst du vermutlich Pech haben. 

BTW: Das ist dann auch kein Java-Problem mehr.. Das erstreckt sich auch auf C/C++ ... Nicht dass sich hier die Vermutung breit macht Java wäre an der misere Schuld ;-)

- Alex


----------



## Gast2 (19. Sep 2007)

mir ist egal wer an der misere Schuld ist =) =) ist einfach ein viel zu großer aufwand für so ne kleinigkeit =)=)
gibt es eigentlich einen grund warum man kein usb port ansprechen kann????


----------



## tuxedo (19. Sep 2007)

Es soll Libraries geben mit denen man mit USB kommunizieren kann. Wie gut das funktioniert und was alles unterstützt wird kann ich dir nicht sagen -> keine Ahnung.

Was ich dir aber sagen kann: Selbst wenn du direkt mit USB kommunizieren kannst, wird dein Fingerprint Reader nur dann die gewünschte Information ausspucken wenn du weißt welches Protokoll/welche Sprache/wie die Spezifikation der Kommunikation aussieht. Und das weiß nur der Hersteller. Und wenn der die Information nicht rausrückt stehst du dumm da.

Das ist wie mit den Treibern in Linux: Viele Hersteller legen die spezifikation nicht offen und scheren sich einen Dreck um Linux, so dass man dann dumm da steht und nicht wirklich was ausrichten kann (außer den Windows-Treiber versuchen zu reverse-engineeren). 

- Alex


----------



## Gast2 (19. Sep 2007)

Fingerprint Sensor MD85264 von Tevion

EDIT: Wenn ich schon dabei bin!!! Noch ne kleine Frage warum funktioniert ein Barcodescanner ohne Probleme,ohne zustätzliche library einstecken und und des Teil scannt alle Barcode und gibt Sie mir in einem Textfeld aus ???


----------



## tuxedo (20. Sep 2007)

Na irgendwo muss es da auch ne Library oder nen Treiber geben den man ansprechen kann... Du kannst ja  nicht


```
jTextField.append(hiergeschiehtEinWunder.getBarCode());
```

machen. Oder hast du jetzt ein mit dem Barcodescanner mitgeliefertes Programm gemeint? Wenn ja: Auch dort gibts einen Treiber/Library die den Treiber nutzen kann.

- Alex


----------



## Gast2 (20. Sep 2007)

Nein du kannst jeden beliebigen barcode an dein USB oder wo auch immer anstekcne du bist in deinem java programm!!!  gehst in ein beliebiges textfeld und scannst den barcode , dann steht da dein der inhalt des barcodes drin je nachdem wie du den barcode eingestllt hast mit prüfcodes ohne usw... also ich hab nichts tun müssen außer einstecken und das hat jetzt schon mit 10 verschiedenen barcode scannen getan...


----------



## tuxedo (20. Sep 2007)

Jetzt fällt's mir wieder ein:

Barcodescanner funktionieren, wenn mans ganz abstrakt betrachtet auch wie eine Tastatur:

Der gelesene Code wird vom Treiber des Scanners in lesbaren Text (bzw. Zeichen) übersetzt und in das aktuell fokusierte Textfeld (scheiß egal welches, scheiß egal in welchem Programm, scheiß egal in welcher Sprache das Programm geschrieben ist) eingefügt. Das ist eine reine Treibersache. 

Dummerweise sind Fingerabdruckscanner nicht so easy:

Ein Barcode ist liefert immer das gleiche Ergebnis, die Sache ist da ziemlich eindeutig. Egal welcher Scanner verwendet wird, und egal wie oft man einen Barcode einscannt: Es kommt immer das selbe raus.

Fingerabdrücke hingegen sind etwas Variables: Das "Bild" deines Fingerabdrucks ist abhängig von verschiedenen Faktoren: Druck des aufliegenden Finger, Winkel, ... 
Fingerabdruckbilder sehen nie 1:1 Pixelgleich aus. Es ist Sache der Software ein und denselben Finger immer als ein und denselben Finger zu erkennen. 

Alles in allem kann man wohl sagen: Du kannst nicht Äpfel mit Birnen vergleichen. Beide wachsen zwar auf Bäumen, sinnd jedoch verschieden. 

Es hilt auch nicht auf der Tatsache rumzureiten dass es mit Barcode-Scanner "einfacher" geht als mit Fingerabdruckscannern. 

Sofern du keinen Treiber findest der dir die erkennung des Abdrucks abnimmt und bei ein und demselben Finger beispielsweise immer den selben Hash oder die selbe ID ausspuckt (und ich bezweifle dass es sowas gibt, lass mich aber gerne eines besseren belehren) oder der Hersteller keine Details zum Treiber verrät und auch kein SDK anbietet, hast du schlicht ein einfach sau schlechte Karten. 

Oder du musst dir einen Fingerabdruckscanner besorgen der diese vorraussetzungen erfüllt und das "Tevion-Aldi-Gerät" in die Schublade legen.

Hier ein Hersteller der ein SDK anbietet:

http://www.griaule.com/page/en-us/grfinger_fingerprint_sdk

- Alex


----------



## Gast2 (20. Sep 2007)

mhm ok verstehe...

es könnet also durch aus sein, dass ich einen Code von dem Printer zurück bekomme, aber dieser bei einem Finger jedes mal unterschiedlich ist. D.h. ich muss den gleichen Finger mehrmals einscannen und einen eigenen Code generieren, damit er den Finger später erkennt. Also sowas wie in der Arte das Finger Bilde in einer Talbelle aufteilen z.B. 100 auf 100 und die einzelene Kästchen abgleichen ...


----------



## tuxedo (20. Sep 2007)

Was der Scanner genau zurückliefert weiß ich nicht. Aber die erkennung des Fingerabdrucks basiert ja auf einer Mustererkennung. 
Wie schwer es ist so ein Muster jedesmal 100% identisch zu erkennen kannst du selbst ausprobieren:

Versuche deinen Finger mit einem Handelsüblichen Flachbettscanner mehrfach zu scannen. Damit soll jedesmal das 1:1 Pixelgleiche Bild rauskommen. 

Der Fingerabdruckscanner macht da quasi auch nix anderes: Er versucht das Muster deines Fingerabdrucks zu scannen und dieses Muster in ein gewisses Raster zu stecken. Je nach gewähltem Raster und Algorithmus wird der Fingerabdruck mehr oder weniger gut erkannt. 

Fingerabdruck erkennen ist in etwa genauso schwer wie das erkennen von Sprache. 

Nur ist die Schnittstelle zum Mikrofon in Java schon vorhanden, die zum Fingerabdruckscanner halten die meisten Hersteller solcher Geräte geheim. 

- Alex


----------

