Я хочу прочитать видеофайл с диска, проанализировать его покадрово, используя TensorFlow Object Detection API (нарисовать ограничивающие прямоугольники на обнаруженных объектах) и сохранить вывод с ограничивающими прямоугольниками как новое видеофайл.
Я прочитал, что , как правило, рекомендуется разделять проблемные области, используя одну службу на контейнер ( Docker docs ), поэтому я создал два Dockerконтейнеры со следующими задачами:
- Контейнер 1 основан на
python:3.7
и имеет скомпилированную OpenCV 4.0.1.Предполагается прочитать видеофайл, преобразовать его в пустой массив и передать в контейнер 2 для анализа.Он должен дождаться результата и затем записать его в видеофайл. - Контейнер 2 основан на
tensorflow/tensorflow:1.13.1-gpu-py3
и имеет установленный API обнаружения объектов.При запуске модель загружается в память.Он должен получить массив пустых данных из контейнера 1, проанализировать его и вернуть.
Как Контейнер 1 может передать массив пустых данных в контейнер 2, дождаться результата анализа, записать его в файл и захватитьдругой кадр и т. д .?
Примечание. Я знаю, как это сделать, используя один контейнер с TensorFlow и OpenCV, но, похоже, это не «путь Docker» ...
cap = cv2.VideoCapture('/path/to/video.mp4')
output = cv2.VideoWriter('path/to/output.mp4', cv2.VideoWriter_fourcc('H', '2', '6', '4'), frame_rate, (frame_width, frame_height))
def analyze(frame):
# TensorFlow doing its magic here...
return frame
while True:
ret, frame = cap.read()
if ret:
frame_bboxes = analyze(frame)
output.write(frame_bboxes)