Я пытаюсь разработать приложение для отпечатков пальцев в python. Я храню отпечатки пальцев в базе данных в виде строк. Например,
StorePrint = "fb04e6cd868bd1fc265a69ef490deb0e5657d090f2bc249ad18886aa103ec717"
Я использую Pyfinger в моем проекте. Это успешно, но это сравнение чтения пальца идет медленно.
В отпечатке pyfinger генерируется случайное число void. что делает эта пустота?
И как я могу сравнить с отпечатками пальцев быстро?
Вот мой код
from pyfingerprint.pyfingerprint import PyFingerprint
from base64 import b64decode
import hashlib
import pymongo
def compare_b64_fingerprint(a,b):
'returns inverse bit error rate in percent'
a = b64decode(a)
b = b64decode(b)
matching_bits = 0
different_bits = 0
if len(b) != len(a):
# trim to shortest
shortest = min(len(a),len(b))
longest = max(len(a),len(b))
a = a[:shortest]
b = b[:shortest]
# extra bits count as different
different_bits = 8*(longest-shortest)
for i in range( len(a) ):
byte_a = ord( a[i:i+1] )
byte_b = ord( b[i:i+1] )
for x in range(8):
bit_a = byte_a >> x & 1
bit_b = byte_b >> x & 1
if (bit_a == bit_b):
matching_bits +=1
else:
different_bits +=1
total_bits = different_bits + matching_bits
return float(matching_bits) / float(total_bits)
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["tourniquet"]
mycol = mydb["person"]
try:
#check usb ls /dev/ttyUSB*
f = PyFingerprint('/dev/ttyUSB0', 57600, 0xFFFFFFFF, 0x00000000)
if (f.verifyPassword() == False):
raise ValueError('error')
except Exception as e:
print('Sensor not found!')
print('Error: ' + str(e))
exit(1)
try:
while True:
print('Parmakizi bekleniyor...')
## Wait that finger is read
while (f.readImage() == False):
pass
f.convertImage(0x01)
characterOkunan = str(f.downloadCharacteristics(0x01)).encode('utf-8')
sha2Okunan = hashlib.sha256(characterOkunan).hexdigest()
#grn = f.generateRandomNumber() #Where can i use this number
fingerPrints = mycol.find()
for p in fingerPrints:
# f.uploadCharacteristics(0x02, p["fprint"]) # successfull but too slow
# result = f.compareCharacteristics()
sha2StoredPrint = hashlib.sha256(p["fprint"]).hexdigest()
if compare_b64_fingerprint(sha2Okunan, sha2StoredPrint)>.8:
print("success")
break
except Exception as e:
print('Error: ' + str(e))
exit(1)