영상처리 프로그램 작성하면서 OpenCV 라이브러리를 많이 사용함

C++에서 지원되는 라이브러리 였는데, Python에서도 잘 됨

그래서, Python 사용할 줄 아는 사람들이 이미지 관련 프로그래밍 할 때 자주 사용함

Python의 OpenCV는 사실 C++ 라이브러리가 내장된 것임.

무슨 말이냐면, Python에서 OpenCV 함수를 호출하면, 해당되는 C++ OpenCV 함수가 호출되는 것임.

Python으로 작성한 이미지 프로그램과 C++로 동일한 것을 작성한 것 중 어느 것이 빠를까 하는 질문이 생긴다면,

당연히도, C++로 작성한 것이 조금 더 빠르지 않을까 예상하게 됨.

Python에서 C++ 라이브러리를 호출하는 오버헤드를 고려하면 당연한 예상임.

그런데, 예상이 늘 맞지는 않음.

간단한 예제 프로그램으로 실험을 해 보았음.

이것은 이미지 한 장을 읽어 들인 후에, 여기에 Gaussian blurring 을 500번 반복 적용하는 것임.

Gaussian blurring은 이미지 효과 처리 방법 하나로, 이미지를 흐릿하게 (blurring) 하는 것임.

이 프로그램을 python과 C++로 작성해 보았음.


Windows 11 환경에서 Python은 Visual studio code, C++는 Visual studio 2022에서 작성하였음.

Python은 3.12 버전에 OpenCV 4.10을 pip로 설치하였음.

C++도 OpenCV 4.10 compiled version을 다운로드 받아서 설치하였음.

특히, C++는 release 모드로 컴파일 하였음.


아래는 Python으로 작성한 것임. 

import cv2
import time

# Load image
image = cv2.imread("test.jpg")

# Start timer
start = time.time()

# Apply Gaussian Blur 500 times
for _ in range(500):
    image = cv2.GaussianBlur(image, (5, 5), 0)

# End timer
end = time.time()

print(cv2.getBuildInformation())
print(f"Time elapsed: {end - start:.4f} seconds")

test.jpg 사진을 읽어들여, 반복적으로 Gaussian blurring을 500번 적용하는데 걸리는 시간을 측정하는 것임.

test.jpg 사진의 크기는 대출 1400 x 1600 정도되는 컬러 사진임.

 


아래는 동일한 일을 수행하는 C++ 프로그램임.

#include <opencv2/opencv.hpp>
#include <iostream>
#include <chrono>

using namespace std;

int main() {

    // Load image
    cv::Mat image = cv::imread("test.jpg");
    if (image.empty()) {
        std::cerr << "Image not found!" << std::endl;
        return -1;
    }

    // Start timer
    auto start = std::chrono::high_resolution_clock::now();

    // Apply Gaussian Blur 500 times
    for (int i = 0; i < 500; ++i) {
        cv::GaussianBlur(image, image, cv::Size(5, 5), 0);
    }

    // End timer
    auto end = std::chrono::high_resolution_clock::now();
    std::chrono::duration<double> elapsed = end - start;

    std::cout << "Time elapsed: " << elapsed.count() << " seconds" << std::endl;
    return 0;
}

수행시간은 Python 0.80 ~ 0.89초, C++ 1.2~1.3초 정도가 나옴. 

Python과 C++ 둘 다 같은 컴퓨터에서 여러 번 반복 실험하였음.

예상과 다르게 Python이 더 빠름.

Blurring 반복 회수를 500번에서 5,000번으로 증가시켜면, 소요되는 시간이 10배씩 증가함

그러나, Python과 C++의 격차는 줄어들지 않음.


이유를 검색해 보았음

Python이 사용하는 opencv-python 패키지가 고도로 최적화된 C++ 라이브러리일 가능성이 높다고 함.

따라서, Python에서 C++ 호출하는 오버헤드를 상쇄시키고도 남을 수 있다고 함.


OpenCV-Python을 깔보면 안 됨. 양(Python)의 탈을 쓴 호랑이(C++)가 opencv-python 임. 

반응형
LIST

충격적 현실: AI는 이미 당신보다 똑똑하다

최신 AI 모델은 현재 인류 상위 85%보다 뛰어난 지능을 보유하고 있다. 더 충격적인 사실은 2026년, 불과 내년이면 AI가 인류 상위 99.9%를 능가할 것이라는 전망이다. 엘론 머스크조차 "대체로 맞는 말"이라고 인정할 정도로, AI의 지능 수준은 우리 상상을 뛰어넘는 속도로 진화하고 있다.

기업들의 냉혹한 경고

최근 여러 글로벌 기업 CEO들이 사내 메일을 통해 직원들에게 보낸 메시지는 명확했다: "AI가 모든 일자리를 대체할 것이다." 이는 위협이 아닌 현실 예고다.

미래의 일자리 구조는 극명하게 나뉠 것이다:

  • 쉬운 일: AI가 완전히 대체
  • 어려운 일: 극소수 전문가만이 생존

이이제이(以夷制夷): 오랑캐로 오랑캐를 제압하라

고대 중국의 전략서에 나오는 '이이제이'라는 말이 있다. "오랑캐를 이용하여 오랑캐를 제압한다"는 뜻이다. AI 시대에 이 전략은 더욱 절실해졌다. 인공지능으로 인한 직업 소멸에 대응하는 유일한 방법은 인공지능을 완벽히 활용하는 것이다.

AI 사용자 3계층: 당신은 어디에 속하는가?

1유형: 포기자들

잠깐 써보고 "별로네"라며 포기한 사람들. 이들은 도태될 운명이다.

2유형: 안주자들

단순 요약이나 검색에만 AI를 사용하는 사람들. 여전히 AI의 진짜 힘을 모르고 있다.

3유형: 정복자들

모든 업무에 AI를 통합해 실질적 가치를 창출하는 사람들. 미래의 승자들이다.

1, 2유형 사람들의 공통점은 "AI 결과물이 아직 멀었다"고 생각한다는 것이다. 하지만 진실은 이것이다: AI 결과물의 질은 당신의 상상력과 스킬 수준에 달려 있다.

콘텐츠 홍수 시대의 생존법

AI로 무장한 수많은 사람들이 지식 콘텐츠를 쏟아내고 있다. 이 무한경쟁에서 살아남는 방법은 단 하나다: 신뢰받는 사람이 되는 것.

사람들은 여전히 기계가 아닌 사람과 브랜드를 신뢰한다. 당신의 시각, 경험, 그리고 존재 자체가 그 어떤 AI도 복제할 수 없는 가장 강력한 차별점이다.

1,000명 팬 이론

복잡한 비즈니스 모델은 필요 없다. 당신을 진심으로 좋아하고, 콘텐츠를 소비하며, 상품을 구매해줄 진짜 팬 1,000명만 있으면 충분히 먹고살 수 있다.

인간만의 영역: 절대 포기할 수 없는 것들

  • 창의성: 새로운 아이디어의 탄생
  • 자기표현: 독특한 개성과 관점
  • 복잡한 문제 해결: 맥락과 직관이 필요한 영역
  • 인간적 공감: 진정한 감정 교류

이것들이야말로 우리가 갈고닦아야 할 진짜 능력이다.


인사이트

"AI를 타지 못하는 자는 AI에 의해 탄다. 선택지는 두 개뿐이다: 기수가 되거나, 말이 되거나."

시대는 이미 바뀌었다. 당신은 AI라는 야생마의 등에 올라탈 것인가, 아니면 그 발굽에 짓밟힐 것인가?

 

반응형
LIST

안녕하세요! 오늘은 데이터 과학자, 개발자, 연구자 등 다양한 분들이 겪는 "다른 컴퓨터에서도 똑같은 환경을 만들어야 하는데, 너무 귀찮아!"라는 고민을 한 방에 해결할 수 있는 꿀팁을 공유해드릴게요. 바로 Conda 환경을 YAML 파일로 저장하고 복원하는 방법이에요. 😊

conda environment를 컴퓨터 간에 쉽게 복사하려면 yaml 파일을 이용하면 됩니다.

 


YAML 파일이란?

YAML 파일은 간단히 말해 환경 설정 정보를 저장하는 텍스트 파일이에요. 우리가 Conda를 사용해서 설치한 Python 버전, 라이브러리, 그리고 추가적인 패키지 정보를 모두 담고 있죠. 이걸 활용하면 한 번 설정한 환경을 다른 컴퓨터에서도 완전히 똑같이 재현할 수 있답니다.


1. YAML 파일로 환경 내보내기

이미 만든 Conda 환경이 있다고 가정해볼게요. 예를 들어, myenv라는 이름의 환경이 있다고 하면, 이 환경을 YAML 파일로 저장하는 방법은 아주 간단해요:

conda env export > environment.yaml

위 명령어를 실행하면, environment.yaml이라는 파일이 생성되는데요, 이 파일은 이렇게 생겼을 거예요:

 
name: myenv
channels: - defaults
dependencies:
- python=3.9
- numpy
- pandas
- matplotlib
- pip
- pip:
  - seaborn
  • name: 환경 이름 (myenv).
  • channels: Conda가 패키지를 찾는 채널들 (예: defaults, conda-forge).
  • dependencies: 설치된 패키지와 버전 정보.

2. YAML 파일로 환경 복원하기

이제 다른 컴퓨터에서 똑같은 환경을 만들어야 한다고 가정해볼게요. 아주 간단합니다! environment.yaml 파일만 있으면 되니까요.

다른 컴퓨터에서 이 명령어를 실행해 보세요:

conda env create -f environment.yaml

그럼, myenv라는 이름의 환경이 자동으로 생성되고, YAML 파일에 담긴 모든 패키지와 설정이 그대로 복원돼요. 마치 원래 환경을 그대로 복사해 온 것처럼 말이죠!


3. 환경 활성화

환경을 복원했으면 이제 활성화해서 사용할 차례죠:

 
conda activate myenv

그럼 끝! 이제 원래 컴퓨터에서 작업하던 것과 동일한 환경에서 바로 코드를 실행할 수 있어요. 🙌


4. 왜 YAML 파일이 유용할까요?

  • 동일한 환경 재현: 팀 프로젝트에서 다른 사람들과 동일한 환경이 필요할 때 정말 유용해요. "제 환경에서는 되는데요?"라는 말은 이제 끝!
  • 백업 및 이사 준비: 새로운 컴퓨터로 옮겨가거나 포맷 후 환경을 복구할 때 편리하죠.
  • 버전 관리: 각 패키지의 버전을 명시적으로 관리하니, 호환성 문제도 줄어듭니다.

5. 요약

  • Conda 환경을 YAML 파일로 저장: conda env export > environment.yaml
  • 다른 컴퓨터에서 환경 복원: conda env create -f environment.yaml

작업 환경을 쉽고 빠르게 재현하고 싶다면, YAML 파일 활용은 필수입니다! 이제 여러분도 환경 설정 때문에 시간을 낭비하지 말고, 이 간단한 방법으로 생산성을 높여보세요! 🚀

반응형
LIST

+ Recent posts