들어가면서🤔
opencv를 공부하던 차에 회사에서 이미지 데이터를 이용한 데이터 처리 프로그램에 대한 의뢰가 들어왔다. 그래서 어떤 내용인가 상세 내용을 들어보니, 못할 건 없는 것 같았다. 왜냐하면, 머신러닝의 개입이 없는 단순한 이미지 처리 로직으로 해결할 수 있는 부분이었기 때문이다.
다만, 일반 유저가 사용해야 하는 부분이 있기 때문에 GUI에 대한 부분을 구성해야 했다. 시중에 나와있는 블로그라던지 튜토리얼은 거의 다 콘솔 형태에서 이미지를 핸들링하는 부분이 많았고, 이미지 처리에 대한 지식이 없는 일반 유저를 위한 애플리케이션 개발에 대한 정보는 사실 자료가 많지 않았다.
조사해 본 결과, opencv라이브러리를 사용할 수 있는 언어는 역시 C++, Python 이 메인이고, C#도 사용할 수 있었다. 다행히도 C#은 닷넷 계열 언어로 윈도우 폼을 사용할 수 있는 장점이 있었고, OpenCvSharp라는 전용 라이브러리도 있다는 사실을 알게 되었다.
GitHub - shimat/opencvsharp: OpenCV wrapper for .NET
OpenCV wrapper for .NET. Contribute to shimat/opencvsharp development by creating an account on GitHub.
github.com
조금 더 다양한 언어로 개발이 가능한 emguCV라는 플랫폼도 있긴 하다. 하지만 조금 쓰기 어려운 것 같아서 걸렀다. 기회가 된다면, C++을 이용해서 어떻게 개발할 수 있는지 깊게 들여다 보는 것도 좋을 것 같았다.(먼 나중의 일이 되겠지.)
emgucv - Overview
Emgu Corporation is an AI / computer vision technology company focused on providing industry leading software to solve real world problems. - emgucv
github.com
간단하면서 빠르게 프로그램을 작성하는 게 필요하다면 C#을 이용해도 충분하다는 결론에 도달했다. 그리고 뜬금 없지만 위에서 언급한 두 플랫폼의 트렌트가 어떤지 구글 트렌드 검색으로 비교를 해봤다.
검색 기간 : 2020.1.1~2022.4.30
전 세계를 스코프로 해도, 두 플랫폼 모두 검색량이 크게 많지는 않았다. 다만, 평균값으로라도 OPENCVSHARP가 소폭 높았기 때문에 잘 선택한 건가 싶은 생각이 든다.
지역별 비교 분석 결과🌏📊
왠지 본인이 검색한 양이 일본 통계에 반영된 게 아닌가 하는 의구심이 든다.(일본 오사카에 있습니다.) 꽤 많이 찾아본 건 사실이기 때문에 어떨까 합니다. 아무튼 우리나라도 두 번째도 검색량이 많고 그다음이 미국이다.
왜 이렇게 생각보다 검색량이 작은가 싶어서 OPENCV라는 단어로 트렌드를 확인해보니, 역시 메인은 opencv 이다.
심심풀이로 트렌드를 확인해봤다. OPENCV로 프로그램을 만들거나, 실제 애플리에케이션에 어떻게 적용하는지 더 많이 찾아보고, 고민 해봐야 할 것 같다.
개발환경⚙️👨💻
- OS : 윈도우 11
- IDE : 비주얼 스튜디오 2023
- 언어 : C#
이미지 처리 순서 및 주요 기능🛠️🖼️
[ 이미지 처리 순서 ]
- 이미지 로드
- 작업 영역 이미지 잘라내기
- 노이즈 영역 마스킹 하기
- Canny Edge 계산(가우시안 블러가 선행됨)
- 검출 픽셀 위치 데이터 저장하기
[ 주요 기능 ]
1) 마우스 이벤트 기능🖱️
- 유저 마우스 입력을 활용하여 이미지를 편집한다.(콜백함수 사용 방법은 여기)
- 잘라내기 기능 : 좌측 상단, 우측 하단 꼭짓점을 선택하여 작업 영역을 잘라냄(2 Points)
- 노이즈 마스킹 기능 : 시계방향 또는 반시계 방향으로 점을 선택하여 다각형의 마스킹 영역을 지정한다.(4 Points)
- 공통 규칙 : 선택한 영역을 확정 및 처리하기 위해서 마우스 중간 버튼을 클릭(선택된 요소의 색깔이 변경됨) 후 스페이스바를 누른다.(프로세스 진행 유무 결정을 위한 메시지 박스 팝업 됨.)
2) 캐니 에지 계산 기능🧮
- 캐니 에지 계산에 필요한 파라미터를 유저가 설정 가능
- 별도 윈도우 폼을 이용해서 각 파라미터를 갱신 가능
- 변경 가능한 파라미터 :
- Gaussian Blur 의 커널 사이즈 k (행, 열 사이즈를 동일하게 세팅함)
- 캐니 에지의 Low, High threshold Value
윈도우 폼의 구성(엔트리, 메인)📃
- entry 폼
- caseA 폼(메인 폼)
- 파라미터 설정 폼
코드의 상세 내용(Github) ⚙️
다음에 해보고 싶은 것🚀
막연히 이미지 처리 및 컴퓨터 비전을 공부하면서, 콘솔 애플리케이션으로 작동하는 것은 알겠는데 실제 유저가 사용하는 애플리케이션으로써 어떻게 적용할지 막연한 부분이 많았습니다.
이번에 데스크톱 애플리케이션을 작게나마 개발해보면서, 큰 그림의 작동원리는 파악이 되었습니다. 이 경험을 최대한 활용해서 이제는 웹 기반의 애플리케이션을 작성하는 방향으로 개발 방향을 잡아보면, 다양한 유저의 사용으로도 연결될 수 있고, 실질적으로도 활용성이 높아진다고 생각되네요. (웹앱이든 앱이든...)
어쨌든 정리하면, 웹에서 작동하는 컴퓨터 비전 애플리케이션을 개발하는 것이 한 가지 목표이고, 두 번째로는 컴퓨터 비전의 스코프 중에서도 단순한 이미지 처리가 아닌, 머신러닝을 이용한 알고리즘을 활용해보자! 가 될 것 같습니다. 그중에서도 먼저 YOLO(Object Detection and Classification), Unet(Semantic Segmentaion)과 같이 이미 많이 알려진 알고리즘을 어떻게 애플리케이션으로 Integrated 할 수 있을지 고민해 보면 좋을 것 같습니다. 파이팅입니다.