반응형

안녕하세요.

 

일주일간 정보처리기사 필기를 준비하느라 블로그에 글이 뜸했습니다.

 

8월 22일 3회차 마치고 다시 컴백했습니다.

 

오늘은 라즈베리파이 카메라를 사용하겠습니다.

 

자료도 많고, 카메라와 다른 장비를 연결해서 만드는 것이 중요하기 때문에 가볍게 짚고 넘어 가겠습니다. 

 

 

Raspberry Pi Camera V2  ( 27,000원 ) 

https://www.devicemart.co.kr/goods/view?no=1077951

 

라즈베리파이 카메라모듈 V2, 8MP (RPI 8MP CAMERA BOARD)

고품질 8MP Sony IMX219 이미지 센서를 통한 고정초점렌즈 / 3280 x 2464 (사진), 1080p30, 720p60, 640x480p60/90 (비디오) / CSI 인터페이스 / 25mm x 23mm x 9mm

www.devicemart.co.kr

제가 조사해서 제일 가성비 좋은 카메라를 산게 아니라, 그냥 제일 대중적인 것을 샀기 때문에 잘 알아보시고 프로젝트에 맞는 카메라를 고르시기 바랍니다. 

 

라즈베리파이와 카메라를 연결한 모습입니다.

 

쿨러 !

 

카메라를 연결했으니, 라즈베리파이에서 설정합니다.  

 

화질 죄송합니다. Camera enable합니다.

 

import picamera   
import time              

    
with picamera.PiCamera() as camera:

    # setup
    camera.brightness = 50  # 밝기
    camera.rotation = 0  # 회전
    camera.annotate_text = "Hello!"  # 텍스트

    # main roop
    try:
        camera.start_preview(fullscreen=False, window=(0, 0, 300, 300))  # 카메라 미리보기
        time.sleep(1000)
        print('start')
        
    except KeyboardInterrupt:
        camera.stop_preview()   # 종료
        print('interrupt')        
        
    finally:
        camera.stop_preview()  # 종료
        print("clean up") 

 

여러 블로그를 찾아보니 with문을 쓰기도 하고 picamera에서 객체를 생성하는 방법이 있습니다.

 

저는 with문을 쓰는 것을 추천합니다. 

 

제가 요즘 파이썬을 좀더 파이썬스럽게 코딩하고 싶어 공부하고 있는 책입니다. 

 

컨텍스트 매니저 (Context Manger)

 

컴퓨터 관리에서 중요한 것은 사용하지 않는 프로그램은 종료하는 것이 중요합니다. 

 

예를 들어, 파일 관리에서 파일을 열면, 파일을 닫아야 합니다.

 

코드가 길어지면 빼먹는 일이 발생합니다. 작업을 완료한 파일을 닫지 않으면 리소스가 쌓여 문제를 일으킬 수 있습니다.

 

여기서 파이썬다운 코딩을 할 수 있는 with문을 소개합니다.

 

with문을 사용하여 Camera를 연동하면 with문과 끝난 동시에 리소스를 알아서 반납합니다.

 

좀 더 직관적이고 안전하게 코딩을 할 수있습니다.

728x90
반응형
반응형

안녕하세요.

 

오늘은 PyQt5에 matplotlib를 연동하는 방법에 대해 이야기하겠습니다.

 

 

제가 이번에 만든 필터를 구현하면서 애먹었던 부분 중 하나였던게

 

pyqt5에 plt를 연동시키는 것이였습니다.

 

결국 답이 레퍼런스 찾아보거나, stackoverflow를 통해 방법을 알아냈습니다.

 

우선 pyqt5에 matplotlib를 연동시키는 방법을 설명하겠습니다. 

 

 

 

 

1. pyqt5에 plt 연동

 

 

from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas

 

 

우선 import 부분에 위에 문구를 추가해줍니다.

 


from matplotlib import pyplot as plt



self.fig = plt.figure(figsize=[4, 4])



a = plt.subplot(2, 1, 1)
a1 = plt.subplot(2, 1, 2)





 

plot이 두개 담겨있는 fig가 변수로 저장이 되어있겠죠?

 

사용법은 간단합니다.

 

위에 import 해준 라이브러리를 사용하기 위해 fig를 FigureCanvas에 담아주면 됩니다. 

 


from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib import pyplot as plt



self.fig = plt.figure(figsize=[4, 4])



a = plt.subplot(2, 1, 1)
a1 = plt.subplot(2, 1, 2)

self.canvas = FigureCanvas(self.fig)



 

정말 간단하죠?

 

 

 

2. pyqt5에 toolbar 연동

 

툴바

위의 사진들 많이 보셨죠?

 

self.fig.show() 하면 보이는 툴바입니다.

 

툴바는 plot을 만들어서 분석하기 위해 확대하교 움직이기 위해 사용합니다.

 

사용방법은 FigureCanvas랑 비슷합니다.

 




from matplotlib import pyplot as plt
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar



self.fig = plt.figure(figsize=[4, 4])



a = plt.subplot(2, 1, 1)
a1 = plt.subplot(2, 1, 2)

self.canvas = FigureCanvas(self.fig)
self.toolbar = NavigationToolbar(self.canvas, self)


 

 

네. 비슷하기는 하지만 인자가 하나 더 들어가있죠?

 

 

첫번 째 인자로 우리가 방금 연동시킨 FigureCanvas가 들어가네요?

 

두번 째 인자로는 부모 인자를 넣으라 하는군요. 부모인자라 하면은 뭘까요?

 

우리들은 pyqt5를 사용하기 전에 우리들은 QWidget을 상속받아 사용합니다.

 

제 프로그램을 예시로

 

이런식으로 QWidget을 상속받고, self로 초기화 시킵니다. 

 

간단히 말해 parent 자리에 self를 넣어주면 됩니다.

 

 

 

3. Layout에 붙이기

 

2번까지 끝나셨으면 우리들에게는 두 개의 widget이 존재합니다.

 

self.canvas

self.toolbar

 

이제부터는 PyQt5의 기본 레이아웃 문제로 변하게 됩니다.

 

우선 저 같은 경우는 일단 Designer는 사용하지 않습니다. 

 

exe를 만들기 어려울뿐더러 하나 하나 코딩 한 줄 넣는게 저에겐 덜 헷갈려서 코딩으로 적겠습니다.

 

위에 그림처럼 위젯을 붙이기 위해서는 

 

수직으로 배치하는 QVBoxLayout (vertical)

 

lay = QVBoxLayout()

lay.addWidget(self.toolbar)
lay.addWidget(self.canvas)

 

짠!

 

만약 툴바를 아래로 내리고 싶으시면

 

lay = QVBoxLayout()

lay.addWidget(self.canvas)

lay.addWidget(self.toolbar)

짠!

 

두 위젯이 lay라는 레이아웃에 담겨 있습니다. 

 

이제 show를 해줍시다.

 

self.setLayout(lay)

 




from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib import pyplot as plt
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar



self.fig = plt.figure(figsize=[4, 4])



a = plt.subplot(2, 1, 1)
a1 = plt.subplot(2, 1, 2)

self.canvas = FigureCanvas(self.fig)
self.toolbar = NavigationToolbar(self.canvas, self)

lay = QVBoxLayout()
lay.addWidget(self.canvas)
lay.addWidget(self.toolbar)

self.setLayout(lay)


 

 

이런식으로 pyqt5에 matplot 연동시키시면 됩니다.

 

728x90
반응형
반응형

안녕하세요. 

 

몇 일동안 글을 못올렸습니다. 

 

그 이유가 제가 이번에 하이패스필터, 로우패스필터, 밴드패스 필터를 구현하였습니다.

 

파이썬응용에 글에 썻던 scipy는 사용하지 않았습니다.

 

공식을 보고 하나 하나 구현하였습니다. 

 

하지만 문제가 하나 발생했습니다. 어휴... 티스토리 동영상 업로드가 안되네요...

 

열심히 찍었는데... 안올라가더라구요 ㅠ. HTML을 손보면 된다는데... 힘쓰는게 너무 싫어서... 그냥 스크린샷으로 하겠습니다.

 

처음 시작 부분입니다.

 

 

메뉴바에서 파일선택부분입니다.

 

 

만약 파일을 선택하지 않으면 필터가 잠겨있습니다.
파일여는 부분입니다.

 

아래 상태창에 경로 뜨는거 보이시죵 ㅎ... 왠지 멋잇어보여서
고역패스필터가 선택되어있네용
이거는 로우패스필터네용

 

 

이번엔 차수가 2이네요

 

 

적용을 하니 save가 열리네요

 

적용된 파일이 저장되어있네요

어후... 막상 스크린샷을 찍어서 올리긴 했는데

 

너무 난잡하고 뭘 설명하는지 모르겠네요...

 

내일 다시 한번 동영상 올리도록하겠습니다. 

 

제가 먼가 pyqt5, 필터, librosa 함수 여러가지를 공부했다는것을 뿜뿜 하고싶은데 블로그에서 막혀버리네용

 

일주일동안 열심히 만들었는데... ㅠ

 

728x90
반응형

+ Recent posts