내맘대로 공부기록.

[ C++ ]

[ openCV | C++ ] Xcode 에서 openCV 환경 설정 하는 방법

fwanggus 2021. 2. 12. 23:53

맥의 Xcode IDE 사용자를 대상으로 하는 글인 점 참고 부탁드립니다. 그리고, 이 내용은 유투부 튜토리얼 게시자의 웹사이트 내용과 동일하며, 본인의 학습을 위해 리뷰 개념으로 작성되었음을 알려드립니다.

 

☑️ 개요

0. Homebrew 설치

1. openCV 설치

2. 프로젝트 생성

3. 다이나믹 라이브러리 불러오기

4. 헤더 패스(Header Path) 설정

5. 리소스 폴더 설정하기(이미지, 영상 소스 참조하기)

6. 카메라 액세스 설정하기

 

 


 

0.Homebrew 설치(brew 셋팅이 돼있는 분들은 넘어가세요.)

 

아래의 웹사이트로 들어가서 Homebrew를 설치해야 합니다.

https://brew.sh/

 

Homebrew

 

 

아래 내용을 terminal에 붙여놓고 실행(엔터)하며, Homebrew가 인스톨됩니다.

 

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

 

Homebrew는 terminal 환경을 제공하는 OS(UNIX 기반)에서 매우 유용한 툴입니다. 개발과정에서 필요한 오픈소스 패키지를 손쉽게 셋팅까지 해주는 툴로 유명하죠. 예를 들어 'ABC'라는 패키지를 설치해서 프로젝트에 가져오고 싶을 경우 패키지 셋팅이 필요하게 되죠. 그럴 때, 아래와 같은 간단한 커맨드로 내 컴퓨터에 설치할 수 있습니다. 

 

brew install ABC

 

이 외에도 brew에 관련한 커맨드가 많이 있기 때문에 관심 있으신 분은 공홈을 참고하시면 될 것 같습니다.

 

1. openCV 설치( 약 10분 소요 )

 

Homebrew 커맨드 셋팅이 되었으니, brew를 이용해 opencv를 설치합니다. terminal 상에서 아래를 입력 후 엔터를 칩니다.

 

brew install opencv

 

2. 프로젝트 생성( Xcode 실행 )

 

Xcode를 실행 후 아래의 사진과 같이 [Create a new Xcode project]를 클릭합니다.

 

 

Xcode 초기 실행 화면.

 

 

template 선택 창에서 다음 순서로 선택합니다.

[ 클릭 ✅  ] macOS → Command Line Tool → Next

 

 

 

 

프로젝트 이름을 [Product Name]에 입력합니다. Language를 C++로 바꾼 후 Next를 클릭합니다. 

프로젝트를 저장할 위치를 설정하고 Create를 클릭합니다.

 

 

 

 

3. 다이나믹 라이브러리 불러오기

 

프로젝트가 생성된 후 다이나믹 라이브러리를 추가하겠습니다. 아래 그림과 같이 왼쪽 상단의 프로젝트 이름을 우 클릭합니다. 풀 다운 메뉴 중 [ Add Files to "프로젝트 이름" ]을 선택합니다.

 

 

 

 

현재 프로젝트 디렉토리 윈도우가 열립니다. 여기서 openCV 다이나믹 라이브러리를 불러와야 하기 때문에, 해당 패키지가 있는 디렉토리로 이동합니다. 

 

 

 

 

내용 1번에서 brew 커맨드로  openCV 패키지를 로컬 머신으로 다운로드하였습니다. 그 패키지 위치로 이동할 겁니다. 패키지 위치를 직접 찾아서 파일을 선택하러 가도 됩니다. 하지만 절대 경로를 입력해서 한 번에 이동하는 게 더욱 효율적입니다. (비교적 절대 경로가 간단합니다.)

 

[ 단축키 ⌨️  ] "Go to Folder" 기능 사용 : Command + Shift + G

다음을 입력합니다. (brew로 패키지를 설치할 경우 기본적으로 '~Cellar/' 하위 디렉토리로 저장됩니다.  )

/usr/local/Cellar/opencv

 

 

 

Go to Folder 로 점프하기.

 

 

현재 openCV 버전을 선택 후 lib 폴더로 들어갑니다. 

아래와 같이 확장자가 dylib 인 파일을 모두 선택 후(Shift 누른 후 가장 위, 아래 파일을 차례로 선택) 추가해줍니다. 주의해야 할 점은 파일을 Kind로 정렬하여 'Dynmic Library' 또는 아래와 같이 'Unix Executable File' 유형의 파일을 선택해 줍니다.

 

 

동적 라이브러리 모두 선택

 

 

왼쪽 내비게이터에 다이나믹 라이브러리(*.dylib)가 추가되었습니다. 거의 다 왔네요.

 

 

다이나믹 라이브러리 불러오기 완료.

 

 

4. 헤더 패스(Header Path) 설정

 

이 과정은 패키지의 상대 경로를 설정함으로써 헤더 파일을 손쉽게 가져올 수 있게 됩니다.

아래 사진에서 표시한 박스에서 "Build Settings" 를 선택합니다. 그리고 그 아래 "All", "Combined" 를 선택 후 아래의 텍스트를 검색 창에 입력합니다.

 

Header Search Paths

 

 

 

 

아래 사진에서 Header Search Paths 행에 opencv4 헤더의 절대 경로를 입력(첫 번째 줄을 더블클릭 또는 아래 + 기호를 눌러 입력) 합니다. 그럼 바로 하위 디렉터리에 접근할 수 있게 되죠.

 

("4.5.1_2" 부분은 사용자가 설치한 패키지 버전에 따라 달라질 수 있습니다.)

/usr/local/Cellar/opencv/4.5.1_2/include/opencv4

 

필요에 따라서 + - 버튼을 눌러 참조 패스를 추가하거나 삭제할 수 있겠죠. 그리고, 지정한 폴더에서 계속해서 하위 폴더로 접근할 수 있도록 "recursive"로 꼭 변경해주어야 하는 점 잊지 마세요.

 

 

Header Path 설정 중

 

 

아래와 같이 설정한 경로 뒤에 별표가 두 개 달려있으면 정상적으로 처리된 겁니다.

 

 

Header Path 완료된 화면.

 

 

5. 리소스 폴더 설정하기(이미지, 영상 소스 참조하기)

 

이미지 또는 영상 소스를 로컬 머신에서 불러올 경우, 이 설명이 적용될 수 있습니다.

중앙 상단의 터미널 아이콘과 프로젝트 이름이 같이 표시된 부분을 클릭 후, Edit Scheme을 선택합니다.

 

 

 

 

아래와 같은 윈도우가 표시되면, 다음 순서대로 선택/입력해주세요.

헤더 패스와 동일하게 상대 경로 개념으로 참조되기 때문에, 설정한 경로 하위 폴더에 접근할 수 있게 됩니다. 

 

[ 클릭 ✅  ] Run → Options → Working Directory 체크 입력 → [리소스 디렉토리 풀 패스] 입력

 

 

 

 

6. 카메라 액세스 설정하기

영상 소스 또는 카메라 입력을 구현하기 위해서 cv :: VideoCapture 클래스를 이용할 수 있습니다. 아래와 같이 카메라에 접근하기 위해서는 카메라 ID 번호를 입력합니다. 머신에 카메라가 1개 이면, 0번으로 처리하면 됩니다.

 

VideoCapture variableName(파일경로 또는 카메라 ID);

 

다만, 아무 설정 없이 소스 코드를 실행 할 경우 속성 리스트(Property List) 파일이 필요하다는 메시지와 함께 컴파일이 실패합니다. 언급한 속성 리스트 파일은 플러그인으로 작동하며, 추가로 생성이 필요한 거죠.

 

 

 

 

그래서, 플러그인 개념의 파일 작성을 해보겠습니다. 다음과 같이 진행합니다.

[ 클릭 ✅  ] File → New → File → Property List 선택 → 파일 이름: "info.plist" 입력 → Create 선택

 

 

File → New → File

 

 

 

파일이름 : info.plist File → Create

 

 

속성 리스트 아이템을 설정합니다. 실행 파일이 속성 리스트 아이템을 식별할 수 있도록 ITEM(KEY) : VALUE 형식으로 데이터를 설정합니다. 다음의 텍스트를 복사 붙여 넣기 합니다.

 

Item: NSCameraUsageDescription
Value: $(PRODUCT_NAME) camera use 

 

 

ITEM:VALUE 입력 내용 확인.

 

 

마지막으로, 설정한 이 속성 파일을 실행파일이 있는 "Products" 폴더로 이동시켜 줘야 돼요.

(실행파일은 Build 하지 않으면 실행파일 자체가 없는 상태이기 때문에 폴더가 열리지 않습니다. 그렇기 때문에, 초기 생성된 기본 코드에서 Build를 꼭 진행한 후 폴더를 찾아주세요. )

 

아래 그림과 같이 main.cpp 파일(아래 그림 참고)이 있는 폴더 우클릭 → Show in Finder로 창을 하나 열어 줍니다.

그리고, opencv_project(아래 그림 참고) 실행 파일 우클릭 → Show in Finder로 또 하나의 열어 둡니다. 그다음, info.plist 파일을 실행파일이 있는 Finder로 DRAG(아래 참고) 해줍니다. 그러면, 실행파일은 속성 파일을 플러그인으로서 작동시키기 되며 카메라 액세스가 가능하게 됩니다.

 

 

info.plist 파일을 이동시킴.

 

 

설정이 완료되었으므로, 아래의 전체 코드를 붙여 넣고 테스트를 해봅시다.

 

#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>

using namespace std;
using namespace cv;

int main(){
    
    int rtnKey = 0;
    
    // Creating videoCapture Object
    VideoCapture cap(0);
    if(cap.isOpened()){
        cout << "\n Camera in ON... \n" << endl;
    } else {
        cout << "\n Something is wrong with CAMERA ACCESS ! \n" << endl;
    }
    
    Mat img;

    while(true){
        cap.read(img);
        imshow("Image", img);
        
        // 0 으로 딜레이를 설정하면 무한대로 정지상태로 표시될것임.
        // 그래서 1 밀리세크 딜레이 되지만 거의 연속적으로 보여진다.
        rtnKey = waitKey(1);
        
        // esc(27) 입력 -> 프로세스 종료.
        if(rtnKey == 27){
            return 0;
        }
    }
    return 0;
}

 

무사히 컴파일이 되고, 본인의 얼굴이 화면에 비추어지면 성공입니다. 😎

경우에 따라서는, imshow 에러가 발생할 경우도 있습니다. cv 라이브러리 패키지가 가끔가다 버벅거릴 때가 있더라고요. 저 같은 경우는 Xcode를 종료 후 프로젝트를 다시 불러오면 정상적으로 작동했습니다. 

 

이제 openCV 프로젝트 시작하면 됩니다. 화이팅.

 

🚀  비주얼 스튜디오 코드로 세팅하는 방법도 아래에서 확인할 수 있습니다.

 

[ openCV | C++ ] 비주얼 스튜디오 코드에서 openCV 환경 설정 하는 방법(맥 버전)

1. 비주얼 스튜디오 코드 설치 2. C++ 컴파일 환경 구성(일반) 🔗 tasks.json 파일 3. C++ 디버그 환경구성(일반) 🔗 launch.json 파일 4. opencv 패키지 설치 5. opencv 환경 설정 🔗 c_cpp_properties.json 파일..

fwanggu-lee.tistory.com

 

반응형