◾웹캠 사용하여 실시간 영상 출력하는 인터페이스 만들기

import cv2
import tkinter as tk
from tkinter import filedialog
from PIL import Image, ImageTk
import threading
import time

recording = False

# 웹캠 프레임을 업데이트하는 함수
def update_frame():
    ret, frame = cap.read()
    if ret:
        # OpenCV 이미지를 PIL 이미지로 변환
        img = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
        img = Image.fromarray(img)
        imgtk = ImageTk.PhotoImage(image=img)
        
        # 레이블에 이미지 업데이트
        video_label.imgtk = imgtk
        video_label.configure(image=imgtk)
    video_label.after(10, update_frame)
    
# 사진 찍기 함수
def capture_photo():
    ret, frame = cap.read()
    if ret:
        filepath = filedialog.asksaveasfilename(defaultextension=".jpg", filetypes=[("JPEG files", "*.jpg")])
        if filepath:
            cv2.imwrite(filepath, frame)
            print("사진 저장 완료:", filepath)

# 동영상 녹화 시작 함수
def start_recording():
    global recording
    if not recording:
        recording = True
        filepath = filedialog.asksaveasfilename(defaultextension=".mp4", filetypes=[("MP4 files", "*.mp4")])
        if filepath:
            fourcc = cv2.VideoWriter_fourcc(*'mp4v')
            out = cv2.VideoWriter(filepath, fourcc, 20.0, (640, 480))
            
            def record():
                while recording:
                    ret, frame = cap.read()
                    if ret:
                        out.write(frame)
                        time.sleep(0.05)
                out.release()
                print("동영상 저장 완료:", filepath)

            threading.Thread(target=record).start()

# 녹화 중지 함수
def stop_recording():
    global recording
    if recording:
        recording = False
        print("녹화 중지")
            
# tkinter 윈도우 설정
root = tk.Tk()
root.title("웹캠 화면")

# 웹캠 캡처 설정
cap = cv2.VideoCapture(0)

# 비디오 레이블 설정
video_label = tk.Label(root)
video_label.pack()

# 사진 찍기 버튼 추가
capture_button = tk.Button(root, text="사진 찍기", command=capture_photo)
capture_button.pack(side=tk.LEFT, padx=10, pady=10)

# 녹화 시작 버튼 추가
start_record_button = tk.Button(root, text="녹화 시작", command=start_recording)
start_record_button.pack(side=tk.LEFT, padx=10, pady=10)

# 녹화 중지 버튼 추가
stop_record_button = tk.Button(root, text="녹화 중지", command=stop_recording)
stop_record_button.pack(side=tk.RIGHT, padx=10, pady=10)

# 프레임 업데이트 시작
update_frame()

# tkinter 윈도우 실행
root.mainloop()

# 프로그램 종료 시 웹캠 해제
cap.release()

웹캠이 있으면 버튼 위에 화면이 뜨게 됨.

웹캠이 있으면 버튼 위에 화면이 뜨게 됨.

◾나이 예측하기

◾스트림잇에서 실시간으로 구현하기

◾야구 타격 관련하여 파일럿 만들어보기

image.png