У меня запущен скрипт python на моем Raspberry Pi, который
1> начинает делать снимки на каком-то триггере и останавливает его на триггере,
2> связывает изображения в видео, а затем,
3> загружает записанное видео в aws S3.
Мой сценарий работает отлично.Но я хочу, чтобы он работал как служба Linux.Как служба. Она прекрасно работает до захвата изображений и создания видео, после чего происходит сбой службы (время загрузки).
Когда я пытаюсь удалить файлы изображений и видео, созданные моей службой, она сообщает, что это записьЗащищенные обычные файлы.Поэтому я думаю, что по этой причине моему сценарию не разрешено загружать видео, и поэтому мой сервис не работает.Как мне решить эту проблему?
import datetime
from picamera import PiCamera
from time import sleep
import sys
import boto3
import uuid
from subprocess import call
import os
import subprocess
import RPi.GPIO as GPIO
rpi_ID = "1rpi_"
camera = PiCamera()
GPIO.setmode(GPIO.BCM)
pin = 12
GPIO.setup(pin, GPIO.IN)
def uploadReturn(argu):
print("After upload", argu)
def upload_video_S3():
s3client = boto3.client('s3')
bucket_name = '<some_bucket>'
file_to_upload = name + '.mp4'
file_name_in_bucket = name+ '.mp4'
s3client.upload_file(file_to_upload, bucket_name,
file_name_in_bucket, None, uploadReturn)
def naming_file():
global name
t = datetime.datetime.now()
name = rpi_ID + t.strftime('%m_%d_%Y_%H_%M_%S')
try:
count = 0
while True:
#Trigger is HIGH twice
if GPIO.input(pin) and count == 1:
#stop taking snaps on second HIGH
count = 0
naming_file()
#make a video out of snaps
os.system("ffmpeg -framerate 4 -i img%03d.jpg -c:v
libx264 -profile:v high -r 10 -pix_fmt
yuv420p {}.mp4".format(name))
#upload video
upload_video_S3()
elif GPIO.input(pin) and count == 0:
#On first HIGH trigger, start taking snaps
sleep(2)
for filename in enumerate(camera.capture_continuous('/home/pi/upload_s3/img{counter:03d}.jpg')):
print("Capturing")
if GPIO.input(pin) == 1:
print("Break")
break;
sleep(0.25)
count = count+1
else:
pass
except KeyboardInterrupt:
print ("Something went wrong")
GPIO.cleanup()