#1. selfie program for the blind [pyQt5] UI 만들기
python을 다운받을때 anaconda를 선택해 다운받았다면, pyQt5를 따로 설치하지 않아도 바로 이용할 수 있다.
:/anaconda3/Library/bin 폴더를 확인해보자.
파일 중에서 designer.exe 파일을 더블클릭하면 다음과 같은 화면을 볼 수 있다.
참 간단하다. 자주 사용할 녀석이니 바로가기를 만들어두자. 나는 작업표시줄에 고정해놓았다.
Main Window를 생성해주고 Layout에서 Grid Layout을 선택해서 넣어주고,
Buttons 항목에서 Pushbutton을 선택해 넣어서 Take Selfie 항목을 만들어주었다.
우측 속성값에서 몇가지 설정해주면 기초 ui 설정은 끝난다.
> QObject > objectName > takeSelfie 입력
objectName에 입력해주는 값은 파이썬 코드 내에서 사용할 버튼의 이름이다. 각자 스타일대로 작성해서 사용하자.
> QWidget > sizePolicy > 수직정책 > Preferred
세로로 작게 되어있던 버튼을 수직으로 키워줬다. 물론 그냥 마우스를 이용해서 키워도 된다.
> QWidget > font > 설정
폰트 설정은 개개인에게 맞게 설정하면 된다.
QAbstractButton > text > Take Selfie 입력
이 항목에서 설정하는 것은 해당 버튼 ui의 보여지는 항목값이다. Take Selfie로 입력하면 버튼의 글씨가 바뀐다.
ui 기본 세팅이 끝났으니 python 코드와 같은 디렉토리에 저장해주자. ui 파일명을 복사해두면 편하게 코딩할 수 있다.
이제 파이썬 코드를 작성해서 ui를 불러오고, ui의 버튼이 눌렸을때의 이벤트를 작성해보자.
먼저 ui와 코드가 연동되도록 코드를 작성했다.
함수를 구현하기 전에 간단하게 모양만 취하려면 함수 내용에 pass를 적어주면 된다.
import sys
from PyQt5.QtWidgets import QMainWindow, QApplication
from PyQt5.uic import loadUiType
form_class = loadUiType("selfie.ui")[0]
class MyWindowClass(QMainWindow, form_class):
def __init__(self, parent=None):
QMainWindow.__init__(self, parent)
self.setupUi(self)
takeSelfie = self.takeSelfie
self.takeSelfie.clicked.connect(self.takeSelfieClick)
def takeSelfieClick(self):
pass
app = QApplication(sys.argv)
myWindow = MyWindowClass(None)
myWindow.show()
app.exec_()
실행결과는 다음과 같다.
물론 버튼을 누르면 아무일도 일어나지 않는다.
이제 버튼을 누르면 웹캠화면이 나타나도록 해보자.
코드는 다음과 같다.
import sys
from PyQt5.QtWidgets import QMainWindow, QApplication
from PyQt5.uic import loadUiType
import os
import datetime
import cv2
form_class = loadUiType("selfie.ui")[0]
class MyWindowClass(QMainWindow, form_class):
def __init__(self, parent=None):
QMainWindow.__init__(self, parent)
self.setupUi(self)
takeSelfie = self.takeSelfie
self.takeSelfie.clicked.connect(self.takeSelfieClick)
def takeSelfieClick(self):
video_capture = cv2.VideoCapture(0)
while (True):
grabbed, frame = video_capture.read()
cv2.imshow('Original Video', frame)
key = cv2.waitKey(1);
if key == ord('q'):
break
elif key == ord('s'):
file = datetime.datetime.now().strftime("%Y%m%d_%H%M%S%f") + '.jpg'
cv2.imwrite(file, frame)
print(file, ' saved')
video_capture.release()
cv2.destroyAllWindows()
app = QApplication(sys.argv)
myWindow = MyWindowClass(None)
myWindow.show()
app.exec_()
(함수 안의 코드는 참고 블로그에서 긁어왔다. 내일 일어나면 변경해야지)
#2에서 할일
- 비디오 캡쳐 코드 구글링 더 하고 이해해서 정리하기
- 얼굴 인식 기능 추가하기
- (시간이 된다면) 안내문구 출력 추가
참고 블로그