text: # Copyright 2016 The TensorFlow Authors All Rights Reserved.
  #
  # Licensed under the Apache License, Version 2.0 (the "License");
  # you may not use this file except in compliance with the License.
  # You may obtain a copy of the License at
  #
  #     http://www.apache.org/licenses/LICENSE-2.0
  #
  # Unless required by applicable law or agreed to in writing, software
  # distributed under the License is distributed on an "AS IS" BASIS,
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  # See the License for the specific language governing permissions and
  # limitations under the License.
  # ==============================================================================
  
  """Generate examples of two objects moving in different directions."""
  import random
  import sys
  
  import numpy as np
  from six.moves import xrange
  import tensorflow as tf
  
  
  tf.flags.DEFINE_string('out_file', '',
                         'Output file for the tfrecords.')
  
  
  def _add_object(obj_type, image, image2, xpos, ypos):
    """Add a moving obj to two consecutive images."""
    obj_size = random.randint(8, 10)
    channel = random.randint(0, 2)
    move = random.randint(6, 10)
  
    obj = np.zeros([obj_size, obj_size, 3])
    if obj_type == 'rectangle':
      xpos2 = xpos + move
      ypos2 = ypos
      for i in xrange(obj_size):
        obj[i, 0:i+1, channel] = [1.0 for _ in xrange(i+1)]
    elif obj_type == 'square':
      xpos2 = xpos
      ypos2 = ypos + move
      obj[:, :, channel] = 1.0
  
    for x in xrange(obj_size):
      for y in xrange(obj_size):
        if obj[x, y, channel] == 1.0:
          image[xpos+x, ypos+y, channel] = 1.0
          image2[xpos2+x, ypos2+y, channel] = 1.0
  
  
  def _images_to_example(image, image2):
    """Convert two consecutive images to SequenceExample."""
    example = tf.SequenceExample()
    feature_list = example.feature_lists.feature_list['moving_objs']
    feature = feature_list.feature.add()
    feature.float_list.value.extend(np.reshape(image, [-1]).tolist())
    feature = feature_list.feature.add()
    feature.float_list.value.extend(np.reshape(image2, [-1]).tolist())
    return example
  
  
  def generate_input():
    """Generate tfrecords."""
    writer = tf.python_io.TFRecordWriter(tf.flags.FLAGS.out_file)
    writer2 = tf.python_io.TFRecordWriter(tf.flags.FLAGS.out_file + '_test')
  
    examples = []
    for xpos in xrange(0, 40, 3):
      for ypos in xrange(0, 40, 3):
        for xpos2 in xrange(0, 40, 3):
          for ypos2 in xrange(0, 40, 3):
            image = np.zeros([64, 64, 3])
            image2 = np.zeros([64, 64, 3])
            _add_object('rectangle', image, image2, xpos, ypos)
            _add_object('square', image, image2, xpos2, ypos2)
            examples.append(_images_to_example(image, image2))
  
    sys.stderr.write('Finish generating examples.\n')
    random.shuffle(examples)
    for count, ex in enumerate(examples):
      if count % 10 == 0:
        writer2.write(ex.SerializeToString())
      else:
        writer.write(ex.SerializeToString())
  
  def main(_):
    generate_input()
  
  
  if __name__ == '__main__':
    tf.app.run()
  