반응형

Apple Silicon Macbook에서 Visual Studio Code와 연동하여 OpenCV C++ / Python 개발 환경을 만드는 과정을 설명합니다.



2021. 12. 04  최초작성

2022. 11. 13  최종수정

                      Python용 OpenCV만 필요한 경우 다음처럼 Python용 OpenCV 패키지를 설치하여 사용할 수 있습니다. 

                      pip install opencv-contrib-python

 

                      포스트는 C++용과 Python용을 동시에 설치하는 경우이고 환경 변화에 따라 설치 방법이 변경될 수 있습니다.




1. 다음 포스트에 나온대로 Xcode를 설치합니다.

 

Apple Silicon Macbook에 Xcode 설치하기

https://webnautes.tistory.com/2024



2. Command + Space를 누른 후, terminal을 입력후 엔터를 눌러 터미널을 실행합니다. 

3. homebrew를 설치합니다. 

% ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Next steps 메시지 다음에 나오는 다음 두 명령어를 복사하여 실행합니다.  brew 경로를 환경변수 PATH에 추가해주어 아무데서나 brew 명령어를 사용할 수 있게 해줍니다.  

% echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> /Users/webnautes/.zprofile

% eval "$(/opt/homebrew/bin/brew shellenv)"

 

저장소를 업데이트합니다.

% brew update

 

4. brew를 사용하여 opencv를 설치합니다.

% brew install opencv

 

글작성한 시점에(2021/12/3) OpenCV 4.5.3이 설치되었습니다.

 

5. OpenCV가 설치되는 과정에서 OpenCV 3.9가 설치되었지만 이미 설치된 Python 3.8.2가 있는 상태라 문제였습니다. 

현재 python3 명령으로 실행시 Python 3.8.2가 실행됩니다.

 

그래서 다음처럼 python 3.9를 사용하도록 재설정했습니다. 

 

webnautes@webnautesui-MacBookAir ~ % hash -r    

webnautes@webnautesui-MacBookAir ~ % which python3

/opt/homebrew/bin/python3



이제 python3를 실행하여 OpenCV의 Python 모듈인 cv2를 임포트해서 버전을 확인해봅니다.

 

webnautes@webnautesui-MacBookAir ~ % python3

Python 3.9.9 (main, Nov 21 2021, 03:16:13)

[Clang 13.0.0 (clang-1300.0.29.3)] on darwin

Type "help", "copyright", "credits" or "license" for more information.

>>> import cv2

>>> cv2.__version__

'4.5.3'

>>> quit()

webnautes@webnautesui-MacBookAir ~ %

 

6. OpenCV 컴파일 옵션이 사용가능한지 확인합니다. 

 

webnautes@webnautesui-MacBookAir ~ % pkg-config opencv4 --libs --cflags

-I/opt/homebrew/opt/opencv/include/opencv4 -L/opt/homebrew/opt/opencv/lib -lopencv_gapi -lopencv_stitching -lopencv_alphamat -lopencv_aruco -lopencv_barcode -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_dnn_objdetect -lopencv_dnn_superres -lopencv_dpm -lopencv_face -lopencv_freetype -lopencv_fuzzy -lopencv_hfs -lopencv_img_hash -lopencv_intensity_transform -lopencv_line_descriptor -lopencv_mcc -lopencv_quality -lopencv_rapid -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_sfm -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_superres -lopencv_optflow -lopencv_surface_matching -lopencv_tracking -lopencv_highgui -lopencv_datasets -lopencv_text -lopencv_plot -lopencv_videostab -lopencv_videoio -lopencv_viz -lopencv_wechat_qrcode -lopencv_xfeatures2d -lopencv_shape -lopencv_ml -lopencv_ximgproc -lopencv_video -lopencv_dnn -lopencv_xobjdetect -lopencv_objdetect -lopencv_calib3d -lopencv_imgcodecs -lopencv_features2d -lopencv_flann -lopencv_xphoto -lopencv_photo -lopencv_imgproc -lopencv_core

 

 5. Visual Studio Code를 설치합니다.

% brew install --cask visual-studio-code

 

6. 디렉토리를 하나 생성하여 Visual Studio Code를 실행합니다. 

webnautes@webnautesui-MacBookAir ~ % mkdir opencv_work

webnautes@webnautesui-MacBookAir ~ % cd opencv_work

webnautes@webnautesui-MacBookAir opencv_work % code .

 

7. 확장자가 py인 파일을 하나 생성하여 다음 Python 코드를 복사해줍니다.

처음 파이썬 코드파일을 Visual Studo Code에서 사용하는 거면 Python 확장을 설치할지 물어봅니다. 

설치를 완료한후 진행해야 합니다.  

 

import cv2

 

cap = cv2.VideoCapture(0)

 

if not cap.isOpened():

raise IOError("Cannot open webcam")

 

while True:

ret, frame = cap.read()

cv2.imshow('webcam', frame)

 

c = cv2.waitKey(1)

if c == 27:

     break

 

cap.release()

cv2.destroyAllWindows()



마우스 우클릭하여 메뉴에서 Run Python File in Terminal을 선택합니다.



처음 실행시에 웹캠 접근을 허용할지 물어봅니다. 



허용해준 후, 다시 실행하면 웹캠 영상이 새로운 창에 보여집니다. 

ESC 키를 누르면 창이 닫힙니다. 



8. 확장자가 cpp인 파일을 하나 생성하여 다음 C++ 코드를 붙여넣습니다. 

처음 C++ 코드파일을 Visual Studo Code에서 사용하는 거면 C++ 확장을 설치할지 물어봅니다. 

설치를 완료한후 진행해야 합니다. 

 

메뉴에서 Terminal > Configure Default Build Task를 선택합니다. 

 

메뉴에서 g++ 활성 파일 빌드를 선택합니다.

 

g++-11 활성 파일 빌드를 선택하여 진행하면 다음과 같은 에러가 발생하니 주의하세요.

 

ld: warning: dylib (/opt/homebrew/Cellar/gcc/11.2.0_3/lib/gcc/11/libstdc++.dylib) was built for newer macOS version (11.5) than being linked (11.3)

 

Undefined symbols for architecture arm64:

  "__ZN2cv6imshowERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_11_InputArrayE", referenced from:

   _main in ccbFMnHB.o

 

ld: symbol(s) not found for architecture arm64

 

 

새로 생성된 tasks.json파일에 pkg-config 로 시작하는 줄을 추가한 후, Command + S를 눌러 파일을 저장합니다. 

맨앞에 있는 콤마를 빼먹지 않도록 주의하세요.

 

    "args": [

    "-fdiagnostics-color=always",

    "-g",

    "${file}",

    "-o",

    "${fileDirname}/${fileBasenameNoExtension}"

                                    , "`pkg-config", "--libs", "--cflags", "opencv4`", "-std=c++11"

    ],

 

cpp 코드를 열어놓고 Command + Shift + B를 누르면 실행파일이 생성됩니다. 

여기에선 webcam 파일이 생성되었습니다.

 

터미널에서 생성된 실행파일을 다음처럼 실행하면 웹캠 영상이 새로운 창에 보여집니다. 

ESC키를 누르면 창이 닫힙니다.

 



반응형

문제 발생시 지나치지 마시고 댓글 남겨주시면 가능한 빨리 답장드립니다.

도움이 되셨다면 토스아이디로 후원해주세요.
https://toss.me/momo2024


제가 쓴 책도 한번 검토해보세요 ^^

+ Recent posts