0

マルチプロセッシングを使用して、センサーによって検出されたときにカメラ画像をキャプチャするコードを書いています。

マルチプロセッシングを使用する理由は現在コードにはありませんが、キャプチャ中に別の動作を実装するために使用したいと考えています。

ただし、現在のコードで動作しているときにセンサーが初めて検出したときは、画像がうまくキャプチャされます。

2 回目の検出から、添付画像のように画像がキャプチャされません。

マルチプロセッシングのパラメータの受け渡し方法に問題があるようですが、原因と直し方がわかる方がいらっしゃいましたら教えてください。

ここに画像の説明を入力

import cv2
import cv2 as cv
import numpy as np
import io
from PIL import Image
import time
import picamera
import picamera.array
import RPi.GPIO as GPIO
from picamera.array import PiRGBArray
from datetime import datetime
import math
from multiprocessing import Process, Queue, Manager
import matplotlib.pyplot as plt

cameraSensor = 18       # pin No. of Camera
# Initialize the GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(cameraSensor, GPIO.IN, GPIO.PUD_DOWN)

cap = cv2.VideoCapture(0)
cap.set(3, 1280)    #x width
cap.set(4, 720) #y height
cap.set(5, 60)  #frame rate

def camera(queue):
    print("camera")
    startTime = time.time()
    endTime = 100
    num = 1
    
    ret, frame = cap.read()
    endTime = time.time()
    print('shot time : ',endTime - startTime)
    cv2.imwrite('/home/pi/Desktop/vision/frame/frame_'+str(time.time())+".jpg", frame)
    endTime = time.time()
    print('save time : ',endTime - startTime)

if __name__ == "__main__":
    print("start")
    GPIO.add_event_detect(cameraSensor, GPIO.RISING, bouncetime=800)
    queue = Manager().Queue()
    
    while True:
        if GPIO.event_detected(cameraSensor):
                process1 = Process(target=camera, args=(queue,))
                process1.start()
4

0 に答える 0