3. Opencv python기반 실습환경 소개 및 명함인식 과정 소개
2018. 8. 7. 21:09
파이썬으로 하는 이유
- c++에 비해 간결하고, 쉬워서 배우기 싶다.
- 2016년 기준으로, python이 c++의 사용자수를 능가했음. 대신 script언어라서 느리다는 단점
- 그러나 python의 라이브러리들은 c++로 기본적으로 짜여져있고, python으로 랩핑한 것일 뿐이라서 성능상의 손해는 거의 없다
아래 사진은, 같은 기능을 c++로 구현한 것과 파이썬으로 구현한 것이다.
간결함이 비교가 안된다.
OpenCV c++이 필요한 이유는, 안드로이드 어플을 개발하려고 할 때, c++코드를 jni로 호출할 때 정도에 필요하다.
그러나, 프로토타입을 python으로 개발해놓고 --> C++로 변환하는 과정을 통해 쉽게 구현할 수 있다.
버전 비교 2.* vs 3.*
기능 추가 및 연산속도가 발전했다.
그러나 알고리즘 개선과정에서 2.4버전과 하위호환의 거의 포기했다고 하니, 2.*사용자들은 주의해야할 것이다.
구현할 코드는 2.4버전으로 할 것이다.(그러나 지금 설치는 3.2라서 3.2로 도전해보고안되면 변환)
필요한 도구 - jupyter notebook
쥬피터 노트북은 iPython에서 발전한 것으로, 웹에서 바로 파이썬을 사용하도록 하는 어플리케이션이다.
쥬피터만의 강점은 블록(cell)별로 실행이 가능하니, 빠르게 디버깅이 가능하고, 마크다운으로 바로 문서화가 가능하다는 강점이 있다.
그리고 서버를 두고 가능하기 때문에, 여러사용자가 접근할 수 있다는 장점도 있다.
아나콘다
파이썬 패키지들과 그외 라이브러리들을 한곳에 모아놓은 통합개발환경으로, 다른 라이브러리 설치도 쉽게할 수 있다.
그리고 가상환경을 생성하여, 라이브러리들의 의존성을 명확하게 할 수 있는 장점도 있다.
명함인식의 과정
- 배경색과 차이가 나는 명함을 배경에 놓고 찍는다.
- 이미지에서 색상이 급격하게 변하는 구간(배경->명함)을 엣지라고 하는데, 엣지 검출 알고리즘을 통해서 엣지를 찾아 아래 그림과 같이 흰색라인으로 보이게 만든다.
- 이전에 엣지를 검출하기 전에, 노이즈를 어떻게 처리할지 에 대한 것을 다루어야한다. - 검출한 엣지 중에서 가장 외곽의 사각형을 검출한다.
- 검출된 사각형은 꼭지점이 4개여야만 한다. 그래야 반듯한 사각형으로 변환할 수 있다.
- 그 과정에서, 어떤 사각형을 외곽이라 판단할 것인지 와 찌그러진 부분이 있다면 어떻게 할지를 다루어야한다. - 반듯한 사각형으로 변환하기
- 4개의 꼭지점 중에서 어느것이 좌상단 / 우상단인지.. 변환시 가로와 세로의 길이는 어떻게 할 것인지를 다루어야한다. - 그 다음으로, 조명의 영향을 제거한다. 마치 스캐너로 스캔한 것처럼 이미지를 흑백으로 바꾼다.
- 어떤 기준으로 밝은부분->흰색 / 어두운부분->검은색으로 할지 기준을 정해야할 것이다.
- 조명상태에 따라, 어떻게 반영할지를 생각해봐야할 것이다. - 마지막으로, 흑백사진에서 OCR을 적용해서 글자를 인색해본다.
- 글자인식을 어떻게 더 성능을 높일지 고민해봐야 할 것이다.