2011-08-11 9 views
4

OpenCV Detect 메서드를 스레드로부터 안전하게 보호하려면 어떻게해야합니까?

여러 스레드에서 동시에 얼굴을 감지하는 다음 OpenCV 메서드 (Emgu CV 래퍼)를 호출합니다.

IntPtr objects = CvInvoke.cvHaarDetectObjects(
        img.Ptr, 
        haarObj.Ptr, 
        stor.Ptr, 
        scaleFactor, 
        minNeighbors, 
        flag, 
        minSize); 

AccessViolationException이 발생합니다. 이 방법은 거의 모든 스레드 수명을 필요로하기 때문에 표준 .NET 잠금은 허용되지 않습니다. 이 방법을 동시에 수행하는 방법에 대한 아이디어가 있습니까?

답변

3

해결책은 OpenCV에서 내부 멀티 스레딩을 사용하는 것입니다. 이를 위해 OpenCV는 Intel TBB으로 만들어야합니다. Detect 메서드가 호출되면 내부적으로 여러 스레드가 사용됩니다.

+0

아마도 OpenCV의 어떤 문서가 동시에 무엇을 실행할 수 있고 어떤 문서가 아닌지 알 수 있습니까? 다른 스레드에서 Emgu.CV.CameraCalibration.FindChessboardCorners의 여러 인스턴스를 실행할 필요가 있습니다. (ㅎ, 당신도 Kiev에 있습니다 :)) – sergtk

+1

@sergdev 그런 문서가 없다고 생각됩니다. 메서드가 동시성을 지원하는지 여부를 확인하는 가장 좋은 방법은 여러 스레드에서 실행하거나 OpenCV 원본을 보는 것입니다. TBB를 지원하는 OpenCV 만 만들 수도 있습니다. – Centro

+1

지금은 이런 방식으로 처리하지만 doc에 진술이 없으므로 나중에 알림없이 변경 될 수 있습니다. – sergtk

관련 문제