나의 여행과 일상 일기장

(9) 캡스톤디자인 9강_qrprocess.py 수정 본문

일상일기

(9) 캡스톤디자인 9강_qrprocess.py 수정

똥글똥글 2022. 4. 26. 20:50
반응형

1. 데이터베이스 삽입 시 Timestamp 수정

https://technote.kr/264 블로그 참고

      //
      import datetime    #현재 시간을 넣기위해
      now = datetime.datetime.now()
      empPicture = convertToBinaryData("/home/pi/CarLicensePlate/test_img/pic.jpg")  #넣을 이미지의 위치지정
      
      sql = "UPDATE picam SET piTime = %s, piImg = %s, piExtract=%s where id=13"      #id가 13인 위치에 데이터 수정
      #sql = "Insert into picam (piPlot, piPorD, piName, piTime, piImg, piExtract) VALUES (%s, %s,%s,%s,%s,%s)"
     # sql = "UPDTAE picam SET piImg = %s, piExtract=%s where piName=%s and piPlot=%s"

      #curs.execute(sql, ('한성대학교 주차장','D','P1', now, empPicture, chars))  #sql실행
      curs.execute(sql, (now, empPicture, chars))  #sql실행
      
      conn.commit()
      conn.close()
      //

- 기존의 데이터베이스 삽입은 이미지와 글자를 넣을 수 있고 시간은 업데이트되지 않았었다. 그래서 datetimeimport하고 현재의 시간을 가져와서 sql문에 업데이트 하면 차가 들어올 때마다 현재시간으로 업데이트된다.

 

2. QRcode 이미지 출력

- 파이카메라로 찍었을 때 이미지

3. 부저 단독 코드(부저코드의 모듈화하여 어디서든 사용할 수 있게한다)

- qrprocess.py 코드에서 장애인이나 임산부가 아닌 불법차량이라면 buzzer.py가 실행되며 부저로 경고를 하고 불법주차가 나갔는지 확인하기 위해 serialmicro2.py코드를 실행한다.

import sys

def buz():   #불법주차인지 확인하기 위한 부저
    import RPi.GPIO as GPIO
    import time
    from time import sleep

    GPIO.cleanup() # cleanup all GPIO

    GPIO.setmode(GPIO.BCM) # Broadcom pin-numbering scheme
    GPIO.setup(26, GPIO.OUT) # output rf
    GPIO.output(26, GPIO.HIGH)

    sleep(1)   #1초동안 부저가 울린다.

    GPIO.cleanup() # cleanup all GPIO
    
    import serialmicro2   #불법주차인지 확인하기 위해 초음파센서2로 넘어가기
    serialmicro2.micro2()
    
    sys.exit(1)

buz()

4. QRcode 분석코드 수정

- QRcode 인식 코드에 데이터베이스에 접근하여 데이터를 삽입하는 기능 구현하기 ----> 약간 수정할 부분이 남아있음

- Qrprocess.py 코드 수정--> 색깔 인식은 빼고 그레이스케일에서 이미지 분석하기 --> 인식완료

-> 멀리서도 QRcode인식이 잘되기 때문에 조도센서 인식때 1번만 사진을 찍는다.

 

 1) qrprocess.py ver7

import sys

def qr():
    import pymysql  #데이터베이스 import
    from datetime import datetime
    import cv2
    import matplotlib.pyplot as plt
    import matplotlib.image as mpimg
    import pyzbar.pyzbar as pyzbar
    import matplotlib.pyplot as plt
    
    #네이버 클라우드 데이터베이스
    conn = pymysql.connect(host = 'xx.xx.xx.xx', user='xx', password='xx', db = 'firstdb', charset='utf8')
    
    #라즈베리파이 local 데이터베이스 연결
    #conn = pymysql.connect(host = 'localhost', user='phpmyadmin', password='1234', db = 'testDB', charset='utf8')
    
    curs=conn.cursor() #데이터베이스 커서 생성
    
    img = cv2.imread('/home/pi/CarLicensePlate/test_img/pic.jpg')
    plt.imshow(img)
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    plt.imshow(gray, cmap='gray')
    decoded = pyzbar.decode(gray)
    decoded #[Decoded(data=b'bbanghyong', type='CODE128', rect=Rect(left=19, top=10, width=140, height=17), polygon=[Point(x=19, y=11), Point(x=19, y=27), Point(x=159, y=26), Point(x=159, y=10)])]
   
    stnowday = datetime.today().strftime("%Y%m%d")
    nowday = int(stnowday)
    for d in decoded:
       # print(d.data.decode('utf-8'))
        #print(d.type)
        data1=d.data.decode('utf-8').split(' ')[0]    #P or D
        data2=d.data.decode('utf-8').split(' ')[1]    #유효기간
        print(data1)
        print(data2)
        
        if(int(data2)>=nowday):
           print("유효한 코드입니다")
           if(data1=='P'):
              print("임산부")
              sql = "UPDATE picam SET piPorD = %s,piTF =%s where id=13"    #id가 13인 위치에 데이터 수정(임산부, TF 설정)
              curs.execute(sql, (data1,'T'))     #sql실행
              conn.commit()
              conn.close()
              import serialard    #다시 조도센서로 출입하는 차량을 인식하기 위한 import
              serialard.sensor()
              sys.exit(1)
          
           elif(data1=='D'):
              print("장애인")
              sql = "UPDATE picam SET piPorD = %s,piTF =%s where id=13"      #id가 13인 위치에 데이터 수정(장애인, TF 설정)
              curs.execute(sql, (data1,'T'))    #sql실행
              conn.commit()
              conn.close()
              import serialard    #다시 조도센서로 출입하는 차량을 인식하기 위한 import
              serialard.sensor()
              sys.exit(1)
          
           else:
              print("유효하지 않은 코드입니다")
              import buzzer    #유효하지 않은 코드인 경우 부저
              buzzer.buz()
              sys.exit(1)
        else:
          print("만료된 코드입니다")
          import buzzer    #만료된 코드인 경우 부저
          buzzer.buz()
          sys.exit(1)
      
    plt.imshow(img)
    
qr()

- qrcode로부터 기간을 추출하여 기간이 만료되었다면 부저가 울리는 프로세스를 실행하고 기간이 유효하다면 코드를 추출한다.

- 코드를 추출하여 임산부와 장애인을 구분하고 코드가 D 또는 P라면 데이터베이스에 알맞은 id값을 찾아서 데이터를 업데이트한 후 처음 단계인 조도센서 인식으로 넘어간다. 만약 유효하지 않은 코드라면 부저가 울리는 프로세스를 실행한다.

5. 터미널 캡쳐하기

https://toytvstory.tistory.com/730 블로그 참고

반응형