GGRS: Geoscience, GIS, & Remote Sensing

지구과학, GIS, 그리고 원격탐사 블로그입니다.

Windows에서 Python, Jupyter Notebook, OpenCV 설치하기

댓글 0

IT

2021. 3. 29.

안녕하세요? 이번 글은 Windows에서 Python(프로그래밍 언어), Jupyter Notebook(개발도구), OpenCV(라이브러리)를 설치하는 과정을 정리해 보겠습니다. 스터디를 위해, 제 블로그에 개별로 존재하던 내용을 하나의 글로 정리해 봤습니다.

 

먼저, Python을 설치해 보겠습니다. 공식 홈페이지에 접속합니다.

 

Welcome to Python.org

The official home of the Python Programming Language

www.python.org

공식 홈페이지 창은 아래와 같습니다.

상단 메뉴에서 'Downloads > Python 3.9.2'를 클릭합니다.

설치 창은 아래와 같습니다.

'Add Python 3.9 to PATH'를 체크하고,

'Install Now' 버튼 클릭하여 설치를 진행합니다.

설치가 완료되었습니다.

파이썬이 설치되었는지 확인하려면, 검색 상자에서 'cmd'를 입력해서 '명령 프롬프트' 창을 실행합니다.
'python'이라고 입력하면, 아래와 같이 파이썬 인터프리터가 실행될 것입니다.

파이썬 인터프리터 종료는 'Ctrl+Z' 버튼을 누르시면 됩니다.

 

이제 파이썬은 설치가 되었고, 개발도구인 Jupyter Notebook을 설치해 보겠습니다.

이 시점에서 pip이라는 프로그램에 관해 알 필요가 있습니다.

 

pip은 파이썬용패키지를 설치해 주는 프로그램(Package Installer for Python)입니다.

pip을 최신 버전으로 업그레이드하는 구문은 다음과 같습니다.

pip을 통해 설치 가능한 패키지는 'PyPI'라는 저장소로부터 호출됩니다.

PyPI는 파이썬 프로그래밍언어용 소프트웨어 저장소(repository)입니다.

 

PyPI · The Python Package Index

The Python Package Index (PyPI) is a repository of software for the Python programming language.

pypi.org

즉, 우리는 PyPI에 등록된 특정 패키지를 pip을 통해 호출하여 내 컴퓨터에 설치할 수 있습니다.

이번에 설치할 '주피터 노트북(Jupyter Notebook)'은 웹브라우저에서 파이썬 프로그래밍이 가능한 애플리케이션입니다.

 

Project Jupyter

The Jupyter Notebook is a web-based interactive computing platform. The notebook combines live code, equations, narrative text, visualizations, interactive dashboards and other media.

jupyter.org

설치방법과 실행은 아래 글을 참고하시면 됩니다.

우리는 pip을 사용하므로, 'pip install notebook'을 입력하여 설치를 진행합니다.

'jupyter notebook' 명령어를 통해 Jupyter Notebook을 실행합니다.

웹브라우저가 자동 실행되며, 주소는 http://localhost:8888/tree로 호출됩니다. 실행화면은 아래와 같습니다.

자, 이번엔 OpenCV를 설치해볼까요?!

 

OpenCV(Open Source Computer Vision Library)는 오픈소스 컴퓨터 비전 및 머신러닝 소프트웨어 라이브러리입니다.

C++, Python, Java 및 MATLAB 인터페이스가 있으며 Windows, Linux, Android 및 MacOS를 지원합니다.

 

Windows 운영체제에서 Python용 OpenCV를 설치하는 과정은 아래 공식 홈페이지를 참조하시면 됩니다.

Install OpenCV-Python in Windows

https://docs.opencv.org/master/d5/de5/tutorial_py_setup_in_windows.html

 

OpenCV: Install OpenCV-Python in Windows

Goals In this tutorial We will learn to setup OpenCV-Python in your Windows system. Below steps are tested in a Windows 7-64 bit machine with Visual Studio 2010 and Visual Studio 2012. The screenshots shows VS2012. Installing OpenCV from prebuilt binaries

docs.opencv.org

 

위 내용은 공식적인 설치 안내입니다. 일단 Python을 설치하고, Python용 OpenCV가 사용하는 NumPy도 pip을 통해 추가 설치합니다. 그리고 OpenCV의 사전 빌드된 바이너리 파일을 site-packages 폴더에 복사하는 과정으로 안내되고 있습니다. 이러한 절차가 어렵지는 않으면서도, 이 과정을 간소화할 수 있으면 좋겠다는 생각도 듭니다.

 

이번 글에서 소개하는 내용은, pip으로 OpenCV를 설치하는 비공식(Unofficial) 패키지입니다.

 

opencv-python

Wrapper package for OpenCV python bindings.

pypi.org

사용방법은 간단합니다.

pip install opencv-python # 주요 모듈 설치
pip install opencv-contrib-python # 주요 및 추가 모듈 설치

 

주요 모듈(main modules)과 추가 모듈(extra modules) 항목은 공식 홈페이지를 참조하시면 됩니다.

 

OpenCV: OpenCV modules

OpenCV  4.3.0-dev Open Source Computer Vision

docs.opencv.org

이제 명령어 한 줄로 OpenCV를 내 데스크탑 환경에 셋팅할 수 있습니다. 이 패키지의 공식 깃허브는 다음과 같습니다.

 

skvark/opencv-python

Automated CI toolchain to produce precompiled opencv-python, opencv-python-headless, opencv-contrib-python and opencv-contrib-python-headless packages. - skvark/opencv-python

github.com

패키지 개발자는 핀란드 탐페레의 '올리 페카 헤이니수오(Olli-Pekka Heinisuo)' 님입니다.

개발자님의 활동이 궁금하신 분은 개인 블로그를 방문해보시기 바랍니다.

 

Relativity

Thoughts and other stuff related to coding and DIY.

relativity.fi

Python, Jupyter Notebook, OpenCV 설치를 마쳤는데요, 이들을 통해 동영상을 재생하는 간단한 실습을 해보겠습니다.

실습 동영상 다운로드: drive.google.com/drive/folders/1GlIdGxEbc6zESfJ45QuB_gkc9y7P-NuJ?usp=sharing

*여기서는 실습 동영상 중 otter.avi를 재생해 봅니다.

 

Jupyter Notebook을 실행한 후, 아래와 같이 'New > Python 3'를 클릭해 줍니다.

이제 코드를 작성해 보겠습니다!

일단, 필요한 모듈을 호출합니다.

# 모듈 호출
import numpy as np
import cv2 as cv
import os

코드를 작성한 후 해당 셀에서 'Shift-Enter' 키를 입력하면, 해당 셀을 실행 후 아래 셀을 선택해 줍니다.

동영상 파일을 불러오기 전에, 현재 작업 디렉토리를 확인합니다.

os.getcwd() # 현재 작업 디렉토리 확인

현재 작업 디렉토리를 동영상 파일 위치로 변경합니다.

os.chdir('D:/GEODATA') # 현재 작업 디렉토리 변경
os.getcwd()

동영상 파일을 지정하여 아래와 같이 VideoCapture 객체를 정의합니다.

# VideoCapture 객체 정의
cap = cv.VideoCapture('otter.avi')

동영상의 프레임 너비와 높이, 그리고 초당 프레임(FPS: Frames Per Second)를 확인합니다.

이때 프레임 너비/높이의 단위는 화소(pixel), 초당 프레임 수의 단위는 밀리초(millisecond)입니다.

# 프레임 너비/높이, 초당 프레임 수 확인
width = cap.get(cv.CAP_PROP_FRAME_WIDTH) # 또는 cap.get(3)
height = cap.get(cv.CAP_PROP_FRAME_HEIGHT) # 또는 cap.get(4)
fps = cap.get(cv.CAP_PROP_FPS) # 또는 cap.get(5)
print('프레임 너비: %d, 프레임 높이: %d, 초당 프레임 수: %d' %(width, height, fps))

동영상 파일은 연속적인 프레임으로 구성된 정보를 제공되며, 우리는 OpenCV를 통해 각각의 프레임에 컴퓨터비전 및 머신러닝 알고리즘을 적용해볼 수 있습니다. 그러기 위해서는 동영상을 구성하는 각각의 프레임에 접근, 제어할 수 있어야 합니다. 아래 코드는 그 기본 골격을 구성합니다.

while cap.isOpened(): # cap 정상동작 확인
    ret, frame = cap.read()
    # 프레임이 올바르게 읽히면 ret은 True
    if not ret:
        print("프레임을 수신할 수 없습니다(스트림 끝?). 종료 중 ...")
        break
    frame = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
    cv.imshow('Otter', frame)
    if cv.waitKey(42) == ord('q'):
        break
# 작업 완료 후 해제
cap.release()
cv.destroyAllWindows()

앞서 정의한 cap 객체는 잘못된 경로/이름이 지정되더라도 오류가 발생되지 않습니다. 따라서, 현재 정의된 cap 객체가 정상동작하는지 확인이 필요한데 반복문의 조건에 명시된 cap.isOpened()가 그러한 역할을 수행합니다. 만약 otter.avi가 존재하지 않는다면 반복문은 실행되지 않을 것입니다.

 

cap.read() 함수가 반환하는 frame을 통해 동영상을 구성하는 프레임을 하나하나 접근해볼 수 있습니다. ret은 프레임이 올바르게 읽히면 True를 반환합니다. cap.isOpened()를 통해 정상동작은 이미 확인되었으므로 ret은 True로 시작할 것입니다. ret이 False를 반환하는 경우는 프레임을 수신할 수 없는 상태이므로 이 불린(boolean) 변수를 통해 동영상의 끝 지점을 식별할 수 있습니다.

 

cv.cvtColor()는 색 공간(color space)을 변환하는 함수입니다. 여기서는 RGB 이미지를 회색(gray)으로 변환하는 옵션이 적용되었습니다.

 

cv.waitKey() 함수는 프레임을 표출하는 시간을 정의합니다. 이때 단위는 밀리초, 즉 천분의 1초가 됩니다. 현재 otter.avi의 FPS는 24입니다. 초당 24 프레임으로 구성되어 있으니 1000밀리초 당 24 프레임, 역산하면 프레임 당 약 42 밀리초를 표출하고 있습니다. 이때 if 문은 프레임 당 42 밀리초를 표출하되, 'q'가 입력되었을 때는 프레임 표출이 종료되도록 설정하고 있습니다.

 

'q'가 입력되지 않으면 while 문은 동영상의 모든 프레임을 42 밀리초로 표출하고 ret이 False가 되는 시점에서 print()에 명시된 메시지를 반환하고 종료될 것입니다. 그 이후에는 사용한 cap 객체를 해제하고, 모든 창을 닫는 코드로 구성되어 있습니다.

 

커널을 재시작하고 노트북을 재실행하고자 한다면 화면 상단 메뉴 중 'Kernel > Restart & Run All'을 선택하시면 됩니다.