반응형


라즈베리파이에 mjpg-streamer를 설치하여 웹 스트리밍하는 영상을 가져와서 OpenCV에서 사용해보았습니다.



Raspberry Pi에서 mjpg-streamer를 사용하여 웹캠 스트리밍하기

http://webnautes.tistory.com/1261





사용방법은 간단합니다.  

VideoCapture 객체에 웹 스트리밍 주소를 입력해주기만 하면 됩니다.


VideoCapture cap = VideoCapture("http://192.168.43.142:8090/?action=stream");






테스트에 사용한 전체 소스 코드입니다.


#include <opencv2/opencv.hpp>
#include <iostream>


using namespace cv;
using namespace std;


int main()
{
Mat frame;
VideoCapture cap = VideoCapture("http://192.168.43.142:8090/?action=stream");
if (!cap.isOpened()) {

cout << "카메라를 열 수 없습니다." << endl;
return -1;
}

while (1)
{
cap >> frame;

imshow("video", frame);
if (waitKey(1) == 27) break;

}

return 0;
}




참고로 OpenCV 컴파일은 다음처럼 합니다.


OpenCV 4 이라면..

g++ test.cpp -o test $(pkg-config opencv4 --libs --cflags)



OpenCV 3 이라면

g++ test.cpp -o test $(pkg-config opencv --libs --cflags)




OpenCV 설치는 다음 포스트를 참고하세요.


Raspberry Pi 3에 Extra Module(contrib) 포함하여 OpenCV 4.1.2 설치하는 방법

https://webnautes.tistory.com/916 




최초작성. 2018.10.30

최종작성. 2020. 5. 18





반응형

포스트 작성시에는 문제 없었지만 이후 문제가 생길 수 있습니다.
댓글로 알려주시면 빠른 시일내에 답변을 드리겠습니다.

여러분의 응원으로 좋은 컨텐츠가 만들어집니다.
지금 본 내용이 도움이 되었다면 유튜브 구독 부탁드립니다. 감사합니다 : )

유튜브 구독하기


제가 쓴 책도 한번 검토해보세요.

  1. Yoon 2019.11.12 16:41

    으음..... 혹시 외부 스트리밍 주소를 .py내로 가져올 수 있는 파이썬 명령어는 없을까요.....

  2. Keryzy 2019.11.14 00:32

    라즈베리파이IP:8090/?action=stream 을 웹스트리밍 할 시에는 동작 하는것을 확인 하였는데 C++ OpenCV에서 작동할 시 카메라를 열 수 없습니다 라는 메세지가 출력됩니다. 혹시 OpenCV 설치 시 달리 추가하신 내용이라도 있나요?

  3. david 2019.11.14 01:38

    raspberry pi 0에서 mjpg stremaer로 영상을 전송하고 이를 웹 브라우저에서 확인하는 것까지는 정상적으로 작동합니다. 그런데 올려주신 테스트 코드를 Visual Studio 2017, OpenCV 3.4.2 에서 돌려보니 동작하지 않네요.. 혹시 OpenCV 버전 문제인가요??

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.11.14 09:31 신고

      방어벽 처럼 윈도우 쪽 문제일 수도 있을 듯합니다. 라즈베리파이에서 코드를 돌려보세요.

  4. Keryzy 2019.11.14 18:44

    std::cout << cv::getBuildInformation() << std::endl; 을 사용하여서 정보를 확인한 결과 Gstremear가 NO 로 설정되어 있었습니다. 혹시 이 문제 때문에 발생한 결과일까요...?

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.11.14 21:15 신고

      확실치 않네요. 혹시 주소에 https를 사용한건 아닌가요?

  5. Jaychun 2019.12.02 17:29

    안녕하세요 비슷한 작업을 진행중인데요!^^
    혹시 계속 켜두면 멈추지 않으시나요? cap 이 read 하다가 블락킹에 빠져서 루프를 못 빠져나오는 현상이요...
    처음엔 h264때문인줄 알았는데 mjpeg 를 써도 동일하더라고여 뭔가 실마리를 잡고 싶어서 글남깁니다;;

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.12.02 22:50 신고

      확실치는 않지만

      cap >> frame; 다음에..

      아래 코드를 넣어보면 어떨까 싶네요

      if (frame.empty())
      continue;

  6. Jaychun 2019.12.03 17:47

    빠른 답변 감사합니다!^^
    상황은 이렇습니다.
    ipcamera의 네트워크를 스마트폰 테더링으로 연결하고 포트포워딩이 되지않아 미디어서버를 거쳐 http url 로 스트리밍 걸거든요. 문제는 프레임이 empty여도 opencv 단에서 바로 리턴해주지 않고 약 20초이상 대기상태로 빠집니다.
    제 생각엔 미디어서버가 문제같은데...원인을 찾기가 힘드네요ㅜㅜ
    참!그리고 ipcamera 가 제공해주는 rtsp 프로토콜로 스트리밍걸면은 굉장히 잘됩니다!!

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.12.03 22:20 신고

      윈도우 환경에서 로지텍 카메라 일부 기종에서 다음처럼 적어줘야 딜레이가 사라지는데 유사한 현상이 아닌가 싶네요.

      VideoCapture cap(0, cv::CAP_DSHOW);

      다른 벡엔드 옵션은 아래 링크에 있습니다.
      https://docs.opencv.org/3.4/d4/d15/group__videoio__flags__base.html#ga023786be1ee68a9105bf2e48c700294d

  7. 초초보 2020.03.12 10:37

    포스팅 잘봤습니다! 혹시 라즈베리와 클라이언트 중간에 중계서버를두고 중계서버가 소켓통신으로 접속하는 플레이어들에게 멀티로 뿌리는게 가능할까요?ㅜㅜ 라즈베리에 연결된캠은 h264 하드웨어 인코딩도됩니다ㅜ ㅜㅜㅜㅜ 도와주시면 감사요ㅜ

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2020.03.12 11:31 신고

      포스트에서 사용하는 프로그램도 같은 역활을 할거.같습니다

+ Recent posts