나의 여행과 일상 일기장

(7) 캡스톤디자인 7강_프로토타이핑과 led센서 추가 본문

일상일기

(7) 캡스톤디자인 7강_프로토타이핑과 led센서 추가

똥글똥글 2022. 4. 25. 19:10
반응형

1. 번호판인식 끝나고 이미지 저장 후 안드로이드에서 변환하는 법 또는 이미지를 라즈베리파이에서 저장(라즈베리파이에서 이미지 저장 완료)

.https://pynative.com/python-mysql-blob-insert-retrieve-file-image-as-a-blob-in-mysql/ 블로그참고

 

- 기존은 데이터베이스 이미지 타입이 BLOB으로 되어있지만 LONG BLOB으로 바꿔야 이미지 용량이 다 들어갈 수 있다. --> 현재 바이너리형식으로 저장되어 있다.

 1) imgprocess2.py(데이터베이스 연결부터 바이너리 이미지 삽입)

    #라즈베리파이 local 데이터베이스 연결
    conn = pymysql.connect(host = 'localhost', user='phpmyadmin', password='1234', db = 'testDB', charset='utf8') #라즈베리파이 로컬
    
    # pc에 데이터베이스 접속
    #conn = pymysql.connect(host = 'xxx.xxx.xx.xxx', user='phpmyadmin', password='1234', db = 'testDB', charset='utf8')
    #print(result)
    curs=conn.cursor()
    
    def convertToBinaryData(filename): #데이터베이스에 바이너리 이미지넣기
        with open(filename, 'rb') as file:
            binaryData = file.read()
        return binaryData
        
        //
        //
        //
    cv2.imwrite(chars + '.jpg', img_out)   #데이터베이스에 이미지를 넣기 위한 변수 img
    #plt.imshow(img_out)
    #piPark는 초음파센서로 주차여부 판단, piImg는 추출된 이미지
    sql = "Insert into picam (piPlot, piPorD, piName,piPark,piImg,piExtract, piTF, piImgTF) VALUES(%s,%s,%s,%s,%s,%s,%s,%s)"
      
    empPicture = convertToBinaryData("/home/pi/CarLicensePlate/test_img/pic.jpg")  
    #넣을 이미지의 위치

    curs.execute(sql, ('우촌주차장','P','picam', 'T', empPicture, chars,'F','F'))
    conn.commit()

    conn.close()
       
    return chars  //글자를 반환한다.
    //
    //
    //

 

2. 번호판 인식 처리가 끝나고 improcess2.py에서 다시 serialard.py로 가야 된다. (시스템 자동화)

- imgprocess2.py가 실행될 때 pic.jpg때문에 멈출 가능성이 있다. 그래서 import os, os.remove()을 이용해서 번호판인식이 끝날 때마다 이미지 파일을 삭제해주었다. --> 해결(인식만 하고 파일은 삭제)

- imgprocess1.py파일을 전체 함수 씌워서 2번째 인식할 때 함수가 스킵되는 현상을 해결했다.

- 시스템 자동화 완성

 1) imgprocess2.py

def computervision():
    //
    //
    //
    parking_classfication("/home/pi/CarLicensePlate/test_img/pic.jpg")  #인식을 하려는 사진 (경로 수정가능)
    os.remove("/home/pi/CarLicensePlate/test_img/pic.jpg")   #찍힌 사진 삭제
    
    sleep(3)
    import serialard  #다시 조도센서로 출입하는 차량을 인식하기 위한 import
    serialard.sensor()
    sys.exit(1)  #메모리 과부하를 막기 위한 exit()
    
computervision()

 

 

3. 우선 번호판 완성 -> 번호판 사진 찍으면서 적절한 거리측정

- 번호판까지의 거리는 약 60cm정도된다. -> 적어도 90cm는되어야 자동차 모형까지 구현할 수 있다. 조도센서 위치도 60cm정도 되어야 한다.

- 뒤에 검정색 붙여서 번호판인식이 되는지 안되는지까지 확인하기, 좀 더 멀리가서 해보기

- 그냥 뒤에서 찍는 것은 인식 못함, 뒤에 검정색 종이를 붙여서 다시 찍어보기

- 위 방법도 안되면 car1.jpg를 다시 뽑아서 해보기

<<<<<<임의의 번호판 인식완료>>>>>>>>>

- 파이카메라로 촬영한 임의의 번호판

 

def computervision():
    import sys    #코드 실행을 강제 종료하기 위해 import sys
    import numpy as np
    import os    #코드가 한번 실행한 후 기존의 사진파일을 삭제해야 한다.
    import pymysql  #데이터베이스 import
    from time import sleep    #sleep()을 사용하기 위한 방법
//
//
    if i[0] >= 0.8 :
       recognition_carlicenseplate(img_path)
    if i[1] >= 0.8 :
       recognition_carlicenseplate(img_path)   
//
//

//임의로 제작한 번호판을 인식 완료했다.

//조도센서, 초음파센서를 통과한 번호판은 자동차로 인식되었기 때문에 recognition_carlicenseplate()를 통과하면 번호판에 적혀있는 글자를 인식할 수 있다.

 

<<<<<<<<번호판인식 완료>>>>>>>>

4. 벽면설계 완성

--> 프로토타이핑 다시하기 ---> 대략적인 사이즈 측정 --->그림으로 사이즈 표현----> 예린씨한테 알려주기(여기까지 완료)

//벽면 설계도 ver1

 

5. 프로토타입 외관 만들기 ver3

- 레이저 커팅을 이용해서 벽면을 완성하고 각 모듈을 붙인다.

6. 번호판 배경이 검정색이 아니어도 인식 가능한지 --> 배경이 검정색이 아닐때 인식률이 매우 떨어짐

-> 적어도 배경은 검정색이 되게 해야한다.

 

7. led 라즈베리파이에 연결하기 http://blog.naver.com/PostView.nhn?blogId=pk3152&logNo=221368477491&redirect=Dlog&widgetTypeCall=true&directAccess=false 블로그 참고(led사용)

- 촬영 후 자동차가 주차 중일 때 led가 깜박깜박거리게 하고 Led가 꺼지면 번호판인식하도록 함

- 라즈베리파이에 GPIO연결

1) Serialmicro.py ver4(led 코드 추가)

import serial
import sys
from time import sleep
import os
import RPi.GPIO as GPIO
import time

def micro():
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(17, GPIO.OUT)
    while True:
        ser = serial.Serial('/dev/ttyUSB0',9600)   #while문이 계속 돌면서 통신포트 open
        microresult = int(ser.readline())
        GPIO.output(17, True)  #주차중인 경우 계속 led가 깜박이도록한다. 
        time.sleep(0.1)
        GPIO.output(17, False)
        time.sleep(0.1)
        if microresult < 5:  #주차완료
            print("차가 주차완료했습니다 ")
            GPIO.output(17, False)
            import imgprocess2
            imgprocess2.computervision()
            #imgprocess2.parking_classfication("/home/pi/CarLicensePlate/test_img/pic.jpg")  #경로 수정가능
            sys.exit(1)    #이건 필수로 있어야 함
        elif microresult >= 5 and microresult < 90:   #주차중
            print("차가 주차중입니다")    
            continue
        else:                             #차가 다시 뒤로 나가면 조도센서로 처음부터 다시 인식
            print("차가 나갔습니다")
            GPIO.output(17, False)
            import serialard
            serialard.sensor()
            sys.exit(1)   #이것도 필수
            
micro()

 

//촬영 후 자동차가 주차 중일 때 LED0.1초 간격으로 깜박깜박거리게 한다. 주차완료 했거나 차가 나간 경우에는 LED가 꺼지고 다음과정을 실행한다.

 

8. 바닥설계

- 1개 더 추가 조도센서usb가 지나가는 곳을 만들어야 한다.(구멍 1개 뜷어야 한다.) -->프로토타이핑처럼 하면 됨

---> 길이재기 ---> 길이 측정 후 설계도 완성  --> 제작완료

 1) 바닥 프로토타이핑

- 카메라와 초음파센서, 그리고 조도센서 usb케이블이 들어갈 수 있는 벽면 제작

- 바닥면은 임의로 종이를 이용해서 간단히 제작

 2) 완성

 

9. 실행 동영상

 

반응형