221026 Python #24

김혜진·2022년 10월 26일
0

Python

목록 보기
22/24

머신러닝(Machine Learning)


머신러닝이란

  • 어떻게 하면 결정을 잘 할 수 있을까?
  • 결정 = 비교 + 선택
  • 같은 물건 A와 B의 가격이 차이가 난다면?


https://ml-app.yah.ac/

머신러닝을 이용한 사이트
https://quickdraw.withgoogle.com/#
https://www.autodraw.com/
https://magenta.tensorflow.org/assets/sketch_rnn_demo/index.html


OpenCV



pip install opencv-python

OpenCV란

  • Opencv(Open source Computer Vision)는 실시간 컴퓨터 비전을 처리하는 목적
  • 크로스 플랫폼 라이브러리(윈도우, 리눅스, Mac에서 무료로 사용)
  • 기본적으로 C++로 작성
  • 이미지, 영상처리, Motion Detection 등 다양한 기능을 제공
  • 물체 인식, 안면 인식, 모바일 로보틱스, 제스쳐인식, 자율주행 등 응용
  • 이미지 딥러닝에 많이 활용됨

이미지 파일 읽기

  • 이미지 읽는 함수 imread()
    두번째 인자 플래그 타입
    1로 한 경우, IMREAD_COLOR로 한 경우, 생략한 경우 모두 동일
import cv2

# 이미지 읽기
img1 = cv2.imread('sea.jpg', cv2.IMREAD_COLOR)
img2 = cv2.imread('sea.jpg', cv2.IMREAD_GRAYSCALE)

# 이미지 화면에 표시
cv2.imshow('sea color', img1)
cv2.imshow('sea gray', img2)
cv2.waitKey(0)

# 이미지 윈도우 삭제
cv2.destroyAllWindows()

카메라 영상 처리

  • 카메라(웹캠)으로부터 영상을 전달 받아 처리하기 위해서는 VideoCapture 클래스를 사용.
  • VideoCapture의 전달인자를 0을 쓰면 디폴트 카메라를 사용하게 된다.
  • 두 번째 카메라는 1, 세번째 카메라는 2를 사용.
  • isOpened() 메소드는 카메라 영상 캡처 초기화 여부 리턴
  • read() 메소드를 호출하여 카메라 이미지(프레임)을 가져올 수 있다.
  • 2개의 값을 리턴, 1번째는 프레임을 성공적으로 읽었는지, 2번째는 프레임 자체 리턴
  • 프레임을 화면에 출력하기 위해서는 cv2.imshow() 함수 사용. 1번째 파라미터는 윈도우 창 제목, 2번째 파라미터는 카메라에 전달받을 프레임.
  • 카메라 사용 종료를 위해서는 release() 메소드 사용.
  • 카메라가 아닌 동영상 파일로도 읽어올 수 있다.
# 카메라 영상 처리
import cv2

cap = cv2.VideoCapture(0)  # default camera
# cap = cv2.VideoCapture('test.mp4') # 동영상 파일에서 읽기

while cap.isOpened():
    # 카메라 프레임 읽기
    success, frame = cap.read()
    if success :
        # 프레임 출력
        cv2.imshow('Camera Window', frame)
        
        # ESC 키를 누르면 종료
        key = cv2.waitKey(1)
        if(key == 27): # 27 : ESC 키의 아스키코드
            break

cap.release()
cv2.destroyAllWindows()

X 버튼을 누르면 종료가 안되고 ESC키를 눌러야 종료됨.

카메라 영상 저장

  • 카메라(웹캠)으로부터 전달받은 영상을 저장하기 위해서는 VideoWriter 클래스를 사용.
  • VideoWriter 클래스의 인스턴스 생성 시
    1번째 전달인자는 영상을 저장할 파일 지정
    2번째 전달인자는 영상 포멧 표시 id 지정(fourcc, four character code, 4바이트)
    3번째 전달인자는 프레임 수를 지정
    4번째 전달인자는 영상 크기인 프레임의 너비와 높이를 튜플로 지정.
  • fourcc는 XVID MPEG-4 코덱을 표시하는 'XVID'를 사용
  • 실제 프레임 저장은 ViedoWriter 클래스의 write() 메소드를 사용
  • 저장이 모두 끝나면 release() 메소드를 호출하여 파일을 닫는다.
# 카메라 영상 처리
import cv2

cap = cv2.VideoCapture(0)  # default camera
# cap = cv2.VideoCapture('test.mp4') # 동영상 파일에서 읽기

width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
print("size : {0} x {1}".format(width, height))

# 영상 저장을 위한 VideoWriter 인스턴스 생성
fourcc = cv2.VideoWriter_fourcc(*'XVID')
writer = cv2.VideoWriter("cam.avi", fourcc, 24, (int(width), int(height)) )

while cap.isOpened():
    # 카메라 프레임 읽기
    success, frame = cap.read()
    if success :
        # 프레임 출력
        cv2.imshow('Camera Window', frame)
        writer.write(frame) # 프레임 저장
        
        # ESC 키를 누르면 종료
        key = cv2.waitKey(1)
        if(key == 27): # 27 : ESC 키의 아스키코드
            break

cap.release()
writer.release()
cv2.destroyAllWindows()

실행했다 종료하면 자동저장 됨.

import cv2
from matplotlib import pyplot as plt

img = cv2.imread('sea.png', 1)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.imshow(img)
plt.show()


파이썬 GUI


Tkinter

  • Tkinter는 최신 Python 프로그램에 포함된 내장된 모듈
  • Tcl/Tk에 대한 파이썬 Wrapper
  • Tcl : Tool Command Language 일종의 프로그래밍 언어
  • Tk : Took kit 일종의 GUI 툴킷
  • 지원되는 위젯들이 부족하고 UI도 예쁘지는 않지만 간단한 GUI 만들 때 쉽게 사용

버튼

from cProfile import label
from tkinter import *
root = Tk()

root.title("Python GUI")
root.geometry("800x640+500+100")

photo1 = PhotoImage(file="logo.png")
# label = Label(root, text = "땅땅")
label = Label(root, image=photo1)
label.pack()

def btncmd():
    print('좋아요')

photo = PhotoImage(file="logo.png")
btn = Button(root, image=photo, command=btncmd)
btn.pack()

root.mainloop()

레이블

from cProfile import label
from tkinter import *
root = Tk()

root.title("Python GUI")
root.geometry("800x640+500+100")

label1 = Label(root, text="최선을 다하자")
label1.pack()

def change():
    # label1.config(text="시러요")
    global photo1 # lable1은 photo1이 누구인지 모르므로 global로 만들어줌
    photo1 = PhotoImage(file="sea.png")
    label1.config(image=photo1)

photo = PhotoImage(file="logo.png")
btn = Button(root, image=photo, command=change)
btn.pack()

root.mainloop()


업로드중..

버튼을 클릭하면 레이블이 이미지로 변화

profile
알고 쓰자!

0개의 댓글