본문 바로가기

& 프로그래밍/& openCV

openCV 프로그래밍 기초(dnn 모듈)

openCV는 미디어(사진, 영상)소스 분석에 최적화된 라이브러리로 무엇보다 실시간 이미지 프로세싱에 중점으로 개발된 라이브러리다

 

openCV 라이브러리를 이용해 이미지, 영상에 대한 컴퓨터비전 분석을 용이하게 할 수 있고, openCV 안에도 그에 맞게 다양한 모듈을 지원하고 있다

 

오늘은 openCV라이브러리 내 다양한 모듈 중 dnn(deep neural network)라는 모듈을 알아보려 한다

 

많은 블로그나 레퍼런스에서 소개하는 내용으로는 dnn 모듈은 이미 생성되어있는 네트워크에서 순방향 실행을 위한 용도로 설계되어 기존의 여러 deep-learning framework에서 학습한 모델을 그대로 불러와서 dnn 모듈을 이용해 해당 모델을 실행시키는 방식으로 사용된다는 부분이다

 

cv_enet_model = cv2.dnn.readNet('data4/enet-cityscapes/enet-model.net')
blob_img = cv2.dnn.blobFromImage(sample_img, normalize_image, resize_image_shape, 0, swapRB = True, crop=False)

위 코드처럼 dnn 모듈에 이전에 학습시켜놓은 framework를 읽어온 다음, blob함수로 이미지 차원을 분리하고 framework에 적합한 형태로 option값을 설정해준다

 

cv_enet_model.setInput(blob_img)
cv_enet_model_output = cv_enet_model.forward()

그리고 모델 신경망에 위 데이터를 입력시키고 네트워크를 실행시켜서 실제 이미지에 output을 적용하여 표현시켜준다

(중간 생략된 코드가 매우 많다)

 

이밖에도 face recognition과 같은 좋은 모델을 적용시켜서 다방면에서 활용가능한 모듈로 쓰이고 있다

 

나는 자율주행 시스템을 개발을 목적으로 공부를 하고 있기 때문에 Enet이나 lane detection과 같은 학습자료를 적절히 활용하면 나름 괜찮은 결과를 얻을 것 같다