일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- 제주도 여행 계획
- 하와이 액티비티
- 제주도 가볼만한곳
- 동해
- 영동 가볼만한곳
- 교토 가볼만한곳
- 아쿠아리움
- 일본 후쿠오카 여행
- 하와이 가볼만한곳
- 엠버호텔
- 베트남 다낭 태교 여행
- 제주도 여행계획
- 하와이 카페
- 호텔 스카이파크
- 순천
- 낙산공원
- 다낭 호이안 올드타운 맛집
- 교토 여행
- 비짓재팬웹
- 다낭 호이안 올드타운 카페
- 오사카 가볼만한곳
- 강릉
- 하와이 여행
- 교토역 스타벅스
- 대전 신세계
- 서울 가볼만한곳
- 서울 맛집
- 하와이 맛집
- 코엑스
- 오사카 여행
- Today
- Total
나의 여행과 일상 일기장
(7) 캡스톤디자인 7강_프로토타이핑과 led센서 추가 본문
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()
//촬영 후 자동차가 주차 중일 때 LED가 0.1초 간격으로 깜박깜박거리게 한다. 주차완료 했거나 차가 나간 경우에는 LED가 꺼지고 다음과정을 실행한다.
8. 바닥설계
- 판 1개 더 추가 조도센서usb가 지나가는 곳을 만들어야 한다.(구멍 1개 뜷어야 한다.) -->프로토타이핑처럼 하면 됨
---> 길이재기 ---> 길이 측정 후 설계도 완성 --> 제작완료
1) 바닥 프로토타이핑
- 카메라와 초음파센서, 그리고 조도센서 usb케이블이 들어갈 수 있는 벽면 제작
- 바닥면은 임의로 종이를 이용해서 간단히 제작
2) 완성
9. 실행 동영상
'일상일기' 카테고리의 다른 글
(9) 캡스톤디자인 9강_qrprocess.py 수정 (0) | 2022.04.26 |
---|---|
(8) 캡스톤디자인 8강_부저 모듈과 QRcode 인식 (0) | 2022.04.26 |
(6) 캡스톤디자인 6강_조도센서, 초음파센서, 번호판인식 수정 및 프로토타입 (0) | 2022.04.25 |
(5) 캡스톤디자인 5강_차량 번호판 인식 (0) | 2022.04.25 |
(4) 캡스톤디자인 4강_라즈베리파이 tensorflow 설치 (0) | 2022.04.24 |