라즈베리파이 카메라 코드 - lajeubelipai kamela kodeu

라즈베리 파이 4에서 파이썬과 OpenCV를 사용하여 카메라 촬영 테스트를 해보았다.

라즈베리파이 카메라 코드 - lajeubelipai kamela kodeu
카메라 모듈

opencv python 설치

ubuntu@ubuntu:~/workspace$ pip install opencv-python
Collecting opencv-python
  Downloading opencv_python-4.5.3.56-cp38-cp38-manylinux2014_aarch64.whl (34.2 MB)
     |████████████████████████████████| 34.2 MB 34 kB/s
Collecting numpy>=1.19.3
  Downloading numpy-1.21.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (13.1 MB)
     |████████████████████████████████| 13.1 MB 71 kB/s
Installing collected packages: numpy, opencv-python
Successfully installed numpy-1.21.2 opencv-python-4.5.3.56

파이썬 테스트 코드 작성

ubuntu@ubuntu:~/workspace$ vim camtest.py

camtest.py의 내용을 아래와 같이 작성한다.

import cv2

# open camera
cap = cv2.VideoCapture('/dev/video0', cv2.CAP_V4L)

# set dimensions
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 2560)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 1440)

# take frame
ret, frame = cap.read()
# write frame to file
cv2.imwrite('image.jpg', frame)
# release camera
cap.release()

작성된 camtest.py를 실행하면 이미지 촬영이 되고 결과로 image.jpg 파일이 생성된다.

ubuntu@ubuntu:~/workspace$ python3 camtest.py
ubuntu@ubuntu:~/workspace$ ls
camtest.py  image.jpg

이미지 파일을 PC로 가져오기

파워쉘을 열어 scp를 통해 이미지 파일을 로컬로 복사하여 이미지 확인한다. 여기서는 C:\Users.\windy\image.jpg 와 같이 복사된다.

PS C:\Users\windy> scp :/home/ubuntu/workspace/image.jpg ./

이미지 파일 확인

라즈베리파이 카메라 코드 - lajeubelipai kamela kodeu
촬영 결과 이미지

라즈베리파이 CCTV - 1. 라즈베리파이로 사진, 동영상 촬영하기 (파이썬)

라즈베리파이 카메라 코드 - lajeubelipai kamela kodeu

라즈베리파이 CCTV 프로젝트 첫 단계입니다. 이번에는 라즈베리파이로 사진 촬영과 동영상 촬영을 해보도록 하겠습니다. 파이썬(Python) 언어를 사용하겠습니다.

준비물 : 라즈베리파이, 라즈베리파이용 카메라

라즈베리파이 전용 카메라를 사용했습니다. 따로 펌웨어를 설치할 필요 없이 라즈베리에 바로 사용 가능하기 때문에 라즈베리에 사용하기에는 제일 편리합니다. 다른 카메라(웹캠 등)로는 어떻게 하는지는 잘 모르겠네요.

목차
1. 라즈베리파이 설정과 카메라 라이브러리 설치
2. 사진 촬영하기
3. 동영상 녹화하기
4. 일정 주기마다 동영상을 녹화하여 저장하게 하는 CCTV 기능 구현하기
- 다음 계획
- 부록

1. 라즈베리파이 설정과 카메라 라이브러리 설치

터미널에
sudo raspi-config
를 입력하고 엔터를 누르면 아래와 같은 설정창이 뜰겁니다.

5번 옵션에서 카메라를 켜는 설정을 해줍니다.

그 다음 picamera 라는 라이브러리를 설치해줍니다. 터미널에
sudo apt-get update        (업데이트는 항상 필수)
sudo apt-get install python-picamera
로 picamera를 설치하고 그 다음에 라즈베리파이의 펌웨어를 업데이트하기 위해
sudo rpi-update
를 해줍니다.

이제 라즈베리파이 카메라를 사용할 준비가 되었습니다. 위와 같이 라즈베리파이 카메라와 라즈베리파이를 연결해줍니다.

카메라를 테스트하기 위해  (이거는 라즈베리파이 전용 카메라에만 해당)
raspistill -v -o test.jpg
를 터미널에 입력합니다. 그려면 프리뷰 이미지가 뜨고 사진이 /home/pi 에 test.jpg로 저장되어있을겁니다.

2. 사진 촬영하기

picamera에서 사진 촬영하는 방법을 알려드리겠습니다. (자세한 설명에 대한 영어 원문 링크는 맨 밑에 있습니다.)

import picamera 라이브러리를 임포트합니다. camera = picamera.PiCamera() 파이카메라 객체 생성 camera.resolution = (1024,768) 카메라 화질 설정 camera.start_preview() 카메라 프리뷰 보여주기 시작 camera.stop_preview() 프리뷰 멈추기 camera.capture('파일명.jpg') 사진 촬영 후 파일명으로 저장

라즈베리파이 카메라 코드 - lajeubelipai kamela kodeu

위는 제가 만든 파이썬 예시입니다. 이걸 실행하면 다음과 같이 파이썬 파일과 같은 경로에 사진이 저장되어있을겁니다. 파일명은 년-월-날짜 시간:분:초.jpg로 저장되게 해놓았습니다.

라즈베리파이 카메라 코드 - lajeubelipai kamela kodeu

좌측: 카메라 위치 세팅 우측: 카메라 촬영 결과

초점이 맞지 않는군요. 초점을 맞추려면 렌즈 앞쪽 검은 플라스틱 부분을 시계방향 도는 반시계방향으로 돌려주면 됩니다.

라즈베리파이 카메라 코드 - lajeubelipai kamela kodeu

물론 위와 같이 터미널에서도 실행할 수 있습니다.

3. 동영상 촬영하기

#동영상 녹화 시작 camera.start_recording(output = '파일명.h264') #10초동안 녹화하기 camera.wait_recording(10) #동영상 녹화 종료 camera.stop_recording()

라즈베리파이 카메라 코드 - lajeubelipai kamela kodeu

위의 예시는 5초동안 동영상을 촬영합니다.

실행을 확인해보면 다음과 같이 녹화가 되어있는거를 볼 수 있습니다.

좌측: 파이썬 실행 우측: 동영상 결과 확인(아직 초점 맞추기 전이네요)

4. 일정 주기마다 동영상을 녹화하여 저장하게 하는 CCTV 기능 구현하기

라즈베리파이 카메라 코드 - lajeubelipai kamela kodeu

위와 같이 10초동안 동영상을 녹화해서 저장하고 그것을 무한반복하는 예제를 만들어봤습니다. savepath의 경로에 저장합니다.

라즈베리파이 카메라 코드 - lajeubelipai kamela kodeu

위와 같이 10초 또는 1초 더걸린 주기마다 동영상이 저장됩니다. 조금 더 걸리는 것은 다시 녹화 시작하는 딜레이 같네요.
무한 반복을 해놓았기 때문에 종료하려면 터미널에 Ctrl + C 를 눌러줍니다.(터미널에서 실행 중지 명령)
그러면 종료가 됩니다.

라즈베리파이 카메라 코드 - lajeubelipai kamela kodeu

라즈베리파이 카메라 코드 - lajeubelipai kamela kodeu

잘 저장된 것을 볼 수 있습니다.

다음에 해볼 것:
- 네트워크로 스트림하기
- 움직임 감지해서 자동으로 녹화 시작&종료 하기

과연 다음이 언제일까요?

라즈베리파이 카메라 코드 - lajeubelipai kamela kodeu

부록: