/ examples / fingerprint_simpletest.py
fingerprint_simpletest.py
  1  import time
  2  import board
  3  import busio
  4  from digitalio import DigitalInOut, Direction
  5  import adafruit_fingerprint
  6  
  7  led = DigitalInOut(board.D13)
  8  led.direction = Direction.OUTPUT
  9  
 10  uart = busio.UART(board.TX, board.RX, baudrate=57600)
 11  
 12  # If using with a computer such as Linux/RaspberryPi, Mac, Windows with USB/serial converter:
 13  # import serial
 14  # uart = serial.Serial("/dev/ttyUSB0", baudrate=57600, timeout=1)
 15  
 16  # If using with Linux/Raspberry Pi and hardware UART:
 17  # import serial
 18  # uart = serial.Serial("/dev/ttyS0", baudrate=57600, timeout=1)
 19  
 20  finger = adafruit_fingerprint.Adafruit_Fingerprint(uart)
 21  
 22  ##################################################
 23  
 24  
 25  def get_fingerprint():
 26      """Get a finger print image, template it, and see if it matches!"""
 27      print("Waiting for image...")
 28      while finger.get_image() != adafruit_fingerprint.OK:
 29          pass
 30      print("Templating...")
 31      if finger.image_2_tz(1) != adafruit_fingerprint.OK:
 32          return False
 33      print("Searching...")
 34      if finger.finger_search() != adafruit_fingerprint.OK:
 35          return False
 36      return True
 37  
 38  
 39  # pylint: disable=too-many-branches
 40  def get_fingerprint_detail():
 41      """Get a finger print image, template it, and see if it matches!
 42      This time, print out each error instead of just returning on failure"""
 43      print("Getting image...", end="", flush=True)
 44      i = finger.get_image()
 45      if i == adafruit_fingerprint.OK:
 46          print("Image taken")
 47      else:
 48          if i == adafruit_fingerprint.NOFINGER:
 49              print("No finger detected")
 50          elif i == adafruit_fingerprint.IMAGEFAIL:
 51              print("Imaging error")
 52          else:
 53              print("Other error")
 54          return False
 55  
 56      print("Templating...", end="", flush=True)
 57      i = finger.image_2_tz(1)
 58      if i == adafruit_fingerprint.OK:
 59          print("Templated")
 60      else:
 61          if i == adafruit_fingerprint.IMAGEMESS:
 62              print("Image too messy")
 63          elif i == adafruit_fingerprint.FEATUREFAIL:
 64              print("Could not identify features")
 65          elif i == adafruit_fingerprint.INVALIDIMAGE:
 66              print("Image invalid")
 67          else:
 68              print("Other error")
 69          return False
 70  
 71      print("Searching...", end="", flush=True)
 72      i = finger.finger_fast_search()
 73      # pylint: disable=no-else-return
 74      # This block needs to be refactored when it can be tested.
 75      if i == adafruit_fingerprint.OK:
 76          print("Found fingerprint!")
 77          return True
 78      else:
 79          if i == adafruit_fingerprint.NOTFOUND:
 80              print("No match found")
 81          else:
 82              print("Other error")
 83          return False
 84  
 85  
 86  # pylint: disable=too-many-statements
 87  def enroll_finger(location):
 88      """Take a 2 finger images and template it, then store in 'location'"""
 89      for fingerimg in range(1, 3):
 90          if fingerimg == 1:
 91              print("Place finger on sensor...", end="", flush=True)
 92          else:
 93              print("Place same finger again...", end="", flush=True)
 94  
 95          while True:
 96              i = finger.get_image()
 97              if i == adafruit_fingerprint.OK:
 98                  print("Image taken")
 99                  break
100              if i == adafruit_fingerprint.NOFINGER:
101                  print(".", end="", flush=True)
102              elif i == adafruit_fingerprint.IMAGEFAIL:
103                  print("Imaging error")
104                  return False
105              else:
106                  print("Other error")
107                  return False
108  
109          print("Templating...", end="", flush=True)
110          i = finger.image_2_tz(fingerimg)
111          if i == adafruit_fingerprint.OK:
112              print("Templated")
113          else:
114              if i == adafruit_fingerprint.IMAGEMESS:
115                  print("Image too messy")
116              elif i == adafruit_fingerprint.FEATUREFAIL:
117                  print("Could not identify features")
118              elif i == adafruit_fingerprint.INVALIDIMAGE:
119                  print("Image invalid")
120              else:
121                  print("Other error")
122              return False
123  
124          if fingerimg == 1:
125              print("Remove finger")
126              time.sleep(1)
127              while i != adafruit_fingerprint.NOFINGER:
128                  i = finger.get_image()
129  
130      print("Creating model...", end="", flush=True)
131      i = finger.create_model()
132      if i == adafruit_fingerprint.OK:
133          print("Created")
134      else:
135          if i == adafruit_fingerprint.ENROLLMISMATCH:
136              print("Prints did not match")
137          else:
138              print("Other error")
139          return False
140  
141      print("Storing model #%d..." % location, end="", flush=True)
142      i = finger.store_model(location)
143      if i == adafruit_fingerprint.OK:
144          print("Stored")
145      else:
146          if i == adafruit_fingerprint.BADLOCATION:
147              print("Bad storage location")
148          elif i == adafruit_fingerprint.FLASHERR:
149              print("Flash storage error")
150          else:
151              print("Other error")
152          return False
153  
154      return True
155  
156  
157  ##################################################
158  
159  
160  def get_num():
161      """Use input() to get a valid number from 1 to 127. Retry till success!"""
162      i = 0
163      while (i > 127) or (i < 1):
164          try:
165              i = int(input("Enter ID # from 1-127: "))
166          except ValueError:
167              pass
168      return i
169  
170  
171  while True:
172      print("----------------")
173      if finger.read_templates() != adafruit_fingerprint.OK:
174          raise RuntimeError("Failed to read templates")
175      print("Fingerprint templates:", finger.templates)
176      print("e) enroll print")
177      print("f) find print")
178      print("d) delete print")
179      print("----------------")
180      c = input("> ")
181  
182      if c == "e":
183          enroll_finger(get_num())
184      if c == "f":
185          if get_fingerprint():
186              print("Detected #", finger.finger_id, "with confidence", finger.confidence)
187          else:
188              print("Finger not found")
189      if c == "d":
190          if finger.delete_model(get_num()) == adafruit_fingerprint.OK:
191              print("Deleted!")
192          else:
193              print("Failed to delete")