라즈베리파이4 카메라 - lajeubelipai4 kamela

😆 Raspberry Pi 4 구매

2022.07.28 드디어!! 기다리던 라즈베리파이4가 왔다!!
Nuru Project에서 농장 온,습도 제어 및 카메라 모듈 사용이 필요했기 때문.
처음 다뤄보는 라즈베리파이였고 중간중간에 어려움이 있어 포스팅으로 과정을 남긴다.

온,습도 보다 제일 급했던건 카메라였기 때문에, 카메라 모듈을 포함하여 라즈베리파이를 먼저 구매하였다.
회사에서 비용처리를 해주어 좋은 스펙의 기기를 구매하였다.
아래에선 어떤 제품을 샀는지에 대해 언급해보겠다.

먼저 라즈베리파이 본체.
Raspberry Pi 4 Computer Model B 8GB RAM

  • 64-bit quad-core Cortex-A72 processor
  • 8GB LPDDR4 RAM
  • 2 micro HDMI ports
  • 2 USB 3.0 ports
  • 2 USB 2.0 ports
  • Gigabit Ethernet port
  • 802.11b/g/n/ac wireless
  • Bluetooth 5.0
  • 5V/3A USB-C power supply required

위와 같은 스펙을 가지고 있다.

OS를 깔기 위해 SD 카드 역시 구매.
SD Card

  • MicroSDHC/XC, Class10, UHS-I (U1), 95MBs [액센 캐릭터 마이크로 SD카드] MicroSDXC 64GB

카메라 기능 사용을 위해 카메라 모듈 구매
카메라 모듈
라즈베리파이 카메라모듈 V2, 8MP (RPI 8MP CAMERA BOARD)

아, 방열판과 케이스도 샀다.
당연히 전원 어댑터도 포함!!

25만원 정도 들었던 것 같다.


🐣 라즈베리파이 4 설치

샀으니 설치도 하고 써보기도 해야지.
설치는 아래와 같은 과정을 거친다.

  1. 본인 컴퓨터에 라즈베리파이 Imager를 설치한다.
  2. USB 리더기에 Micro SD Card를 삽입한다.
  3. 그 USB를 본체에 꼽고 Imager를 통해 라즈베리파이 OS를 굽는다.
  4. 라즈베리파이에 Micro SD카드를 연결, 모니터, 키보드, 마우스 연결하고 전원을 킨다.

글은 어렵다. 나는 그림이 좋다.

1. 이 링크에서 Download for Windows를 클릭

라즈베리파이4 카메라 - lajeubelipai4 kamela

2. Raspberry Pi Imager 실행

3. 운영체제 OS 선택 클릭

4. Raspberry Pi OS (other) 클릭

5. Raspberry Pi OS (64-bit) 클릭

6. Option 선택

7. 저장소 선택 및 쓰기 버튼 클릭

이제 OS가 Micro SD Card에 구워졌다.


🍓 라즈베리파이 실행

1. 위에서 구운 OS가 담긴 Micro SD카드를 라즈베리파이에 삽입.

라즈베리파이4 카메라 - lajeubelipai4 kamela

2. 카메라 모듈 연결
참고로 나는 카메라 연결하기가 어려웠다.
아래의 공식 사이트에서 영상으로 설명이 잘 되어있으니 참고 바란다.
공식 사이트

라즈베리파이4 카메라 - lajeubelipai4 kamela

3. HDMI, 키보드, 마우스 연결
HDMI to Micro HDMI를 구매하였다.
키보드와 마우스는 무선을 사용하였음.

라즈베리파이4 카메라 - lajeubelipai4 kamela

4. 라즈베리파이 4에서는 전원 버튼이 따로 없다. 전원 포트만 연결하면 됨.
바로 연결해보자.

5. 명령어 입력.
초기 설정? 느낌으로 업데이트 및 업그레이드를 해 줄 것이다.
업데이트 및 업그레이드가 다 끝나면 리부트를 해주자.

  • sudo apt-get update
  • sudo apt-get upgrade
  • sudo reboot

이제 라즈베리파이4 설치가 끝났다.
우측 상단에 아이콘으로 와이파이를 연결할 수 있다.
또한, $ ifconfig명령어를 사용하면 자신의 ip를 확인할 수 있다.


📸 카메라 연결 및 사진 찍기

위 과정을 완료하였다면, (라즈베리파이4 기준) 터미널을 킬 수 있을 것이다.(Terminal 단축키 : Ctrl + Alt + T)
찾아보니, 라즈베리파이에서 카메라를 사용하려면 Preferences/Raspberry Pi Configuration/Interface에서 Camera를 Enable 하는 등 셋팅이 더 필요하다고 언급한다.

공식적으로 Bullseye 버전부터는 카메라를 알아서 detect 해주어 따로 설정이 필요 없다고 하더라.(아래 공식 문서 참고)
이것은 더이상의 PiCamera Python 라이브러리를 지원하지 않음을 의미한다.
또한, raspicam역시 지원하지 않게 된다.

하지만 새로운 Bullseye OS는 libcamera 앱이 사전 설치가 되어 enable the camera같은 작업을 할 필요 없이 바로 카메라 모듈을 연결하여 사진을 찍으면 된다고 한다!

공식문서
bullseye-camera-system

그럼 따로 할 설정도 없으니 사진을 찍어보도록 하자.

나와 같은 환경이라면, 아래의 명령어로 사진을 찍을 수 있다!!
$ libcamera-jpeg -o cam.jpg

이제 이 카메라 기능을 사용하여 농장의 사진을 찍고 firebase에 올리는 등의 작업이 진행될 것이다.
python을 사용하여 진행할 예정이고, libcamera를 살펴볼 필요가 있어보인다.

🔥 본 포스팅은 직접 해보고 따끈따끈하게 작성한 것임.
최소한의 과정을 담고 있기 때문에, 생략된 부분이 존재할 수 있음.
포스팅에 틀린 내용이 있다면 알려주시면 감사하겠습니다!

라즈베리파이4 카메라 - lajeubelipai4 kamela

이번 포스팅에서는 라즈베리파이 4B 모델과 카메라 모듈을 이용해 스트리밍 환경을 구축해보겠습니다.

본 포스팅에서 스트리밍 환경 구축에 사용할 소스와 카메라는 mjpg-streamer와 NOIR CAMERA MODULE V2라는 카메라 모듈이지만, 카메라는 라즈베리파이의 카메라 포트에 연결 가능한 카메라라면 어떤 것이든 상관없습니다.

라즈베리파이4 카메라 - lajeubelipai4 kamela
RASPBERRY Pi NOIR CAMERA MODULE V2

1. 라즈베리파이 카메라 포트 활성화

카메라를 사용하기 위해서는 라즈베리파이에서 카메라 포트를 활성화시켜야 합니다. 본 포스팅에서는 GUI에서 설정하는 방법과 와 터미널 환경에서 설정하는 방법 모두 설명하겠습니다.

먼저 GUI 환경에서의 방법입니다.

라즈베리파이4 카메라 - lajeubelipai4 kamela

작업 표시줄에서 기본 설정 > Raspberry Pi Configuration을 엽니다. root 권한이 필요합니다.

라즈베리파이4 카메라 - lajeubelipai4 kamela

인터페이스 탭에서 카메라 항목이 아마도 Disable로 설정되어있을 텐데, 이를 Enable로 바꿔 줍니다.

터미널 환경에서 설정하는 방법은 다음과 같습니다.

아래의 명령어로 설정에 진입합니다.

$ sudo raspi-config
라즈베리파이4 카메라 - lajeubelipai4 kamela

위 화면에서는 원하는 항목에 커서를 두고 Enter를 누르면 선택이 됩니다.

Interface Options를 선택해줍니다.

각 옵션들 항목의 순서는 라즈베리파이 OS 커널 버전에 따라 달라질 수 있습니다.

라즈베리파이4 카메라 - lajeubelipai4 kamela

카메라를 선택합니다.

라즈베리파이4 카메라 - lajeubelipai4 kamela

카메라 포트를 활성화할 것인지 묻습니다.

'예'를 선택해 카메라 포트를 활성화해 줍니다.

설정을 완료하면 첫 화면으로 돌아오는데 Finish를 누르면 재부팅할 것인지를 묻는데, 아직은 재부팅하지 않겠습니다.

2. 카메라 연결

우선 라즈베리파이를 완전히 꺼줍니다.

사실 그냥 기동하고 있는 상태에서 연결해도 연결은 되지만 연결하는 도중에 다른 연결선이 빠지거나 접촉 불량이 돼서 문제가 발생하는 불상사를 방지하기 위해 안전하게 전원을 끄고 전원 선을 뺀 다음 연결해주는 것이 좋습니다.

# 전원 종료
$ sudo shutdown -h now
라즈베리파이4 카메라 - lajeubelipai4 kamela

카메라 모듈은 위와 같은 15핀 리본 케이블로 되어있습니다.

리본 케이블은 앞면 뒷면이 구분되어 있습니다. 핀이 노출되어있는 부분이 Front입니다.

라즈베리파이4 카메라 - lajeubelipai4 kamela

위 사진에서 빨간 영역으로 표시한 부분이 카메라 포트입니다.

리본 케이블의 앞 뒷면을 잘 구분 해 체결해줍니다.

이제  전원을 연결하고 라즈베리파이를 기동하고 잘 연결되었는지 아래의 명령어로 확인합니다.

라즈베리파이4 카메라 - lajeubelipai4 kamela

detected가 1 이면 잘 연결된 것입니다. 만약 0이라면 케이블 연결 방향등 제대로 체결되었는지 확인합니다.

3. mjpg-streamer 다운로드 및 컴파일

카메라 스트림을 이용하기 위해 사용되는 소스는 여러 가지가 있지만 본 포스팅에서는 mjpg-streamer를 사용하도록 하겠습니다.

mjpg-streamer를 사용하기 위해서는 컴파일 도구와 필요 패키지를 선행 설치해주어야 합니다.

$ sudo apt-get install gcc g++ cmake libjpeg8-dev

깃 허브에서 mjpg-streamer를 clone 하고 컴파일합니다.

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

# 소스파일에 이동
$ cd mjpg-streamer/mjpg-streamer-experimental

# 컴파일
$ make distclean
$ make CMAKE_BUILD_TYPE=Debug
$ sudo make install

4. 스트리밍

이제 mjpg-streamer/mjpg-streamer-experimental/에 있는 mjpg_streamer 명령을 이용해 스트림 서버를 기동 합니다.

$ export LD_LIBRARY_PATH=./mjpg-streamer/mjpg-streamer-experimental/
$ mjpg_streamer -o "output_http.so -w ./www -p 9090" -i "input_raspicam.so -fps 30 -preview"

-o -i 옵션은 각각 output input을 의미합니다.

위 옵션은 포스팅을 위한 예제입니다. 화면 사이즈, 회전율, 프레임 등 다양하게 옵션을 줄 수 있습니다.

여기서 -o 옵션의 -p 9090은 서버 포트를 의미합니다. 만약 9090 포트가 사용 중이라면 다른 번호를 할당합니다.

-p 옵션을 설정하지 않으면 8080으로 할당받습니다.

각 옵션에 대한 자세한 설명은 아래 링크를 참조해주세요.

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

jacksonliam/mjpg-streamer

Fork of http://sourceforge.net/projects/mjpg-streamer/ - jacksonliam/mjpg-streamer

github.com

라즈베리파이4 카메라 - lajeubelipai4 kamela
라즈베리파이4 카메라 - lajeubelipai4 kamela

명령어를 입력하면 위와 같이 연결 정보와  옵션이 표시됩니다.

HTTP TCP port가 제대로 적용되었는지 확인합니다.

이제 아래와 같이 브라우저에서 접속해보면 카메라를 통한 영상을 확인할 수 있습니다.

http://라즈베리파이의 IP:9090/?action=stream
라즈베리파이4 카메라 - lajeubelipai4 kamela

카메라가 제대로 작동하고 있음을 확인했습니다.

여기서 ffmpeg나 파이썬 등을 이용해 CCTV나 블랙박스같이 영상을 저장하는 등의 프로그래밍도 가능하니 여러 가지를 시도해보는 것도 좋을 듯합니다.

5. 부록

아래는 설치와 서버 실행을 좀 더 편리하게 이용하도록 간단히 작성한 쉘 스크립트입니다.

아래 스크립트를 sudo chmod +x mjpg-streamer_manager.sh로 실행 권한을 부여하면

sh mjpg-streamer_manager.sh 명령으로 손쉽게 설치 및 서버를 구동할 수 있습니다.

mjpg-streamer_manager.sh

0.00MB

#!/bin/bash

install(){ 
    echo 'Download & Install mjpg-streamer' 
    echo 'update apt' 
    sudo apt-get update
    
    echo 'upgrade apt'
    sudo apt-get upgrade
    
    echo 'package install'
    sudo apt-get install gcc g++ cmake libjpeg8-dev
    
    echo 'Download mjpg-streamer...'
    git clone https://github.com/jacksonliam/mjpg-streamer.git
    
    echo 'Building...'
    cd mjpg-streamer/mjpg-streamer-experimental
    
    make distclean
    make CMAKE_BUILD_TYPE=Debug
    sudo make install
    
    echo ''
    echo 'Download & Install Complete!'
}

run(){
    export LD_LIBRARY_PATH=./mjpg-streamer/mjpg-streamer-experimental/
    mjpg_streamer -o "output_http.so -w ./www -p 9090" -i "input_raspicam.so -fps 30 -preview" 
}

start(){
    echo 'mjpg-streamer Load Manager By overload'
    echo 'Select Your Action''s'
    echo '======================'
    echo '1) mjpg-streamer Install'
    echo '2) mjpg-streamer Run'
    echo 'any) cancel'
    echo '======================'
    
    echo -n 'number: '
    read num
    
    case $num in
        1)
            install
            ;;
        2)
            run
            ;;
        *)
            echo 'cancel'
    esac
}

start

이것으로 라즈베리파이와 카메라 모듈을 이용한 실시간 스트리밍 포스팅을 마칩니다.