자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다. 
  • 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)

Delphi Delphi OpenCV 에 관하여...

2019.04.11 19:27

아크나톤 조회 수:1640

본 게시판은 개발자들이 자유롭게 질문과 답변을 공유하는 게시판입니다.
* 따라서 최대한 정중하게 질문을 올려 주세요.
* 질문을 상세히 작성해 주실 수록 좋은 답변이 올라 옵니다.
* 다른 분들도 참고할 수 있도록 결과 댓글 필수(또는 감사 댓글)
(결과 댓글을 달지 않는 경우 다음 질문에 대한 답변이 달리지 않는 불이익이 있을 수 있습니다.)
-----------------------------------------------------------------------------------------------

- width=2560 정도의 H.264엔코딩된 영상을 RTSP로 Open

- 카메라 15대의 영상을 하나의 모니터에 디스플레이

- 위와 같은 모니터가 약 10대 (즉, 하나의 시스템에서 rtsp영상을 최대 150개를 재생하는 셈)

 

한번 해보려고 합니다.

 

라이브러리는 Laex Delphi OpenCV 를 사용하는게 일단 가장 빠른거 같아 시도해 봄.

 

 

- Multi-Device Application 으로

- 그냥 OpenCV로 영상을 Capture하면 영상이 클 경우 다 깨져서 들어오니 TocvFFMpegIPCamSource로

  rtsp영상을 불러옴.

- 코덱도 잘 찾아 영상을 TImage 또는 TocvViewFMX에 어떤 필터링도 없이 TocvFFMPegIPCamSource의 IocvImage 원영상을 뿌려줌.

 

[테스트 해본 결과]

1. 다채널 영상 뷰어로 부적합.

   Intel(R) Core(TM) i5-7500 4Core, Ram 8Gb에서 위 조건의 영상 1개를 여는데 CPU 점유율은 10~14%.

   소스 수정해서 TocvFFMpegIPCamSource의 스레드 죽여도 봄(재생 속도 향상있음).

   Application.OnIdle 하에서 9채널정도는 부드럽게 돌아감(CPU점유율의 여유가 있으니까)

   TocvFFMpegIPCamSource.OnImage를 사용해보기도 함(Application.OnIdle때보다 영상재생 부드럽지 못함).

2. FMX에서 개발할 경우이므로 어떤 코딩 없이 GPU가속은 하는것으로 보이는데 Windows Apllication에서 테스트할때와

   퍼포먼스에 차이가 없음.

   작업관리자에서만 확인한 바 Windows Application에서는 GPU가 0%로 멍때리고 있던 것이 FMX에서는 35%~45%까지

   매우 열심히 뭔가를 하고 있다고 나오는데 왜 CPU 점유율은 영상 9개만 띄우면 점유율 100%에 육박하는지 지식이 짧아

   현상만 파악함.

3. 동일한 영상을 PasLibVLCPlayer에서 돌리면 CPU점유율 각각 1~2% 수준이라 깜놀.(곰플레이어는 6~8% 수준)

4-1. 해당 라이브러리 개발자 Leax에게 질의한 결과.

   TocvFFMpegIPCamSource는 다채널 뷰어로 적합하지 않다! 그리고 델파이 스레드는 그닥 훌륭하지 않다 bla bla bla...로 결론.

4-2. Mitov Software 역시 마찬가지...

      VideoLab 컴포넌트 겁나 많고 가지고 놀게 많다.

      RTSP 영상 9개 화면에 띄우는데 코딩 제로. 3분이면 끝나니 대단하죠.

      RTSP영상을 로딩하는 컴포넌트는 TVLIPCamera외 선택의 여지가 없으므로 테스트해본 결과 역시 문제는 CPU점유율.

      6개만 열어도 CPU점유율은 꽉 차버립니다 ㅠ.ㅠ

      하지만.... OpenCV 날코딩 안해도 되는 이점은 분명히 고무적이고 놀라운 일이긴 하나.

      그래픽 카드 갯수와 gpu가속 지정까지 가능하지만 Win32에서만 일부잘 쓰지 않는 컴퍼넌트에서만 국한된 점.

      Mitov씨가 귀찮을 정도로 질문을 해본 결과, 현재 FMX에서 Win VCL Application에서 지원하는 컴퍼넌트 포함할 계획이고 FMX에서는 굳이 GPU가속은 별도로 신경 안써도 되는 부분이라 생각한다고 하심.

(위의 두 라이브러리는 감히 폄하는거 아닙니다;; 대단하지요.  제가 목표치가 높은 데모를 계획하고 있다보니 그점에 핵심을 맞춘것이라...)

5. 오기가 생겨 TocvFFMpeg소스에서 스레드도 죽여보고 ffMpeg 헤더파일 libavcodec에서 Av_Find_Codec2도 내맘대로 코덱을 지정해서 테스트해봤는데 지식이 짧아 포기.

하나의 시스템에서 rtsp영상 150개를 재생하는데 끊김이 없어야하면서 이 것을 만족하려면 PasLibVlcPlayer가 답인가...

그렇다면 영상 ROI는 어떻게든 VLC 라이브러리에서 한다 치더라도 영상 ROI한 4개의 영상(이미지)을 것을 하나의 영상으로 Merge한다거나 OpenCV에서 할 수 있는 장난질을 전혀 못하게 된다는 뜻인데....

가능성 여부만 타진하기 위해 데모 프로젝트 하나 만드는데 이런 델파이 라이브러리는 정말 대단한 것 같습니다.

지식이 짧아 아직 다른 델파이 FFMpeg 라이브러리로 영상 출력을 VLC 수준의 디코딩도 못해봤고 GPU 디코딩 테스트도 못해봤지만 요즘 영상관련 프로젝트 개발자들도 아주 편하게 안되면 VLC 라이브러리! 라고 조언을 하는지라;;

VLC에서 RTSP 영상을 열었을때 CPU 점유율 0.5%라는 숫자만 쳐다보면서 침만 꿀꺽 삼키고 있습니다;;

그냥 간단히 VLC는 0.5%이고 곰플레이어는 6%이고 델파이에서 FFMpeg 라이브러리를 사용하면 10%가 넘을까요?라고 질문하면 되는데 너무 성의 없을거 같아 경험담을 적다 보니 길어졌네요.

vlc는 사람이 만든거 맞나 하는 재미난 생각도 한번 해봤습니다^^