반응형

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

2021. 12. 4  최초작성



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

 

MacBook에 Xcode 설치하기

https://webnautes.tistory.com/1570



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파일에서 다음 빨간색 부분을 추가한 후, 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키를 누르면 창이 닫힙니다.

 

 

반응형

해보고 확인한 것을 문서화하여 기록합니다.
최소 일주일에 한번 이상 포스트를 하려고 노력중입니다.

부족함이 있지만 도움이 되었으면 합니다.
잘못된 부분이나 개선점을 알려주시면 감사하겠습니다.



포스트 작성시에는 문제 없었지만 이후 문제가 생길 수 있습니다.
시간날때 마다 이전 포스트가 문제 있는지 확인을 해보려고 노력하고 있습니다.
질문을 남겨주면 가능한 빨리 답변드립니다.


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

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기

댓글을 달아 주세요

">