Как мне получить последний выводимый файл из Opencv

#python #python-3.x #function #loops #opencv

#python #python-3.x #функция #циклы #opencv

Вопрос:

Каждые 10 секунд я создаю новое изображение с помощью своей igmcap() функции и сохраняю его в папке direction Captures . Я хочу, чтобы моя identify() функция выполнялась на последнем захваченном изображении. Это лучший способ сделать это, чтобы обернуть все функции внутри одного цикла?

Код Python:

 def imgcap():
    cap = cv2.VideoCapture(0)
    framerate = cap.get(10)
    x=1

    while(True):
        # Capture frame-by-frame
        ret, frame = cap.read()
        if ret:
            # Our operations on the frame come here

            filename = 'Captures\capture'    str(int(x))   ".png"
            x=x 1
            cv2.imshow("frame", frame)
            cv2.imwrite(filename, frame)
            time.sleep(5)
            if cv2.waitKey(1) amp; 0xFF == ord('q'):
                break
        else:
            print("Ret False")

    # When everything done, release the capture
    cap.release()
    cv2.destroyAllWindows()

imgcap()


def identify(path):
    cmd = f"darknet.exe detector test cfg/obj.data cfg/yolov4_test.cfg custom-yolov4-detector_best.weights -ext_output -out result.json {path}"
    # cmd = f"darknet.exe detector test cfg/obj.data cfg/yolov4-tiny-custom.cfg custom-yolov4-tiny-detector_best.weights -ext_output -out result.json {path}"
    
    os.chdir(r'C:Yolo_v4darknetbuilddarknetx64')    
    p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
    out = p.stdout.read()
    print(out)

identify(r'C:\Yolo_v4\darknet\build\darknet\x64\Captures\SOMETHING_GOES_HERE')
 

Ответ №1:

Если вы хотите сохранить независимость своих функций, imgcap() вы можете вернуть фактический путь к записи, чтобы его можно было использовать для последующего анализа:

 def imgcap():
    # All your code goes here
    ...
    # When everything done, release the capture
    cap.release()
    cv2.destroyAllWindows()

    return filename
 

Если вы всегда собираетесь запускать identify() каждый новый захваченный кадр, имеет смысл сделать их частью одного и того же цикла после сохранения кадра.