728x90

- 라즈베리파이 셋팅

sudo pip3 install firebase_admin

- 파이어베이스 SDK 설치

sudo pip3 install schedule

추가로 schedule을 사용하기 위해 설치( 설치 자유 )
이 모듈은 정해진 시간마다 카메라를 이용해 사진을 찍고 이를 파이어베이스 스토리지에 업로드 하기 위한 모듈임

- 영상 촬영용 코드

from picamera import PiCamera
from time import sleep
import datetime
import sys
import os
import requests
import firebase_admin
from firebase_admin import credentials
from firebase_admin import storage
from uuid import uuid4
import time

#자신의 project id
PROJECT_ID = "abc-1234" # 본인의 id 적기

#라즈베리파이에 다운받은 '비공개 키' 위치 설정 
cred = credentials.Certificate("/home/pi/key/AccountKey.json")
# 이 비공개 키의 주소는 본인에 맞게 설정

#스토리지 url 주소
default_app =
firebase_admin.initialize_app(cred, {
    'storageBucket': "fir-0a00b.appspot.com"
}) # “fri~” 이 부분은 본인의 주소로 바꿔야 함

#버킷은 Storage에서 데이터를 보관하는 기본 컨테이너.
bucket = storage.bucket() #기본 버킷 사용

#파일 업로드 함수 선언(def)
def fileUpload(file):
    blob = bucket.blob('Video/'+file)
    #new token and metadata 설정
    new_token = uuid4()
    metadata = {"firebaseStorageDownloadTokens": new_token} #access token이 필요하다.
    blob.metadata = metadata

    #upload file
    blob.upload_from_filename(filename='./Video/'+file, content_type='video/h264')
    print(blob.public_url)

#영상 촬영 함수 선언(def) 
# 라즈베리파이에서 영상 촬영 확장명은 .h264, .avi만 가능 mp4는 안됨

def recording_camera():
    basename = "noah"
    suffix = datetime.now().strftime("%Y%m%d_%H%M%S") + '.h264'
    filename = "_".join([basename, suffix])

    camera = PiCamera()
    camera.resolution = (640, 480)
    camera.start_preview()
    
    #사진을 찍어서 저장한다. 파일의 중복되지 않도록 날짜시간을 넣어서 만들기
    camera.start_recording('/home/pi/senser_system/Video/' + filename) #자신의 주소에 맞게 설정
    camera.wait_recording(10)
    #sleep(10)
    camera.stop_recording()
    #사진 파일을 파이어베이스에 업로드 한다.
    fileUpload(filename)
    camera.stop_preview()
    camera.close()

def clearAll():
    #폴더안 파일 지우기
    path = 'Video'
    os.system('rm -rf %s/*' % path)

#10초마다 실행
schedule.every(10).seconds.do(recording_camera)

#10분마다 실행
#schedule.every(10).minutes.do(recording_camera)

 

728x90

+ Recent posts