맥의 Xcode에서 OpenCV사용을 위한 설정 방법입니다.
정확하게 동작하는 가장 최신 정보가 없더군요. 그래서 또 하나의 스냅샷을 기록해 둡니다.
0. HomeBrew 를 설치합니다. 설치방법은 https://brew.sh/index_ko 링크를 참고하시길 ... (Install HomeBrew - https://brew.sh/)
1. OpenCV를 Brew를 이용해 설치합니다.
brew install opencv
2. pkg-config를 Brew를 이용해 설치합니다.
brew install pkg-config
3. opencv 가 설치되어 있는 경로로 이동하여 아래와 같이 명령을 수행합니다.
여기서 4.1.0_2는 설치되어 있는 opencv의 버전입니다. ls하셔서 보여지는 버전을 입력하면 됩니다.
$ cd /usr/local/Cellar/opencv $ ls 4.1.0_2 $ pkg-config --cflags --libs ./4.1.0_2/lib/pkgconfig/opencv4.pc -I/usr/local/Cellar/opencv/4.1.0_2/include/opencv4/opencv -I/usr/local/Cellar/opencv/4.1.0_2/include/opencv4 -L/usr/local/Cellar/opencv/4.1.0_2/lib -lopencv_gapi -lopencv_stitching -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_dnn_objdetect -lopencv_dpm -lopencv_face -lopencv_freetype -lopencv_fuzzy -lopencv_hfs -lopencv_img_hash -lopencv_line_descriptor -lopencv_quality -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_datasets -lopencv_text -lopencv_dnn -lopencv_plot -lopencv_videostab -lopencv_video -lopencv_xfeatures2d -lopencv_shape -lopencv_ml -lopencv_ximgproc -lopencv_xobjdetect -lopencv_objdetect -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_flann -lopencv_xphoto -lopencv_photo -lopencv_imgproc -lopencv_core
4. "-I/usr ...."처럼 출력된 내용을 복사하거나 터미널 창을 열어두고 해당 내용을 유지합니다. (Copy the outputs and Keep it)
5. Xcode 를 실행해서 Command Line Tool 프로젝트를 생성합니다. 언어는 C++ 입니다. (Launch Xcode and create 'Command Line Tool project. Set language to 'C++')
6. Build Setting 에서 "linker flag"를 검색하면 나타나는 Other Linker Flags 라는 항목이 나타납니다. 터미널 창에 표시하고 있는 "-I/usr ...."내용을 이곳에 복사해서 붙여넣습니다. (Set 'Other Linker Flags' to the outputs you kept. in 'Build Setting')
Debug : -I/usr/local/Cellar/opencv/4.1.0_2/include/opencv4/opencv -I/usr/local/Cellar/opencv/4.1.0_2/include/opencv4 -L/usr/local/Cellar/opencv/4.1.0_2/lib -lopencv_gapi -lopencv_stitching -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_dnn_objdetect -lopencv_dpm -lopencv_face -lopencv_freetype -lopencv_fuzzy -lopencv_hfs -lopencv_img_hash -lopencv_line_descriptor -lopencv_quality -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_datasets -lopencv_text -lopencv_dnn -lopencv_plot -lopencv_videostab -lopencv_video -lopencv_xfeatures2d -lopencv_shape -lopencv_ml -lopencv_ximgproc -lopencv_xobjdetect -lopencv_objdetect -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_flann -lopencv_xphoto -lopencv_photo -lopencv_imgproc -lopencv_core Release: -I/usr/local/Cellar/opencv/4.1.0_2/include/opencv4/opencv -I/usr/local/Cellar/opencv/4.1.0_2/include/opencv4 -L/usr/local/Cellar/opencv/4.1.0_2/lib -lopencv_gapi -lopencv_stitching -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_dnn_objdetect -lopencv_dpm -lopencv_face -lopencv_freetype -lopencv_fuzzy -lopencv_hfs -lopencv_img_hash -lopencv_line_descriptor -lopencv_quality -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_datasets -lopencv_text -lopencv_dnn -lopencv_plot -lopencv_videostab -lopencv_video -lopencv_xfeatures2d -lopencv_shape -lopencv_ml -lopencv_ximgproc -lopencv_xobjdetect -lopencv_objdetect -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_flann -lopencv_xphoto -lopencv_photo -lopencv_imgproc -lopencv_core
7. "header search"를 검색하면 나타나는 Header Search Paths 라는 항목을 아래와 같이 설정합니다. (Set 'Header Search Paths' to the following settings in 'Build Setting')
Debug > /usr/local/Cellar/opencv/4.1.0_2/include > /usr/local/Cellar/opencv/4.1.0_2/include/opencv4 Release > /usr/local/Cellar/opencv/4.1.0_2/include > /usr/local/Cellar/opencv/4.1.0_2/include/opencv4
8. "library search"를 검색하면 나타나는 Library Search Paths 라는 항목을 아래와 같이 설정합니다. (Set 'Library Search Paths' to the following settings in 'Build Setting')
Debug > /usr/local/Cellar/opencv/4.1.0_2/lib Release > /usr/local/Cellar/opencv/4.1.0_2/lib
9. 자, 이제 설정은 끝났습니다. 테스트를 위해 "Face Detection" 예제 코드를 실행해 보겠습니다. 아래 경로의 코드를 복사해서 "main.cpp"에 붙입니다.
(Copy and paste the code at the following URL into the 'main.cpp' file.)
https://github.com/opencv/opencv/blob/master/samples/cpp/facedetect.cpp
10. 이 예제에서 사용하는 xml 파일들의 경로를 "Edit scheme ..." > "Run" > "Arguements Passed On Launch" 에 아래와 같이 설정합니다. 건너뛰어도 무관합니다.
(You can skip this sequence)
--cascade="~/Downloads/data/haarcascades/haarcascade_frontalface_alt.xml" --nested-cascade="~/Downloads/data/haarcascades/haarcascade_eye_tree_eyeglasses.xml"
11. 빌드합니다. 빌드 후 생성되는 실행파일을 적절한 경로(이 예제에서는 Downloads)에 복사합니다. (Build the code and copy the executable to 'Downloads' folder)
12. 그리고 아래 경로에 있는 "data"폴더를 좀전의 "적절한 경로(이 예제에서는 Downloads)"에 복사합니다. (Copy and paste the folder at the following URL into 'Downloads' folder)
https://github.com/opencv/opencv/tree/master
13. 실행파일을 터미널에서 실행해 봅니다. 이상없이 실행된다면, 자신의 얼굴이 감지되는 모습을 확인할 수 있습니다. (Launch the executable file)
*.11 ~ 13번의 과정이 좀 의아할 겁니다. 걍, XCode에서 실행하면 될텐데 왜 이렇게 하는지 말입니다.
XCode에서 실행을 해 보면 아시겠지만, 그러면 아래와 같은 오류가 발생합니다.
OpenCV: not authorized to capture video (status 0), requesting... OpenCV: camera failed to properly initialize! Capture from camera #0 didn't work
즉, 권한문제가 발생합니다. 이의 해결을 위한 시원한 답을 아직 찾지 못했습니다. 그나마 찾은 방법이 터미널에서 실행파일을 실행하고 XCode에서 해당 실행파일의 프로세스를 Attach 해서 디버깅을 진행하는 것입니다. 제가 무언가를 놓치고 있는 것인지, 정말로 현재는 이 방법밖에 없는지 의문입니다. ㅠㅠ
후에, 관련해서 더 무언가를 알게되면 정리하도록 하겠습니다. 혹, 알고 계신다면 이곳에 남겨 주신다면 더욱 좋을 것 같습니다^_^