Триггер один раз на 20 секунд в бесконечном цикле - PullRequest
0 голосов
/ 02 марта 2020

Я создаю следующий сценарий для использования с RPi 4, с веб-камерой USB и датчиком TFMini Plus Lidar (также с подключенным USB):

import serial
import datetime
import cv2,io,imutils
from imutils.video import VideoStream

from random import randint
from time import sleep, time

interval = 1
list =[0, 0]

ser = serial.Serial(
        port="/dev/ttyUSB0",
        baudrate = 115200,
        parity=serial.PARITY_NONE,
        stopbits=serial.STOPBITS_ONE,
        bytesize=serial.EIGHTBITS,
        timeout=1
)


while 1:
    try:

    cap, img = cv2.VideoCapture(0)

    li = ser.readline().decode("utf_8").rstrip('\n\r')
    if len(li) > 0:
        li = float(li)
        print(li)
        print(type(li))

        list[0] = list[-1]
        list[-1] = li
        print (list)
        x = list[-1]
        y = list[0]

        #speed calculation
        kmh = abs ((x - y) / (interval)) * 3.6
        #braking distance calculation
        d = (kmh ** 2) / (250 * 0.8)
        print ('speed', kmh, 'km/h')
        print ('total distance:', list[-1], 'm')
        print ('breaking distance:', d, 'm')
        print ('\n')

        if d < x:
               #cv2.imshow('Screen',img)


    except ZeroDivisionError:
        print('it was zero')
        print('\n')
        continue 

Лидар будет считывать расстояние каждый секунда (x), затем с парой показаний он вычислит расстояние пробоя (d). Теперь я хочу иметь возможность запустить веб-камеру в случае, если разрывное расстояние меньше, чем расстояние от датчика до входящего объекта (d

Задача: каждый раз, когда d

Кроме того, изображение с камеры требует много времени для загрузки. Как я могу сделать это быстрее?

Любая помощь будет высоко ценится. Спасибо

...