본문 바로가기

RPI+ Ubuntu usb 웹캠 연결하기 본문

개인 프로젝트 and 논문/딥러닝 자율주행 장난감 만들기

RPI+ Ubuntu usb 웹캠 연결하기

jaegomhoji 2022. 10. 14. 10:06

--------------------------------------------------------

1. mjpg-streamer 다운 and 인스톨

2. 4LV2 camera 코덱 설치 

3. ssh 접속, mjpg-streamer 실행

4. ip로 접속, static 말고 stream 실행

5. Python idle로 streaming 영상 불러오기 

--------------------------------------------------------

 

1. mjpg-streamer 다운 and 인스톨

인터넷을 찾아보니 대부분 github에서 오픈소스인 mjpg-streamer를 다운받는다. 

 

git clone https://github.com/jacksonliam/mjpg-streamer.git 

 

sudo apt-get install cmake libjpeg8-dev

-> cmake 와 development version의 libjpeg가 필요하다고 해서 인스톨 

sudo apt-get install gcc g++ 

 

cd mjpg-streamer-experimental 

make distclean 

make CMAKE_BUILD_TYPE=Debug 

sudo make install 

 

이후 쉘 파일이 있는 경로로 이동,  화질등의 옵션을 수정해서 실행해 줄 수 있다. 

cd /mjpg-streamer/mjpg-streamer-experimental/

sudo nano start.sh 

 

2. V4L2 camera 코덱 설치 

.만약 카메라에 리눅스용 드라이버가 없다면.. 정상적으로 영상을 받아오지 못한다.. 

그럴경우 위의 셸 편집기에 

sudo modprobe bcm2835-v4l2

를 추가해서 드라이버를 활성화 해주도록 하자 

 

그리고 

ls -ltrh /dev/video* 를 통해서 웹캠이 video0 ~ 으로 들어오고 있는지도 확인해준다 

 

다른방법으로는 

sudo apt-get install v4l-utils -y

v4l2-ctl --list-devices 

가 있다. 

 

3. ssh 접속, mjpg-streamer 실행

 

ssh device@ip 

-> 접속 

 

cd /mjpg-streamer/mjpg-streamer-experimental/

sh start.sh 

-> mjpg streamer 실행 

 

다른 방법으로는... 

export LD_LIBRARY_PATH=.
./mjpg_streamer -o "output_http.so -w ./www" -i "input_raspicam.so"

 

4. ip로 접속, static 말고 stream 실행

 

ip주소로 인터넷 창에 들어가면 스트리밍 영상이 보인다. 

처음에는 static > snapshot 으로 나와서, 스트리밍으로 바꿔준다. 

( 그래도 영상이 송출되고 있는 중이다 ) 

 

5. Python idle로 streaming 영상 불러오기 

 

import cv2
import numpy as np
from urllib.request import urlopen

url = "http://172.16.0.186:8080/?action=stream" #ESP CAM의 영상 스트리밍 주소
stream = urlopen(url)
buffer = b''

while True:
    buffer += stream.read(4096)
    head = buffer.find(b'\xff\xd8')
    end = buffer.find(b'\xff\xd9')
    if head > -1 and end > -1:
        jpg = buffer[head:end+2]
        buffer = buffer[end+2:]
        img = cv2.imdecode(np.frombuffer(jpg, dtype=np.uint8), cv2.IMREAD_UNCHANGED)
        cv2.imshow("stream", img)
    key = cv2.waitKey(1)
    if key == ord('q'):
        break

cv2.destroyAllWindows()

 

6. 실행결과 

Comments