공부/Project

#1. selfie program for the blind [pyQt5] UI 만들기

PENG 2021. 11. 24. 03:39

 

python을 다운받을때 anaconda를 선택해 다운받았다면, pyQt5를 따로 설치하지 않아도 바로 이용할 수 있다.

:/anaconda3/Library/bin 폴더를 확인해보자.

anaconda3 설치 시 생성된 파일에 있다.

 

파일 중에서 designer.exe 파일을 더블클릭하면 다음과 같은 화면을 볼 수 있다.

pyQt5 main 화면

참 간단하다. 자주 사용할 녀석이니 바로가기를 만들어두자. 나는 작업표시줄에 고정해놓았다.


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에서 할일

  • 비디오 캡쳐 코드 구글링 더 하고 이해해서 정리하기
  • 얼굴 인식 기능 추가하기
  • (시간이 된다면) 안내문구 출력 추가

 

참고 블로그

 

[모듈 2-5] 외부 카메라에서 이미지 받아오기 파이썬 코드(feat. 스마트폰 웹캠 Droid cam)

1. 외부 카메라 장착  - 노트북 내장카메라나 웹캠을 연결하면 기본적으로 카메라가 잡힌다.  - 허나, 이러한 환경이 되지 않을 경우는 스마트폰을 웹캠으로 연결하여 사용할 수 있다. 2. 아이폰

ai0.kr