From 1dc26c88ac8f3062dfdf542b27fbf64aa98a4dd9 Mon Sep 17 00:00:00 2001 From: Allen Day Date: Sun, 3 May 2020 03:35:19 +0000 Subject: [PATCH 1/5] add http: scheme to urls --- mediapipe/docs/youtube_8m.md | 4 ++-- mediapipe/examples/desktop/youtube8m/README.md | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/mediapipe/docs/youtube_8m.md b/mediapipe/docs/youtube_8m.md index 3b42aca30..a1f657fe5 100644 --- a/mediapipe/docs/youtube_8m.md +++ b/mediapipe/docs/youtube_8m.md @@ -120,7 +120,7 @@ the inference for both local videos and the dataset to local. ```bash - curl -o /tmp/mediapipe/yt8m_baseline_saved_model.tar.gz data.yt8m.org/models/baseline/saved_model.tar.gz + curl -o /tmp/mediapipe/yt8m_baseline_saved_model.tar.gz http://data.yt8m.org/models/baseline/saved_model.tar.gz tar -xvf /tmp/mediapipe/yt8m_baseline_saved_model.tar.gz -C /tmp/mediapipe ``` @@ -156,7 +156,7 @@ the inference for both local videos and the dataset to local. ```bash - curl -o /tmp/mediapipe/yt8m_baseline_saved_model.tar.gz data.yt8m.org/models/baseline/saved_model.tar.gz + curl -o /tmp/mediapipe/yt8m_baseline_saved_model.tar.gz http://data.yt8m.org/models/baseline/saved_model.tar.gz tar -xvf /tmp/mediapipe/yt8m_baseline_saved_model.tar.gz -C /tmp/mediapipe ``` diff --git a/mediapipe/examples/desktop/youtube8m/README.md b/mediapipe/examples/desktop/youtube8m/README.md index 775acc9ff..57a606fd6 100644 --- a/mediapipe/examples/desktop/youtube8m/README.md +++ b/mediapipe/examples/desktop/youtube8m/README.md @@ -81,7 +81,7 @@ 2. Copy the baseline model [(model card)](https://drive.google.com/file/d/1xTCi9-Nm9dt2KIk8WR0dDFrIssWawyXy/view) to local. ```bash - curl -o /tmp/mediapipe/yt8m_baseline_saved_model.tar.gz data.yt8m.org/models/baseline/saved_model.tar.gz + curl -o /tmp/mediapipe/yt8m_baseline_saved_model.tar.gz http://data.yt8m.org/models/baseline/saved_model.tar.gz tar -xvf /tmp/mediapipe/yt8m_baseline_saved_model.tar.gz -C /tmp/mediapipe ``` @@ -107,7 +107,7 @@ ```bash - curl -o /tmp/mediapipe/yt8m_baseline_saved_model.tar.gz data.yt8m.org/models/baseline/saved_model.tar.gz + curl -o /tmp/mediapipe/yt8m_baseline_saved_model.tar.gz http://data.yt8m.org/models/baseline/saved_model.tar.gz tar -xvf /tmp/mediapipe/yt8m_baseline_saved_model.tar.gz -C /tmp/mediapipe ``` @@ -136,7 +136,7 @@ 2. Copy the baseline model [(model card)](https://drive.google.com/file/d/1xTCi9-Nm9dt2KIk8WR0dDFrIssWawyXy/view) to local. ```bash - curl -o /tmp/mediapipe/yt8m_baseline_saved_model.tar.gz data.yt8m.org/models/baseline/saved_model.tar.gz + curl -o /tmp/mediapipe/yt8m_baseline_saved_model.tar.gz http://data.yt8m.org/models/baseline/saved_model.tar.gz tar -xvf /tmp/mediapipe/yt8m_baseline_saved_model.tar.gz -C /tmp/mediapipe ``` From 671e886ae15de77441ff32fc8f273243ee61e0de Mon Sep 17 00:00:00 2001 From: Allen Day Date: Sun, 3 May 2020 03:36:16 +0000 Subject: [PATCH 2/5] add inline hints for mkv output option for broken opencv2 --- .../object_detection_desktop_tflite_graph.pbtxt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mediapipe/graphs/object_detection/object_detection_desktop_tflite_graph.pbtxt b/mediapipe/graphs/object_detection/object_detection_desktop_tflite_graph.pbtxt index 15aa2cdd2..2c728ac0a 100644 --- a/mediapipe/graphs/object_detection/object_detection_desktop_tflite_graph.pbtxt +++ b/mediapipe/graphs/object_detection/object_detection_desktop_tflite_graph.pbtxt @@ -173,7 +173,9 @@ node { input_side_packet: "OUTPUT_FILE_PATH:output_video_path" node_options: { [type.googleapis.com/mediapipe.OpenCvVideoEncoderCalculatorOptions]: { +#MPEG codec: "avc1" +#mkv video_format: "mp4" } } From be13429c6ed574c34ea463836b08fe467c399461 Mon Sep 17 00:00:00 2001 From: Allen Day Date: Sun, 3 May 2020 13:47:59 +0000 Subject: [PATCH 3/5] namespace update --- mediapipe/examples/desktop/media_sequence/demo_dataset.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mediapipe/examples/desktop/media_sequence/demo_dataset.py b/mediapipe/examples/desktop/media_sequence/demo_dataset.py index e05568cb7..93ea56e96 100644 --- a/mediapipe/examples/desktop/media_sequence/demo_dataset.py +++ b/mediapipe/examples/desktop/media_sequence/demo_dataset.py @@ -157,7 +157,7 @@ class DemoDataset(object): all_shards_dataset = tf.data.Dataset.from_tensor_slices(all_shards) cycle_length = min(16, len(all_shards)) dataset = all_shards_dataset.apply( - tf.contrib.data.parallel_interleave( + tf.data.experimental.parallel_interleave( tf.data.TFRecordDataset, cycle_length=cycle_length, block_length=1, From b53a237560d22ba85dc1506a35fae1172c9cc25f Mon Sep 17 00:00:00 2001 From: Allen Day Date: Sun, 3 May 2020 13:51:20 +0000 Subject: [PATCH 4/5] move example code to source file for ease of runnability --- mediapipe/docs/media_sequence.md | 20 +------------------ .../media_sequence/read_demo_dataset.py | 15 ++++++++++++++ 2 files changed, 16 insertions(+), 19 deletions(-) create mode 100644 mediapipe/examples/desktop/media_sequence/read_demo_dataset.py diff --git a/mediapipe/docs/media_sequence.md b/mediapipe/docs/media_sequence.md index e248aa5e4..999115e78 100644 --- a/mediapipe/docs/media_sequence.md +++ b/mediapipe/docs/media_sequence.md @@ -78,25 +78,7 @@ process new data sets, in the documentation of PYTHONPATH="${PYTHONPATH};"+`pwd` ``` - and then you can import the data set in Python. - - ```python - import tensorflow as tf - from mediapipe.examples.desktop.media_sequence.demo_dataset import DemoDataset - demo_data_path = '/tmp/demo_data/' - with tf.Graph().as_default(): - d = DemoDataset(demo_data_path) - dataset = d.as_dataset('test') - # implement additional processing and batching here - dataset_output = dataset.make_one_shot_iterator().get_next() - images = dataset_output['images'] - labels = dataset_output['labels'] - - with tf.Session() as sess: - images_, labels_ = sess.run([images, labels]) - print('The shape of images_ is %s' % str(images_.shape)) - print('The shape of labels_ is %s' % str(labels_.shape)) - ``` + and then you can import the data set in Python using [read_demo_dataset.py](mediapipe/examples/desktop/media_sequence/read_demo_dataset.py) ### Preparing a practical data set As an example of processing a practical data set, a similar set of commands will diff --git a/mediapipe/examples/desktop/media_sequence/read_demo_dataset.py b/mediapipe/examples/desktop/media_sequence/read_demo_dataset.py new file mode 100644 index 000000000..a195571b1 --- /dev/null +++ b/mediapipe/examples/desktop/media_sequence/read_demo_dataset.py @@ -0,0 +1,15 @@ +import tensorflow as tf +from mediapipe.examples.desktop.media_sequence.demo_dataset import DemoDataset +demo_data_path = '/tmp/demo_data/' +with tf.Graph().as_default(): + d = DemoDataset(demo_data_path) + dataset = d.as_dataset('test') + # implement additional processing and batching here + dataset_output = dataset.make_one_shot_iterator().get_next() + images = dataset_output['images'] + labels = dataset_output['labels'] + + with tf.Session() as sess: + images_, labels_ = sess.run([images, labels]) + print('The shape of images_ is %s' % str(images_.shape)) + print('The shape of labels_ is %s' % str(labels_.shape)) From c3bd5323999fe1ce5251db73b46f781be430f46a Mon Sep 17 00:00:00 2001 From: Allen Day Date: Sun, 3 May 2020 13:51:43 +0000 Subject: [PATCH 5/5] compile and run all examples --- Dockerfile | 113 +++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 105 insertions(+), 8 deletions(-) diff --git a/Dockerfile b/Dockerfile index 9bb2ad1e8..ea2cae420 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -FROM ubuntu:latest +FROM ubuntu:18.04 MAINTAINER @@ -25,12 +25,13 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential \ ca-certificates \ curl \ + ffmpeg \ git \ wget \ unzip \ - python \ - python-pip \ + python3-dev \ python3-pip \ + python3-opencv \ libopencv-core-dev \ libopencv-highgui-dev \ libopencv-imgproc-dev \ @@ -43,15 +44,21 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ apt-get clean && \ rm -rf /var/lib/apt/lists/* -RUN pip install --upgrade setuptools -RUN pip install future -RUN pip3 install six +RUN wget -O /mediapipe/BBB.mp4 https://download.blender.org/peach/bigbuckbunny_movies/BigBuckBunny_320x180.mp4 + +RUN pip3 install --upgrade setuptools +RUN pip3 install future +RUN pip3 install six==1.14.0 +RUN pip3 install wheel +RUN pip3 install tf_slim +RUN pip3 install tensorflow==1.14.0 + +RUN ln -s /usr/bin/python3 /usr/bin/python # Install bazel ARG BAZEL_VERSION=2.0.0 RUN mkdir /bazel && \ - wget --no-check-certificate -O /bazel/installer.sh "https://github.com/bazelbuild/bazel/releases/download/${BAZEL_VERSION}/b\ -azel-${BAZEL_VERSION}-installer-linux-x86_64.sh" && \ + wget --no-check-certificate -O /bazel/installer.sh "https://github.com/bazelbuild/bazel/releases/download/${BAZEL_VERSION}/bazel-${BAZEL_VERSION}-installer-linux-x86_64.sh" && \ wget --no-check-certificate -O /bazel/LICENSE.txt "https://raw.githubusercontent.com/bazelbuild/bazel/master/LICENSE" && \ chmod +x /bazel/installer.sh && \ /bazel/installer.sh && \ @@ -59,5 +66,95 @@ azel-${BAZEL_VERSION}-installer-linux-x86_64.sh" && \ COPY . /mediapipe/ +#### +#### BUILD +#### + +#object detection TF +RUN bazel build -c opt \ + --define MEDIAPIPE_DISABLE_GPU=1 \ + --define no_aws_support=true \ + --linkopt=-s \ + mediapipe/examples/desktop/object_detection:object_detection_tensorflow +#object detection TFLite +RUN bazel build -c opt \ + --define MEDIAPIPE_DISABLE_GPU=1 \ + mediapipe/examples/desktop/object_detection:object_detection_tflite +#media sequence +RUN bazel build -c opt \ + --define MEDIAPIPE_DISABLE_GPU=1 \ + mediapipe/examples/desktop/media_sequence:media_sequence_demo +#autoflip +RUN bazel build -c opt \ + --define MEDIAPIPE_DISABLE_GPU=1 \ + mediapipe/examples/desktop/autoflip:run_autoflip + +#yt8m +RUN mkdir -p /tmp/mediapipe +WORKDIR /tmp/mediapipe +RUN curl -O http://data.yt8m.org/pca_matrix_data/inception3_mean_matrix_data.pb +RUN curl -O http://data.yt8m.org/pca_matrix_data/inception3_projection_matrix_data.pb +RUN curl -O http://data.yt8m.org/pca_matrix_data/vggish_mean_matrix_data.pb +RUN curl -O http://data.yt8m.org/pca_matrix_data/vggish_projection_matrix_data.pb + +RUN curl -O http://download.tensorflow.org/models/image/imagenet/inception-2015-12-05.tgz +RUN tar -xzf inception-2015-12-05.tgz +RUN curl -O http://data.yt8m.org/models/baseline/saved_model.tar.gz +RUN tar -xf saved_model.tar.gz + +WORKDIR /mediapipe +RUN bazel build -c opt \ + --define MEDIAPIPE_DISABLE_GPU=1 \ + --linkopt=-s \ + --define no_aws_support=true \ + mediapipe/examples/desktop/youtube8m:extract_yt8m_features +RUN bazel build -c opt \ + --define='MEDIAPIPE_DISABLE_GPU=1' \ + --linkopt=-s \ + mediapipe/examples/desktop/youtube8m:model_inference +RUN bazel build -c opt \ + --define='MEDIAPIPE_DISABLE_GPU=1' \ + --linkopt=-s \ + mediapipe/examples/desktop/youtube8m:model_inference + + +#### +#### RUN +#### + +#object detection TF +RUN GLOG_logtostderr=1 bazel-bin/mediapipe/examples/desktop/object_detection/object_detection_tensorflow \ + --calculator_graph_config_file=mediapipe/graphs/object_detection/object_detection_desktop_tensorflow_graph.pbtxt \ + --input_side_packets=input_video_path=mediapipe/examples/desktop/object_detection/test_video.mp4,output_video_path=/tmp/output-tensorflow.mp4 +#object detection TFLite +RUN GLOG_logtostderr=1 bazel-bin/mediapipe/examples/desktop/object_detection/object_detection_tflite \ + --calculator_graph_config_file=mediapipe/graphs/object_detection/object_detection_desktop_tflite_graph.pbtxt \ + --input_side_packets=input_video_path=mediapipe/examples/desktop/object_detection/test_video.mp4,output_video_path=/tmp/output-tflite.mp4 + +#media sequence +#TODO add python +RUN python -m mediapipe.examples.desktop.media_sequence.demo_dataset \ + --path_to_demo_data=/tmp/demo_data/ \ + --path_to_mediapipe_binary=bazel-bin/mediapipe/examples/desktop/media_sequence/media_sequence_demo \ + --path_to_graph_directory=mediapipe/graphs/media_sequence/ +RUN PYTHONPATH=$PYTHONPATH:/mediapipe python ./mediapipe/examples/desktop/media_sequence/read_demo_dataset.py + +#autoflip +RUN GLOG_logtostderr=1 bazel-bin/mediapipe/examples/desktop/autoflip/run_autoflip \ + --calculator_graph_config_file=mediapipe/examples/desktop/autoflip/autoflip_graph.pbtxt \ + --input_side_packets=input_video_path=mediapipe/examples/desktop/object_detection/test_video.mp4,output_video_path=/tmp/output-autoflip.mp4,aspect_ratio=1:1 + +#yt8m +RUN python3 -m mediapipe.examples.desktop.youtube8m.generate_vggish_frozen_graph +RUN python3 -m mediapipe.examples.desktop.youtube8m.generate_input_sequence_example \ + --path_to_input_video=/mediapipe/BBB.mp4 \ + --clip_end_time_sec=120 + +RUN GLOG_logtostderr=1 bazel-bin/mediapipe/examples/desktop/youtube8m/extract_yt8m_features \ + --calculator_graph_config_file=mediapipe/graphs/youtube8m/feature_extraction.pbtxt \ + --input_side_packets=input_sequence_example=/tmp/mediapipe/metadata.pb \ + --output_side_packets=output_sequence_example=/tmp/mediapipe/features.pb + # If we want the docker image to contain the pre-built object_detection_offline_demo binary, do the following # RUN bazel build -c opt --define MEDIAPIPE_DISABLE_GPU=1 mediapipe/examples/desktop/demo:object_detection_tensorflow_demo +