1. OpenCV

이원규·2023년 1월 3일
0

1. OpenCV

openCV란 Open Source Computer Vision의 약자로, 영상 처리에 사용할 수 있는 오픈 라이브러리이다. 즉, 실시간 컴퓨터 비전을 목적으로 한 프로그래밍 라이브러리이다. 컴퓨터가 사람의 눈처럼 인식을 할 수 있게 처리해주는 역할을 하기도, 우리가 사용하는 카메라 어플에서도 OpenCV가 사용되기도 한다.
그 외 사용 예시 :

  • 공장 제품 검사
  • 의료 영상 처리 및 보정 & 판단
  • CCTV영상
  • 로보틱스
    여기에 머신 러닝과 A.I를 활용하여 그 활용도를 넓혀가는 중이다.

OpenCV가 더욱 인기있는 이유는 오픈소스이지만 BSD(Berkely Software Distribution)라이선스를 따르기 때문에, 상업적 목적으로 사용해도 좋다. 그리고 소스코드 공개 의무가 없다는 점에서 강점을 가지고 있다. OpenCV의 기원은 인텔에서부터 시작되는데, 컴퓨터 비전과 인공지능의 발달 시키고자 하는 바램으로 OpenCV를 출시한 것이다.
OpenCV는 실시간 처리에 중점을 두고 설계되서 빠른 속도와 효율성을 자랑한다. 기반 언어는 C++로 멀티 코어 프로세서를 활용할 수 있다.


1-1. OpenCV 사용 언어

OpenCV와 사용할 수 있는 언어로는 C/C++, 파이썬, Java등이 있다. 요새 많이 쓰이는 언어로는 파이썬이 많이 사용되고 있다. 빅데이터와 머신 러닝에서 강점을 보이고 있기에 파이썬이 많이 쓰인다.


1-2. OpenCV 기본 구조


1.CV: Computer Vision으로 기본 구성 요소에서는 기본 이지미 처리 & 고급 컴퓨터 비전 알고리즘을 포함하고 있다.
2.ML(Machine Learning): 머신러닝이 주를 이루므로 이를 활용할 수 있는 기본적인 통계 분류기 & 클러스터링 도구 를 포함하고 있는 라이브러리들이 있다.
3.HighGUI: OpenCV에 기본으로 포함되어 있는 GUI이다. 여기에는 비디오와 이미지 저장 그리고 이를 로드하기 위한 I/O 루틴을 포함하고 있다. 이 모듈을 활용해서 사용자의 입력을 받고 그에 따른 출력하는 기능을 하는 유저 인터페이스 기능을 하고 있다. 기본 기능으로 지원하고 있지만 조금 더 범용적으로 Qt를 사용한다.
4.CXCORE: 이곳에는 기본 데이터 구조와 여러 content가 구성되어 있다. 

** GUI: 그래픽 사용자 인터페이스(graphical user interface)는 사용자가 편리하게 사용할 수 있도록 입출력 등의 기능을 알기 쉬운 아이콘 따위의 그래픽으로 나타낸 것이다. 컴퓨터를 사용하면서, 화면 위의 물체나 틀, 색상과 같은 그래픽 요소들을 어떠한 기능과 용도를 나타내기 위해 고안된 사용자를 위한 컴퓨터 인터페이스이다.
GUI의 동작은 일반적으로 그래픽 요소의 직접 조작을 통해 수행된다. 컴퓨터를 넘어 GUI는 MP3 플레이어 등, 포터블 미디어 플레이어, 게이밍 장치, 스마트폰, 소형 가전, 사무 및 산업 제어 등 수많은 휴대용 모바일 장치에 사용된다.
GUi 예시 사진: 이 사진은 mac바탕화면인데, 이 자체가 GUI이다.

** CLI: 명령 줄 인터페이스(영어: command-line interface, CLI, 커맨드 라인 인터페이스) 또는 명령어 인터페이스는 가상 터미널 또는 터미널을 통해 사용자와 컴퓨터가 상호 작용하는 방식을 뜻한다. 즉, 작업 명령은 사용자가 컴퓨터 키보드 등을 통해 문자열의 형태로 입력하며, 컴퓨터로부터의 출력 역시 문자열의 형태로 주어진다.


1-3. OpenCV environment setting(OpenCV build)

  • 모든 구성은 terminal(CLI)에서 이루어진다. OpenCV(4.x)
  1. $ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
  2. $ brew install cmake
  3. $ brew install ffmpeg@4
  4. $ brew link ffmpeg@4
  5. $ mkdir opencv
  6. $ cd opencv
  7. $ git clone https://github.com/opencv/opencv.git
  8. $ git clone https://github.com/opencv/opencv_contrib.git
  9. $ mkdir build
  10. $ cd build
  11. $ cmake -D BUILD_OPENEXR=ON -D WITH_FFMPEG=ON -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules ../opencv
  12. $ cmake --build .
  13. $ sudo make install
  14. $ make
  • mkdir : 폴더 생성
  • cd : 폴더 들어가기
  • make : make is GNU make utility to maintain groups of programs, make는 source를 컴파일 하도록 명령하는 것이다. makefile을 참조하여 source file들을 컴파일한다. 여기서 컴파일이란 소스파일을 사용자가 실행 가능한 파일로 만들어 주는 과정을 말한다. make 과정이 끝나고 나면 설치파일(Setup 파일 같은 것)이 생성된 상태라고 볼 수 있다.
  • makefile : 어떤 프로그램을 컴파일하고 링크해야 하는지 그 방법을 설명한 파일. 이 파일이 있으면, sourcecode에서 변경 사항이 있어도 금방 수정하고 컴파일 할 수 있다. 큰 규모의 프로젝트에서 이 파일이 없다면 파일 하나하나를 컴파일 해야하는 불편함이 있다.
  • git clone 'url': 해당 git url의 repository의 파일을 복사해옴.
  • brew link : 해당 패키지와 연결
  • cmake --build : cmake tool로 build한다는 뜻
  • sudo make install : make install은 make를 통해 만들어진 설치파일(setup)을 설치를 하는 과정이다. 한마디로 build된 프로그램을 실행 할 수 있게 파일들을 알맞은 위치에다가 복사를 한다.

configure, make, make install에 대한 설명 link



2. Computer Vision

2-1. Computer Vision?

<컴퓨터는 위의 사진과 같이 숫자의 행렬로 구성된 사진 및 여러 형태를 인식한다.>

컴퓨터 비전은 인공지능(AI)의 한 분야로, 컴퓨터와 시스템을 통해 위의 행렬처럼 구성된 디지털 이미지, 비디오 및 기타 시각적 입력에서 의미 있는 정보를 추출한 다음 이러한 정보를 바탕으로 작업을 실행하고 추천할 수 있도록 한다. AI를 통해 컴퓨터가 생각할 수 있다면 컴퓨터 비전을 통해서는 컴퓨터가 보고, 관찰하고 이해할 수 있다.

컴퓨터 비전은 인간이 앞서 출발했다는 점을 제외하면 인간의 시각과 메커니즘이 거의 동일하다. 인간의 시력은 사물이 얼마나 멀리 떨어져 있는지, 사물이 움직이는지 여부, 이미지에 문제가 있는지 여부 등으로 사물을 구분하고, 이러한 구분 방법을 평생 학습한다.

컴퓨터 비전은 구분을 수행하도록 머신을 훈련하지만 망막, 시신경, 시각 피질이 아닌 카메라, 데이터 및 알고리즘을 사용하여 훨씬 더 짧은 시간에 수행해야 한다. 제품을 검사하거나 생산 자산을 관찰하도록 훈련된 시스템은 수천 개의 제품 또는 프로세스를 짧은 시간 동안 분석하여 감지할 수 없는 결함이나 문제를 찾아낼 수 있기 때문에 인간의 능력을 금방 앞지를 수 있다.

컴퓨터 비전은 에너지 및 유틸리티부터 제조, 자동차에 이르기까지 다양한 산업에서 사용되며, 시장은 계속 성장할 것으로 예상된다.


2-2. How Computer Vision Works.

컴퓨터 비전에는 많은 데이터가 필요하며, 차이를 구분하고 궁극적으로 이미지를 인식할 때까지 데이터 분석을 반복적으로 실행한다. 예를 들어 자동차 타이어를 인식하도록 컴퓨터를 훈련시키려면 특히 결함이 없는 타이어를 인식하고 차이점을 학습하기 위해 방대한 양의 타이어 이미지와 타이어 관련 데이터를 공급해야 한다.

이를 위해 두 가지 필수 기술이 사용되는데, 하나는 딥 러닝이라고 하는 일종의 머신 러닝이고 다른 하나는 컨볼루션(합성곱) 신경망(CNN)이다.

머신 러닝은 컴퓨터가 시각적 데이터의 컨텍스트에 따라 스스로 학습할 수 있도록 하는 알고리즘 모델을 사용한다. 이 모델을 통해 충분한 데이터가 공급되면 컴퓨터가 데이터를 "보고", 이미지를 서로 구별할 수 있도록 스스로 학습한다. 알고리즘을 사용하면 누군가가 이미지를 인식하도록 프로그래밍하는 대신 컴퓨터가 스스로 학습할 수 있다.

CNN은 이미지를 태그 또는 레이블이 지정된 픽셀로 분해하여 머신 러닝 또는 딥 러닝 모델이 "볼 수 있는" 형태로 만든다. 그런 다음 레이블을 사용하여 컨볼루션(세 번째 함수를 생성하는 두 함수에 대한 수학적 연산)을 수행하고 "보고 있는" 것에 대해 예측을 수행한다. 신경망은 컨볼루션을 실행하는데, 예측이 실현되기 전까지 일련의 반복을 통해 예측의 정확성을 확인한다. 그런 다음 인간과 유사한 방식으로 이미지를 인식하거나 보게 된다.

인간이 적당한 거리를 두고 이미지를 만드는 것처럼 CNN은 먼저 명확한 가장자리(hard edge)와 단순한 도형을 구분한 다음 예측을 반복하면서 정보를 채운다. CNN은 단일 이미지를 구분하는 데 사용된다. 순환 신경망(RNN)은 비디오 애플리케이션에서 이와 유사한 방식으로 사용되는데, 컴퓨터가 여러 프레임으로 구성된 그림이 서로 어떻게 관련되어 있는지 이해하는 데 도움이 된다.

[참고] :

[출처] : 컴퓨터 비전이란? - IBM

profile
github: https://github.com/WKlee0607

1개의 댓글

comment-user-thumbnail
2023년 6월 2일

잘읽었어요~

답글 달기