IT정보공유/C#

C# EmguCV 최신버전 v4.1.1.3497 멀티쓰레딩 버그 있는것 같네요.

알지오™ 2019. 10. 11.

IP카메라 영상을 화면에 표출하기 위해 크로스플랫폼 라이브러리인 Emgu CV를 사용해 보고 있습니다.
다행이 일전에 일본인 개발자가 만들었다는 OpenCVSharp을 다뤄봐서 
비교적 쉽게 EmguCV도 사용할 수 있었습니다.

OpenCVSharp을 이용해서 RTSP stream을 받는 부분에는 문제가 없었습니다만, 
IP Camera를 여러개 붙일려고 하니까 문제가 생겼습니다.
지금 현재 테스트 하는게 VMS 나 CMS 같이 여러개의 CCTV를 볼수 있는 프로그램을 만들고 있거든요.

이런 프로그램이요.


어떤 문제냐면 카메라가 여러대이기 때문에 쓰레드로 여러대의 카메라의 영상을 가져오게 만들었는데
카메라가 하나 접속되고, 그 후에 다시 또 하나 접속되고 순차적으로 연결되는 문제가 발생했습니다.
한참을 이것저것 테스트 해보고 소스도 바꿔보고 아무리 해도 안되서 Emgu CV로 라이브러리를 변경했습니다.

NuGet에서 EMGU.CV v4.1.1.3497 버전을 설치하고 코딩을 했는데
이런.. 똑같은 증상이 나타나네요. 카메라 접속 함수인 VideoCapture()를 쓰레드로 빼도 안되고
영상 받아오는 부분을 DLL로 만들어도 순차적으로 밖엔 접속이 안되는겁니다.

도대체 무엇이 문제일까 거의 하루 종일 고민하고 인터넷을 뒤져보다가 버전을 낮췄습니다.
EmguCV v3.1.0.1 버전으로 다운그레이드 하고 이래저래 다시 환경 설정하고 
변경된 함수면 VideoCapture()는 다시 Capture()로 바꾸고 오류나는 부분 전체 수정하고 다시 컴파일하고
실행을 했더니 정상적으로 동작했습니다.

IP카메라 1번부터 12번까지 순차적으로 연결되지 않고
제가 의도한 대로 먼저 연결되는 카메라부터 다다다다다~ 하고 정상적인 연결이 되었네요.

오늘 하루종일 EmguCV Version 문제로 고생한거 생각하면 너무 힘들었네요.
근데 왜 이 문제에 대해서 아직 논의되고 있는게 없는지 모르겠네요.

많은 사람들이 쓰는 오픈소스인데 불구하고 저랑 비슷한 증상으로 고생하시는 분들의 글이 인터넷에 없던데..

EmguCV를 이용한 IP 카메라의 RTSP Stream 재생 소스

		//소스는 그냥 대충 보세요.
        
        Capture _RTSPCapture;
        bool _thrRunning = true;
        int _NoFrameCount = 0;
        Emgu.CV.UI.ImageBox _imgBox;

        public void Run()
        {
            Debug.WriteLine(_rtspAddr + " : Open");

            _RTSPCapture = new Capture(_rtspAddr);
            
            _RTSPCapture.ImageGrabbed += _RTSPCapture_ImageGrabbed;
            _RTSPCapture.Start();

            while (_thrRunning)
            {
                Thread.Sleep(1);
            }
        }

        private void _RTSPCapture_ImageGrabbed(object sender, EventArgs e)
        {
            using (Mat frame = new Mat())
            {
                _RTSPCapture.Retrieve(frame, 0);

                if (!frame.IsEmpty)
                {
                    _imgBox.Image = frame.ToImage<Bgr, Byte>();
                }
                    
            }
        }
        

 

C# Opencv 오픈소스 크로스플랫폼 라이브러리 EmguCV

 

Emgu CV: OpenCV in .NET (C#, VB, C++ and more)

Emgu CV is a cross platform .Net wrapper to the OpenCV image processing library. Allowing OpenCV functions to be called from .NET compatible languages such as C#, VB, VC++, IronPython etc. The wrapper can be compiled by Visual Studio, Xamarin Studio and Un

www.emgu.com

 

[IT정보공유/C#] - C# OpenCV RTSP 네트워크 IP 카메라 영상 연결 (OpenCVSharp)

 

C# OpenCV RTSP 네트워크 IP 카메라 영상 연결

예전에 MP4, AVI 등의 영상 파일을 재생 시키는 방법을 알아봤었는데요. 이번엔 RTSP 프로토콜을 이용하는 IP 카메라의 영상을 재생 시키는 방법에 대해서 알아보도록 하겠습니다. 예전과 동일하게 오픈소스인 Ope..

bigenergy.tistory.com

 

OpenCVSharp과 EmguCV 비교시 EmguCV가 조금 더 나은거 같습니다.

댓글

💲 추천 글