#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()
каждый новый захваченный кадр, имеет смысл сделать их частью одного и того же цикла после сохранения кадра.