Mjpg-streamer 스트림 및 스트림 영상 검출

승준·2023년 5월 5일
0
post-thumbnail

mjpg-streamer 실시간 스트리밍

스트리밍에 motion과 mjpg-streamer를 사용해 봤는데,
motion보다 mjpg-streamer가 더 사용하기에 편해서 mjpg-streamer로 진행을 했다.

1. 필수 패키지

mjpg-streamer 빌드에 필요한 패키지를 설치한다.
sudo apt-get install libjpeg-dev imagemagick libv4l-dev cmake

2. 소스 코드 다운로드

mjpg-streamer를 현재 위치에 다운로드 한다.
git clone https://github.com/jacksonliam/mjpg-streamer.git

3. 빌드 및 설치

빌드 파일이 위치한 디렉토리로 이동하여 mjpg-streamer를 빌드해 준다.
cd mjpg-streamer/mjpg-streamer-experimental
make CMAKE_BUILD_TYPE=Debug

빌드된 파일을 시스템에 설치해 준다.
sudo make install

4. 실행

아래 명령어로 스트리밍 서버를 실행시킨다.
mjpg_streamer -i "input_uvc.so -d /dev/video0" -o "output_http.so -w /usr/local/share/mjpg-streamer/www/"

따로 옵션을 주지 않으면 포트 기본값 8080으로 설정된다.


웹 브라우저로 localhost:8080 또는 http://<라즈베리파이 IP 주소>:8080/ 스트리밍 서버에 접속한다.
아래와 같은 홈페이지가 나오면 스트리밍을 정상적으로 성공한 것이다.

여기서 Stream으로 이동하면 카메라의 영상이 나오고 있는 것을 볼 수 있다.

주소 끝에 ?action=stream 추가하면 비디오 스트림만 볼 수 있다.

공유기 포트포워드를 설정하면 외부에서도 (http://공인IP 주소:포트번호)로 확인이 가능하다.

input_uvc.so 플러그인 옵션들에 대해 알 수 있다.
mjpg_streamer -i 'input_uvc.so --help'

  • -r (resolution): 입력 카메라의 해상도를 설정한다. 예를 들어, -r 640x480으로 입력하면 640x480 해상도로 영상을 캡처한다.
  • -d (device): 입력 카메라 디바이스를 선택한다. 기본값은 /dev/video0

output_http.so 플러그인 옵션

  • -w : 웹 페이지 디렉토리 설정
  • -p : HTTP 포트 설정

best.pt 다운로드

앞에서 학습시킨 best.pt 모델을 다운로드 하고, yolov5 폴더에 위치시켰다.

실시간 객체 탐지

best.pt 모델을 이용하여 실시간 스트리밍 서버의 영상을 탐지한다.
python3 detect.py --source http://localhost:8080/?action=stream/ --weights best.pt --conf 0.25


mjpg-streamer로 스트리밍 중인 영상이 실시간으로 탐지되는 것을 볼 수 있다.

--source 옵션으로 가능한 것들

처음에 source를 0으로 주고 하나의 캠으로 스트리밍과 검출을 동시에 진행하려고 해서 
cap.isOpened() 캠 초기화 에러로 난항을 겪었다.

라즈베리파이 CPU의 한계

라즈베리파이의 CPU와 카메라 해상도의 부족함으로 인해 결과가 아쉽게 나온다.

  • 크기를 640으로 설정했을 때
  • 크기를 416으로 설정했을 때

크기를 줄여서 속도를 높였지만, CPU 사용량이 여전히 높았다.

GPU를 사용해보려고 했지만, 라즈베리파이의 GPU를 사용할 방법은 찾지 못했다.
라즈베리파이에서는 스트리밍만 하고 검출은 성능이 좋은 PC에서 해도 좋을 듯하다.

MJPG-Streamer로 스트리밍 서버를 열고 Yolov5 실시간 객체 탐지까지 완료했다.
다음은 객체가 탐지될 때 탐지된 객체를 이미지로 저장되게 한다.

profile
student

16개의 댓글

comment-user-thumbnail
2023년 5월 7일

스트리밍 하시는 이유가 있나요? 프레임이 더 잘나오나,,?
전 욜로8로하고있는데

느낌상2~4프레임 나오는거 같아요

1개의 답글
comment-user-thumbnail
2023년 5월 26일

혹시 라즈베리파이 64비트 OS에 어떤 카메라로 실시간 객체탐지 하셨나요?
파이카메라2로 같은 환경에서 yolov5 돌리는데,
mjpg_streamer -i "input_uvc.so -d /dev/video0" -o "output_http.so -w /usr/local/share/mjpg-streamer/www/" 는 잘 되는데
python3 detect.py --source http://localhost:8080/?action=stream/ --weights best.pt --conf 0.25 가 진행이 안됩니다. 혹시 해결방법있을까요,,?

1개의 답글
comment-user-thumbnail
2023년 11월 29일

안녕하세요 글 잘 보았습니다 같은 프로젝트를 진행하고 있는데 저도 라즈베리파이 안에서 하면 영상 딜레이가 엄청 나더라구요... 그래서 mjpg-streaming을 이용해서 제 노트북에서 탐지 해보긴 했는데 3초 정도의 딜레이가 있습니다... 혹시 해결방법이 있을까요...?

1개의 답글
comment-user-thumbnail
2024년 2월 22일

안녕하세요 도움이 많이 되었습니다. 제가 카메라를 이용해서 yolov5를 사용하려 하는데 python3 detect.py --source 0 --weights home/anhae/yolov5/best.pt --img-size 320 이렇게 실행했더니 no such file or directory: 'home/anhae/yolov5/best.pt' 이런 오류가 뜨는데 왜그럴까요? yolov5s.pt를 쓸땐 잘되었는데 best.pt를 사용하려 하니 이러네요...

2개의 답글