메이커 Maker

라즈베리파이 타임랩스 Timelabs 카메라 만들기 1

지구빵집 2021. 8. 6. 10:23
반응형

 

 

라즈베리파이 타임랩스 Timelabs 카메라 만들기 

 

조금은 긴 포스트가 될 수도 있는데 이전에 만든 연관 글을 참고하면서 짧게 올리기로 한다. 이전에 만들어본 타임랩스 카메라(일정 주기로 영상을 찍는 기능)를 확장하여 다양한 기능을 갖도록 만드는 것이 이번 프로젝트의 목적이다. 결과가 좋으면 크라우드 펀딩이나 여러 가지 프로젝트로 확장할 계획도 가지고 있다. 타임랩스가 무엇인지 모르거나 영상을 본 적이 없다면 아래 링크를 참고하는 데 처음 링크만 대출 참고하면 나머지는 DSLR 카메라를 사용하는 방법이라 꼭 볼 필요는 없다.

 

타임랩스 카메라 만들기 포스팅

 

라즈베리파이 타임랩스 Timelabs 카메라 만들기 1

라즈베리파이 타임랩스 Timelabs 카메라 만들기 2

라즈베리파이 타임랩스 Timelabs 카메라 만들기 3

라즈베리파이 타임랩스 Timelabs 카메라 만들기 4

 

 

타임랩스에 대한 설명 글

 

타임랩스(Timelapse)란 무엇인가?

DSLR을 이용한 타임랩스(Timelapse) 촬영

색다른 타임랩스(Timelapse)와 후반 작업

 

라즈베리파이 환경설정에서 카메라를 enable  모드로 설정하고, 카메라가 잘 찍히는지 테스트하기 위해 아래 명령어를 입력한다.

 

$raspistill -o image.jpg

 

$raspistill -o image.jpg라고 입력하고 엔터를 누르면 화면에 사진이 뜨고 5초 후에 사진 한 장이 루트 위치(home/pi)에 image.jpg로 생성된다. GUI 화면에서 이미지 파일을 확인한다.

 

우선 잘 돌아가는 파이선 코드를 보자. 아래 코드를 복사하여 picstill.py라는 파일을 만들고 저장한다. 사용 명령어를 아래에 작성하였다.

 

$nano picstill.py 
위 명령어는 라즈베리파이의 커맨트 입력 화면에서 나노 에디터를 이용하여 
picstill.py 를 생성한다.

나노 에디터 환경에서 파일을 작성했다면 ctrl-x 를 누르고 y 를 눌러 빠져 나온다.

 

picstill.py 코드를 아래에 실었다. 일단 기능만 돌아가게 만들었다. 카메라 폴더가 없으면 camera 폴더를 만들어 주고 정해진 시간 반복해서 사진을 찍어 저장한다. 최하 1초로 설정을 해도 약 2~3초마다 한 장씩 저장한다. 들어가 있어야 하는 데 없는 기능이 많다. 앞으로 전부 집어넣어야 하니 없는 기능을 적어보자

- 시작 정지 기능

- LED 표시 기능

- OLED로 상태 표시하기

- SD 카드 영량이 가득 차서 사진 저장을 못할 경우 대응 방안(표시, 강제 지우기 등) 

 

#!/usr/bin/env python

import os
import time as t
from datetime import datetime
import subprocess

FRAMES = 3600   #number of frame
TIMEBETWEEN = 6 #second

#time = datetime.now()
filepath = "/home/pi/camera"
fileNamePrefix = "image"

if not os.path.isdir(filepath):
    os.mkdir(filepath)


framecount = 0
#while true:            #if infinitely
while framecount < FRAMES:
        time = datetime.now()
        filename = filepath + "/" + fileNamePrefix + "-%04d%02d%02d-%02d%02d%02d.jpg" % (time.year, time.month,

                                                                 time.day, time.hour, time.minute, time.second)
        command = "raspistill -t 1 -o %s" % (filename)

        subprocess.call(command, shell = True)
        print "Captured %s" % filename

        t.sleep(3) #every 3second

 

파일을 잘 만들었다면 아래 명령을 일단 실행을 한다. 실행 명령어는 $python picstill.py

아래와 같이 에러 없이 잘 실행되면 ctrl-c 키를 눌러 종료한다.

 

pi@raspberrypi:~ $ python picstill.py
Captured /home/pi/camera/image-20210805-184157.jpg
Captured /home/pi/camera/image-20210805-184201.jpg
Captured /home/pi/camera/image-20210805-184205.jpg
Captured /home/pi/camera/image-20210805-184209.jpg
^CTraceback (most recent call last):
  File "picstill.py", line 31, in <module>
    t.sleep(3) #every 3second
KeyboardInterrupt
pi@raspberrypi:~ $

 

축하한다. 이것으로 끝이다. 나머지는 해도 그만 안 해도 그만인 것들이다. 해도 그만 안 해도 그만인 것은 하는 게 좋다. 했을 때 생기는 최악의 결과라고 해봐야 그걸 하지 말았어야 하는 이유를 깨닫게 되니까 말이다. 끝까지 하는 게 좋다는 말을 참 길게도 쓴다. ^^

 

일단 picstill.py를 자동 실행하게 만드는 것이 일 단계다. $ sudo nano /etc/rc.local 명령을 실행하면 아래와 같은 코드가 나타난다. 맨 윗줄을 #!/bin/bash -e로 바꾸고 예) 위치에 실행파일을 경로까지 정확하게 적고 저장한다.

 

#!/bin/bash -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will “exit 0” on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
# Print the IP address
_IP=$(hostname -I) || true
if [ “$_IP” ]; then
printf “My IP address is %sn” “$_IP”
fi

여기에 부팅하면서 실행할 파일을 정해주면 된다. 마지막엔 반드시 & 붙인다.
예)sudo /home/py/myexecutionfile &
예)sudo python /home/py/picstill.py &

exit 0

 

바로 저 위에 예) 자리에 한글을 다 지우고 sudo python /home/pi/picstill.py & 를 추가한다. 실제 코드를 아래에 나타낸다. 귀여운 것!

 

#!/bin/bash -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
fi

sudo python /home/pi/picstill.py &

exit 0

 

만약에 리부팅을 하고 나서 /home/pi/camera 폴더에 사진이 늘어나지 않으면 rc.local 파일이 실행되지 않는 이야기니까 rc.local 파일 활성화 하는 방법 글을 살펴보기 바란다.

 

위에 적었던 없는 기능을 하나하나 구현하기로 한다. 내용이 길어지니 다음 글로 이어쓰기로 갑니다.

 

 

2021. 8. 5일 아이디어 스케치

 

2021. 8. 5일 아이디어 스케치

 

 

 

반응형