무효 클릭 IP 추적 중...
머신러닝,딥러닝/opencv

[opencv] jupyter notebook에서 영상 실행 방법(with ipywidgets)

꼬예 2022. 12. 19.

일반적으로 영상을 실행시킬때 opencv 자체에서 제공하는 gui window를 통해 영상을 확인합니다.

 

문제는 쥬피터 노트북 상에선 해당방법으로 영상을 실행하면 커널이 shut down 되는 현상이 발생됩니다.

 

이번 포스팅에서는   ipywidgets 라이브러리를 통해 jupyter notebook 상에서도 영상을 실행하는 방법에 대해 알아보겠습니다.

 

1) ipywidgets 설치

  !pip install ipywidgets 

 

2) 예제 코드

(1) 방법1

 

필요한 모듈 import

import cv2
from ipywidgets import Image
from IPython.display import display

 

 Image()  클래스를 객체를 생성합니다. 이 객체는 추후 video file에서 읽은 video frame을 담을 그릇이라고 보면 됩니다.

그리고 이러한 그릇들을 쥬피터 노트북상에 보이게 해주는것이   display 함수입니다.

# Open the video file using cv2.VideoCapture
cap = cv2.VideoCapture('London_Street.mp4')

# Create an Image widget to display the video frames
video = Image()
display(video)

 

 cap.read() 함수를 통해 첫번째 이미지를 읽어오는 코드를 작성합니다. 

문제 없을시  while succes 안에서 frame을 계속 읽어오게 됩니다.

# Read the first frame of the video
success, frame = cap.read()

while success:
    # Convert the frame to a format that can be displayed in the widget
    frame = cv2.imencode('.jpg', frame)[1].tobytes()

    # Update the Image widget with the current frame
    video.value = frame

    # Read the next frame
    success, frame = cap.read()

 

여기서 일반적인 방법과 다르게 frame을 byte타입으로 변환합니다. 

그리고 이 값을  video.value 에 할당하는식으로 진행됩니다.

 

output:

 

 

만약 영상 파일이 아닌 실시간 캠을 출력하고 싶다면

  cv2.VideoCapture(0) 으로 변경해주면 되겠죠?

 

하지만 단순히 영상 파일만 읽는 목적이라면   opencv 없이  ipywidgets 만 사용해도 무방합니다.

 

(2) 방법2(simple way)

from ipywidgets import Video
from IPython.display import display


video = Video.from_file('London_Street.mp4')
display(video)

 Video.from_file() 에서 파일을 읽어온 후  display 함수를 이용하면 손쉽게 쥬피터 노트북에서 영상을 확인할 수 있습니다.

 

더 자세한 내용은 공식문서를 참조 바랍니다.

  • 트위터 공유하기
  • 페이스북 공유하기
  • 카카오톡 공유하기
이 컨텐츠가 마음에 드셨다면 커피 한잔(후원) ☕

댓글