개요
ML, DL 그리고 CV 분야 연구를 진행할 때 많은 사람들이 파이썬 언어를 사용합니다.
이는 파이썬이 비교적 쉬운 언어이고 Numpy, Pandas 등 연구에 활용 가능한 다양한 라이브러리와 관련 문서 그리고 선행 사례들이 존재하기 때문에 쉽고 빠른 연구 진행과 프로토타이핑이 가능하기 때문입니다.
하지만 연구를 통해 성공적인 성과를 낸 뒤 서비스를 만들고 배포할 때 파이썬 코드를 그대로 사용하는 경우는 잘 없습니다.
스크립트 언어인 파이썬의 느린 속도가 엔드포인트에선 더 부각되고 동적 타입 기반 언어의 고질적 문제(에러)등으로 배포시에는 대부분 파이썬 대신 C++ 과 같은 컴파일 언어로 변환해서 나가게 됩니다.
(참고: Python vs CPP, https://www.softwaretestinghelp.com/python-vs-cpp/)
변환 작업은 쉽지 않지만 앞서 말했듯 빠른 연구 진행과 프로토타이핑이 가능하고 방대한 라이브러리와 자료를 활용할 수 있다는 큰 장점덕에 많은 서비스들이 연구 환경에선 파이썬을, 프로덕션엔 C++ 등 서비스에 적합한 컴파일 언어를 사용합니다.
서론이 길었습니다만.. 저는 파이썬으로 연구를 진행하는 연구원이고 파이썬 기반의 연구 결과를 변환해서 프로덕션 레벨에 올려주는 팀은 따로 있지만 다들 바쁜 와중에 제가 진행한 연구를 테스트해보기 위해 매번 변환해달라고 할 수 없기 때문에 이를 직접 해보고자 파이썬 -> C++ 변환에 앞서 C++과 CV를 활용한 개발 환경 세팅을 진행하게 되어 이를 글로 남기게 되었습니다.
환경
MacOS
XCode Version 15.0 beta 2 (15A5161b)
CV Version 4.7.0 (23.06.31 최신 버전)
opencv 설치
Terminal > brew install opencv
XCode 프로젝트 생성
XCode 설치는 앱스토어에서 쉽게 가능하기 때문에 생략합니다.
프로젝트 - opencv 라이브러리 연결
pkg-config 설치: Terminal > brew install pkg-config
pkg-config 사용해 플래그 추출: pkg-config --cflags --libs opencv4
XCode > 프로젝트 > Build Settings > Search Paths
Header Search Paths에 -I 플래그 path 추가 (예시 : /opt/homebrew/opt/opencv/include/opencv4)
XCode > 프로젝트 > Build Settings > Linking - General
Other Linker Flags에 전체 플래그 추가
Target > Signing & Capabilities > Hardened Runtime > Disable Livrary Validation 체크
이것으로 기본 세팅은 완료입니다.
테스트
라이브러리 로드가 잘 되었는지 확인할 수 있도록 간단한 테스트 2가지를 함께 올립니다.
테스트 1. CV 버전 확인
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main(int argc, const char * argv[]) {
cout << "Opencv Version: " << CV_VERSION << endl;
return 0;
}
CV 라이브러리가 정상적으로 로드되었다면 버전이 출력됩니다.
테스트 2. imread & imshow
- 이미지 파일 넣기 : main.cpp 파일이 있는 디렉토리에 이미지 넣어주기
- 미디어 디렉토리 연결 Xcode > Product > Scheme > Edit Scheme > Run > Options > Working Directory
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
void showImg(cv::Mat& img,const std::string& name);
int main(int argc, const char * argv[]) {
Mat input_img;
input_img = imread("sample.jpeg");
if(input_img.empty()) {
fprintf(stderr,"Could not Open image\n\n");
return -1;
}
showImg(input_img,"Input Image");
waitKey();
return 0;
}
void showImg(cv::Mat& img,const std::string& name){
namedWindow(name.c_str());
imshow(name.c_str(),img);
}
여담
개발 환경 세팅과 간단한 테스트 코드 돌리는것 만으로 제가 쉬운 파이썬 덕을 얼마나 보고있는지 깨달았습니다.
갈길이 삼만리..
'OS' 카테고리의 다른 글
공개키 등록을 통해 SSH 접속 시 패스워드 입력 생략 (0) | 2023.07.21 |
---|---|
Linux resource monitoring (1) | 2023.04.20 |