소스 뷰어
import cv2
from PIL import Image
import ipywidgets as widgets
from IPython.display import display

# 카메라 캡처를 시작합니다.
cap = cv2.VideoCapture(0)  # 0은 기본 카메라
if not cap.isOpened():
    print("카메라를 열 수 없습니다.")
    cap.release()
    raise Exception("카메라 연결 실패")

# 카메라 해상도를 가져옵니다.
frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

# 영상 표시를 위한 위젯 생성
image_widget = widgets.Image(
    format='jpeg',
    layout=widgets.Layout(height=f'{frame_height}px', width=f'{frame_width}px')
)
display(image_widget)

def update_frame():
    ret, frame = cap.read()
    if not ret:
        return False
    # OpenCV 프레임을 JPEG로 변환
    _, buffer = cv2.imencode('.jpg', frame)
    image_widget.value = buffer.tobytes()  # 위젯 이미지 업데이트
    return True

try:
    print("카메라 스트리밍을 시작합니다. 중지하려면 '정지' 버튼을 누르세요.")
    while True:
        if not update_frame():
            print("카메라에서 프레임을 읽을 수 없습니다.")
            break
except KeyboardInterrupt:
    print("카메라 스트리밍이 중지되었습니다.")
finally:
    cap.release()  # 자원 해제
Image(value=b'', format='jpeg', layout="Layout(height='480px', width='640px')")
카메라 스트리밍을 시작합니다. 중지하려면 '정지' 버튼을 누르세요.
카메라 스트리밍이 중지되었습니다.