소스 뷰어
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() # 자원 해제