Advertisement
Alexis_Alves

FingerPrint_Python

Aug 17th, 2018
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 17.37 KB | None | 0 0
  1. ################################################################################
  2. #  PROJETO FingerPrint_Rack                         20/02/2018
  3. #  ORMEL - DESENVOLVIMENTO DE SOFTWARE
  4. #  http://www.ormel.com.br/
  5. #  Avenida Washington Soares, 2400 - Edson Queiroz, Fortaleza - CE, 60811-341
  6. ################################################################################
  7.  
  8. #\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\////////////////////////////////////////
  9. #||||||||||||||||||||||||||||||||  Bibliotecas  ||||||||||||||||||||||||||||||||
  10.  
  11. from pyfingerprint.pyfingerprint import PyFingerprint
  12. from email.mime.multipart import MIMEMultipart
  13. from email.mime.text import MIMEText
  14. import Adafruit_CharLCD as LCD
  15. import RPi.GPIO as gpio
  16. import subprocess as sp
  17. import threading
  18. import smtplib
  19. import time
  20. import sys
  21. import os
  22.  
  23. #\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\////////////////////////////////////////
  24. #||||||||||||||||||||||||||||||  Inicializações  |||||||||||||||||||||||||||||||
  25.  
  26. PIR = 26
  27. ALM_LED = 21
  28. BUZZER = 20
  29. RELE = 16
  30.  
  31. RS = 18
  32. EN = 23
  33. D4 = 24
  34. D5 = 25
  35. D6 = 8
  36. D7 = 7
  37. LCD_C = 16
  38. LCD_L = 2
  39. LCD_BL = 1
  40.  
  41. OK_B = 5
  42. # DEL = 6
  43. INC = 13
  44. DEC = 19
  45.  
  46. HIGH = 1
  47. LOW = 0
  48.  
  49. Reg_Mstr = True
  50. Conf_Mode = False
  51. Mstr_Flag = False
  52. Alarm = True
  53. TA = False
  54.  
  55. alarm_Tcount = 0
  56. OPT_count = 0
  57.  
  58. gpio.setwarnings(False)
  59. gpio.setmode(gpio.BCM)
  60.  
  61. gpio.setup(OK_B, gpio.IN, pull_up_down=gpio.PUD_UP)
  62. # gpio.setup(DEL, gpio.IN, pull_up_down=gpio.PUD_UP)
  63. gpio.setup(INC, gpio.IN, pull_up_down=gpio.PUD_UP)
  64. gpio.setup(DEC, gpio.IN, pull_up_down=gpio.PUD_UP)
  65. gpio.setup(PIR, gpio.IN, pull_up_down=gpio.PUD_DOWN)
  66. gpio.setup(ALM_LED, gpio.OUT)
  67. gpio.setup(BUZZER, gpio.OUT)
  68. gpio.setup(RELE, gpio.OUT)
  69.  
  70. lcd = LCD.Adafruit_CharLCD(RS, EN, D4, D5,D6, D7, LCD_C, LCD_L,LCD_BL)
  71.  
  72. #\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\////////////////////////////////////////
  73. #/////////////////////////////////  Funções  \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
  74.  
  75. #=============================  TIMER_ALARM  ===================================
  76. #===============================================================================
  77. def timer_Alarm():
  78.     global Alarm
  79.     Alarm = True
  80.     gpio.output(RELE, HIGH)
  81.     print('Alarme Ativo!')
  82.     lcd.clear()
  83.     lcd.message('    Alarme     ')
  84.     lcd.message('\n   Reativado   ')
  85.     time.sleep(2)
  86.     lcd.clear()
  87.     lcd.message('= Press. Botao =')
  88.     lcd.message('\n   Biometria:')
  89.  
  90. #================================  INC_MSSG  ===================================
  91. #===============================================================================
  92. def intro_MSSG():
  93.     global Alarm
  94.     if (Conf_Mode):
  95.         lcd.clear()
  96.         lcd.message('     Mestre     ')
  97.         lcd.message('\n  Reconhecido   ')
  98.         time.sleep(1)
  99.         lcd.clear()
  100.         lcd.message('     Alarme     ')
  101.         lcd.message('\n  Desativado   ')
  102.         time.sleep(1)
  103.         lcd.clear()
  104.         lcd.message('      Modo      ')
  105.         lcd.message('\n  Configuracao')
  106.         time.sleep(1)
  107.         lcd.clear()
  108.         lcd.message('   Selecionar   ')
  109.         lcd.message('\n     Opcao:     ')
  110.         time.sleep(1)
  111.         print('== Biometria Mestra Reconhecida! ==')
  112.         print('== Alarme Desativado ==')
  113.         print('== Modo de Configuração ==')
  114.         print('Selcione uma das Opções de Configuração:')
  115.         print('Enroll')
  116.         print('Del')
  117.         print('Exit')
  118.     else:
  119.         if (Alarm == True):
  120.             lcd.clear()
  121.             lcd.message('= Press. Botao =')
  122.             lcd.message('\n   Biometria:')
  123.             print('Pressione Qualquer Tecla para Identificação Biométrica:')
  124.         else:
  125.             lcd.clear()
  126.             lcd.message('   Biometria    ')
  127.             lcd.message('\n  Reconhecida   ')
  128.             time.sleep(1)
  129.             lcd.clear()
  130.             lcd.message('     Alarme     ')
  131.             lcd.message('\n  Desativado   ')
  132.             time.sleep(1)
  133.             lcd.clear()
  134.             lcd.message('    Passagem    ')
  135.             lcd.message('\n    Liberada    ')
  136.             time.sleep(1)
  137.             print('== Biometria Reconhecida ==')
  138.             print('== Alarme Desativado ==')
  139.             print('== Passagem Liberada ==')
  140.  
  141. #================================  E-MAIL  =====================================
  142. #===============================================================================
  143. def mailMSG(body):
  144.     fromaddr = "dsoftware46.cc@interconta.com.br"
  145.     toaddr = "alexistpw@gmail.com"
  146.     msg = MIMEMultipart()
  147.     msg['From'] = fromaddr
  148.     msg['To'] = toaddr
  149.     msg['Subject'] = "Controle de Acesso Rack"
  150.  
  151.     #body = "Super Raspberry E-Mail!"
  152.     msg.attach(MIMEText(body, 'plain'))
  153.  
  154.     server = smtplib.SMTP('smtp.gmail.com', 587)
  155.     server.starttls()
  156.     server.login(fromaddr, "lex11965611")
  157.     text = msg.as_string()
  158.     server.sendmail(fromaddr, toaddr, text)
  159.     server.quit()
  160.  
  161. #================================  OK_BOL  ======================================
  162. #===============================================================================
  163. def enrollFinger():
  164.     global Reg_Mstr
  165.     count_T = 0
  166.  
  167.     lcd.clear()
  168.     lcd.message('    Inserir     ')
  169.     lcd.message('\n   Digital...   ')
  170.     print('Waiting for finger...')
  171.     while (f.readImage() == False):
  172.         time.sleep(.3)
  173.         count_T += 1
  174.         if (count_T == 33):
  175.             lcd.clear()
  176.             lcd.message('    Digital     ')
  177.             lcd.message('\n  nao Inserida ')
  178.             time.sleep(1)
  179.             print('Finger not Found')
  180.             return
  181.     f.convertImage(0x01)
  182.     result = f.searchTemplate()
  183.     positionNumber = result[0]
  184.     if ( positionNumber >= 0 ):
  185.         print('Template already exists at position #' + str(positionNumber))
  186.         lcd.clear()
  187.         lcd.message(' Digital #'+str(positionNumber))
  188.         lcd.message('\n ja Cadastrada  ')
  189.         time.sleep(2)
  190.         return
  191.  
  192.     print('Remove finger...')
  193.     lcd.clear()
  194.     lcd.message('    Remover')
  195.     lcd.message('\n    Digital ')
  196.     while (f.readImage() == True):
  197.         pass
  198.     print('Waiting for same finger again...')
  199.     lcd.clear()
  200.     lcd.message('   Reinserir')
  201.     lcd.message('\n    Digital ')
  202.     while (f.readImage() == False):
  203.         pass
  204.     f.convertImage(0x02)
  205.     if (f.compareCharacteristics() == 0):
  206.         print ('Fingers do not match')
  207.         lcd.clear()
  208.         lcd.message('!!    ERRO    !!')
  209.         lcd.message('\n    Paridade')
  210.         time.sleep(2)
  211.         return
  212.     f.createTemplate()
  213.  
  214.     if (Reg_Mstr == False):
  215.         f.storeTemplate(0)
  216.         # mssg = "New Master Biometry Registered at FP_0"
  217.         # mailMSG(mssg)
  218.         Reg_Mstr = True
  219.     else:
  220.         positionNumber = f.storeTemplate()
  221.         # mssg = "New template position at FP_" + str(positionNumber)
  222.         # mailMSG(mssg)
  223.  
  224.     print('Finger Enrolled successfully!')
  225.     lcd.clear()
  226.     lcd.message('Biometria #' + str(positionNumber))
  227.     lcd.message('\n  Cadastrada!')
  228.     time.sleep(2)
  229.  
  230. #==============================  BUSCA BIOMETRIA  ==============================
  231. #===============================================================================
  232. def searchFinger():
  233.     global Mstr_Flag
  234.     global Alarm
  235.     count_T = 0
  236.     try:
  237.         print('Waiting for finger...')
  238.         lcd.clear()
  239.         lcd.message('    Inserir     ')
  240.         lcd.message('\n   Digital...   ')
  241.         while( f.readImage() == False ):
  242.             time.sleep(.3)
  243.             count_T += 1
  244.             if (count_T == 33):
  245.                 print('Finger not Found')
  246.                 lcd.clear()
  247.                 lcd.message('    Digital     ')
  248.                 lcd.message('\n  nao Inserida ')
  249.                 time.sleep(2)
  250.                 return False
  251.         f.convertImage(0x01)
  252.         result = f.searchTemplate()
  253.         positionNumber = result[0]
  254.         accuracyScore = result[1]
  255.         if (positionNumber == -1) :
  256.             print('No match found!')
  257.             lcd.clear()
  258.             lcd.message('!  Biometria   !')
  259.             lcd.message('\n nao Cadastrada')
  260.             time.sleep(2)
  261.             return False
  262.         elif (positionNumber == 0):
  263.             Mstr_Flag = True
  264.             Alarm = False
  265.             print('Found template at position #' + str(positionNumber))
  266.             lcd.clear()
  267.             lcd.message(' Biometria #' + str(positionNumber))
  268.             lcd.message('\n  Identificada')
  269.             # mssg = "Master Biometry Confirmed!"
  270.             # mailMSG(mssg)
  271.             time.sleep(2)
  272.             return True
  273.         else:
  274.             Alarm = False
  275.             Mstr_Flag = False
  276.             print('Found template at position #' + str(positionNumber))
  277.             lcd.clear()
  278.             lcd.message(' Biometria #' + str(positionNumber))
  279.             lcd.message('\n  Identificada')
  280.             # mssg = "Entrada Autorizada para FP_" + str(positionNumber)
  281.             # mailMSG(mssg)
  282.             time.sleep(1)
  283.             return True
  284.  
  285.     except Exception as e:
  286.         print('Operation failed!')
  287.         print('Exception message: ' + str(e))
  288.         exit(1)
  289.  
  290. #==============================  DELETA BIOMETRIA  =============================
  291. #===============================================================================
  292. def delFinger():
  293.     positionNumber = 0
  294.     count=0
  295.     print('Deleting FingerPrint!')
  296.     lcd.clear()
  297.     lcd.message('=Del. Biometria=')
  298.     lcd.message('\nTemplate #' + str(count))
  299.     while (gpio.input(OK_B) == 1):   # here OK_B key means ok
  300.         if (gpio.input(INC) == 0):
  301.             count=count+1
  302.             if count>1000:
  303.                 count=1000
  304.             print('Position: ' + str(count))
  305.             lcd.clear()
  306.             lcd.message('=Del. Biometria=')
  307.             lcd.message('\nTemplate #' + str(count))
  308.             time.sleep(0.3)
  309.         elif (gpio.input(DEC) == 0):
  310.             count=count-1
  311.             if count<0:
  312.                 count=0
  313.             print('Position: ' + str(count))
  314.             lcd.clear()
  315.             lcd.message('=Del. Biometria=')
  316.             lcd.message('\nTemplate #' + str(count))
  317.             time.sleep(0.3)
  318.     positionNumber=count
  319.     if (f.deleTemplate(positionNumber) == True):
  320.         print('Template deleted!')
  321.         lcd.clear()
  322.         lcd.message('=  Biometria   =')
  323.         lcd.message('\n   Deletada')
  324.         # mssg = "FingerPrint FP_" + str(positionNumber) + "Deletado!"
  325.         # mailMSG(mssg)
  326.         time.sleep(2)
  327.  
  328. #\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\////////////////////////////////////////
  329. #|||||||||||||||||||||||||||||||||||  SETUP  |||||||||||||||||||||||||||||||||||
  330.  
  331. gpio.output(BUZZER, HIGH)
  332. gpio.output(RELE, HIGH)
  333. try:
  334.     f = PyFingerprint('/dev/ttyUSB0', 57600, 0xFFFFFFFF, 0x00000000)
  335.  
  336.     if ( f.verifyPassword() == False ):
  337.         raise ValueError('The given fingerprint sensor password is wrong!')
  338.         lcd.clear()
  339.         lcd.message('!!    ERRO    !!')
  340.         lcd.message('\n  Sensor Biom.')
  341.         time.sleep(2)
  342.  
  343. except Exception as e:
  344.     print('Exception message: ' + str(e))
  345.     gpio.cleanup()
  346.     exit(1)
  347.  
  348. print('Currnetly used templates: ' + str(f.getTemplateCount()) + '/' + str(f.getStorageCapacity()))
  349.  
  350. try:
  351.     print('Testando Mestre:')
  352.     tableIndex = f.getTemplateIndex(0) #index page (0, 1, 2, 3) cada página com 250 registros (1000 ao todo)
  353.     if tableIndex[0] == True:
  354.         print('Mestre Definido.')
  355.     else:
  356.         print('Mestre Não Definido.')
  357.         lcd.clear()
  358.         lcd.message('   Mestre Nao')
  359.         lcd.message('\n   Definido!')
  360.         time.sleep(2)
  361.         Reg_Mstr = False
  362.         while (Reg_Mstr == False):
  363.             enrollFinger()
  364.         print('Mestre Definido.')
  365.         lcd.clear()
  366.         lcd.message('     Mestre')
  367.         lcd.message('\n    Definido!')
  368.         time.sleep(2)
  369.  
  370. except Exception as e:
  371.     print('Operation failed!')
  372.     lcd.clear()
  373.     lcd.message('    Operacao')
  374.     lcd.message('\n    Falhou!')
  375.     time.sleep(2)
  376.     print('Exception message: ' + str(e))
  377.  
  378. intro_MSSG()
  379.  
  380. #\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\////////////////////////////////////////
  381. #|||||||||||||||||||||||||||||||||||  LOOP  ||||||||||||||||||||||||||||||||||||
  382. while(1):
  383.     if (Conf_Mode):
  384.         if (gpio.input(OK_B) == 0):
  385.             while (gpio.input(OK_B) == 0):
  386.                 pass
  387.             if OPT_count == 0:
  388.                 enrollFinger()
  389.             if OPT_count == 1:
  390.                 OPT_count = 0
  391.                 delFinger()
  392.             if OPT_count == 2:
  393.                 OPT_count = 0
  394.                 Conf_Mode = False
  395.                 Alarm = True
  396.                 print('Encerrando Modo de Configuração')
  397.                 lcd.clear()
  398.                 lcd.message('   Encerrando')
  399.                 lcd.message('\n   Modo Conf.')
  400.                 gpio.output(RELE, HIGH)
  401.                 time.sleep(1)
  402.                 intro_MSSG()
  403.             time.sleep(0.6)
  404.  
  405.         if (gpio.input(INC) == 0):
  406.             OPT_count += 1
  407.             if OPT_count > 2: OPT_count = 2
  408.             # if OPT_count == 0:
  409.             #     print('== Cadastrar Nova Biometria  ==')
  410.             if OPT_count == 1:
  411.                 print('== Deletar Biometria  ==')
  412.                 lcd.clear()
  413.                 lcd.message('=   Deletar    =')
  414.                 lcd.message('\n   Biometria')
  415.             if OPT_count == 2:
  416.                 print('== Sair do Modo de Configuração ==')
  417.                 lcd.clear()
  418.                 lcd.message('=     Sair     =')
  419.                 lcd.message('\nModo de Config.')
  420.                 time.sleep(2)
  421.             while gpio.input(INC) == 0:
  422.                 pass
  423.             time.sleep(0.6)
  424.  
  425.         if gpio.input(DEC) == 0:
  426.             OPT_count -= 1
  427.             if OPT_count < 0: OPT_count = 0
  428.             if OPT_count == 0:
  429.                 print('== Cadastrar Nova Biometria  ==')
  430.                 lcd.clear()
  431.                 lcd.message('=  Cadastrar   =')
  432.                 lcd.message('\n   Biometria ')
  433.             if OPT_count == 1:
  434.                 print('== Deletar Biometria  ==')
  435.                 lcd.clear()
  436.                 lcd.message('=   Deletar    =')
  437.                 lcd.message('\n   Biometria')
  438.             # if OPT_count == 2:
  439.             #     print('== Sair do Modo de Configuração ==')
  440.             while gpio.input(DEC) == 0:
  441.                 pass
  442.             time.sleep(0.6)
  443.  
  444.     else:
  445.         if (gpio.input(OK_B) == 0) or (gpio.input(INC) == 0) or (gpio.input(DEC) == 0):
  446.             if (searchFinger() == True):
  447.                 Alarm = False
  448.                 if (Mstr_Flag == True):
  449.                     Conf_Mode = True
  450.                     gpio.output(RELE, LOW)
  451.                     intro_MSSG()
  452.                 else:
  453.                     gpio.output(RELE, LOW)
  454.                     intro_MSSG()
  455.  
  456.         if (gpio.input(PIR) == 1) and (Alarm == True):
  457.             print('Presença Detectada!')
  458.             lcd.clear()
  459.             lcd.message('!   Presença   !')
  460.             lcd.message('\n   Detectada')
  461.             while gpio.input(PIR) == 1:
  462.                 time.sleep(1)
  463.                 alarm_Tcount += 1
  464.                 if (alarm_Tcount == 3):
  465.                     alarm_Tcount = 0
  466.                     extProc_00 = sp.Popen(['sudo','service','motion','start'])
  467.                     extProc_01 = sp.Popen(['python3','Documents/Alexis/Rasp_Teste/Hack_CA_Alarm.py']) # runs myPyScript.py   # subprocess.call("Hack_CA_Alarm.py")
  468.                     status_00 = sp.Popen.poll(extProc_00)
  469.                     status_01 = sp.Popen.poll(extProc_01)
  470.                     print(status_00)
  471.                     print(status_01)
  472.                     # mssg = "Entrada Não Autorizada Detectada no Hack! Alarme Disparado!"
  473.                     # mailMSG(mssg)
  474.                     while (Alarm == True):
  475.                         while (gpio.input(OK_B) != 0) and (gpio.input(INC) != 0) and (gpio.input(DEC) != 0):
  476.                             pass
  477.                         if (searchFinger()):
  478.                             extProc_02 = sp.Popen(['sudo','service','motion','stop'])
  479.                             status_02 = sp.Popen.poll(extProc_02)
  480.                             sp.Popen.terminate(extProc_01) # closes the process
  481.                             status_01 = sp.Popen.poll(extProc_01) # status should now be something other than 'None'
  482.                             print(status_01)
  483.                             print(status_02)
  484.                             gpio.output(BUZZER, HIGH)
  485.                             gpio.output(ALM_LED, HIGH)
  486.                             gpio.output(RELE, LOW)
  487.                             print('Alarm Deactivated!')
  488.                             break
  489.  
  490.         else: alarm_Tcount = 0
  491.  
  492.         while (Alarm == False) and (Conf_Mode == False):
  493.             if (gpio.input(PIR) == 1) and (TA == True):
  494.                 t_a.cancel()
  495.                 TA = False
  496.                 # while (gpio.input(PIR) == 1):
  497.                 #     pass
  498.             if (gpio.input(PIR) == 0) and (TA == False):
  499.                 t_a = threading.Timer(20, timer_Alarm)
  500.                 t_a.start()
  501.                 TA = True
  502.                 # while (gpio.input(PIR) == 0):
  503.                 #     pass
  504.  
  505.             if (gpio.input(PIR) == 0):
  506.                 gpio.output(BUZZER, LOW)
  507.                 time.sleep(0.1)
  508.                 gpio.output(BUZZER, HIGH)
  509.                 time.sleep(2)
  510.  
  511.  
  512.  
  513.  
  514.  
  515.  
  516.  
  517.  
  518.  
  519. ################################################################################
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement