Program/OPEN_CV

[Open CV] OpenCV-Python 기초 사용법 _ 연산시간 측정 방법

사막여유 2022. 5. 4. 21:51
728x90

 

머신 비전 산업을 보면 가장 중요한게 있는데 그건 연산 시간이다.

어떤 제품의 검사나 검사결과 도출까지의 시간 및 결과들이 그 산업들의 이익과 직결되기때문에

가장 짧은 시간에 가장 정확하게 검사하고 그 결과를 도출해낼 수 있는 능력을보면

머신비전 업체의 능력을 가늠할 수 있다.

 

일단 컴퓨터 비전은 대용량 데이터를 처리하고있기때문에 매 단계에서 연산 시간을 측정하고 그 시간을

관리해줄 필요가 있다.

전체 알고리즘 중 어떤 한 알고리즘의 영상처리시간이 늦어지는 병목현상이 일어나게 된다면 전체적으로

연산처리시간이 늘어나기때문에 주의할 필요가 있다.

 

그래서 OpenCV에서는 연산시간을 측정할 수 있는 함수가 있다.

 

 - 연산시간 측정 ( cv2.TickMeter ) 

tm 은 cv2.TickMeter의 객체이고

tm.start 측정 시작 

tm.stop 측정 끝

tm.restet 측정 초기화

등의 기능을 사용할 수 있다.

 * 여기서 주의할 점은 함수 1 앞 뒤에 start stop 을 넣고

   함수 2 앞 뒤에 start stop을 넣게되면

   각각의 함수 연산 시간을 측정하는게 아닌 전체 함수의 연산시간을 측정해버리기 때문에

   중간에 꼭 reset 기능을 넣어주어야 한다.

 

그리고 

getTimeSec getTimeMilli getTimeMicro 의 함수를 사용하게 되면 측정 시간을

각각의 단위로 변환시켜 주는 기능을 사용할 수도 있다.

 

아래의 코드를 보면 더욱 잘 이해할 수 있다.

 

위 코드를 보게되면 hongkong 이라는 jpg 파일을 로드해서 Canny 라는 엣지처리를 해주는 연산 시간을 측정하게 

되었을때 약 66ms의 시간이 도출되는 것을 알 수 있다.

 

보통 카메라가 초당 30frame을 찍기때문에 전체 연산 속도가 30ms 이하로 나오는 것이 좋기는 하지만 

성능과 알고리즘 , 환경에 따라 많이 달라지기 때문에 참고만 하면 좋을 것 같다.그래서 더 빠르게 처리할 수 있는 알고리즘이 있다면 찾아보는 노력이 필요하다는 말씀을 해주셨다.

 

그리고 위 코드에서 time.time() 이라는 함수를 볼 수 있는데 이는 python에서 제공되는 함수이다.위 time 함수를 사용할 수도 있는데 시간의 차이가 크게 나지않기때문에

둘 중 하나만 사용해도 무관하다.

 

 * 좀 더 정확한 TackTime을 측정하고싶다면 for루프를 사용해서 해당 함수의 택타임의 평균을 내서

  측정하는 것이 가장 좋다고 한다. 가끔 첫 함수 연산시간보다 한번 더 실행했을때 이후의 연산시간이 

  평균적으로 더 적게 측정되는 경우도 있을수 있기에 그렇다. 물론 이도 처리할 수 있는 방법은 있다고한다.

 

 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

https://bit.ly/3L3avNW

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

728x90