text: # pylint: skip-file
  
  # 
  # All modification made by Intel Corporation: Copyright (c) 2016 Intel Corporation
  # 
  # All contributions by the University of California:
  # Copyright (c) 2014, 2015, The Regents of the University of California (Regents)
  # All rights reserved.
  # 
  # All other contributions:
  # Copyright (c) 2014, 2015, the respective contributors
  # All rights reserved.
  # For the list of contributors go to https://github.com/BVLC/caffe/blob/master/CONTRIBUTORS.md
  # 
  # 
  # Redistribution and use in source and binary forms, with or without
  # modification, are permitted provided that the following conditions are met:
  # 
  #     * Redistributions of source code must retain the above copyright notice,
  #       this list of conditions and the following disclaimer.
  #     * Redistributions in binary form must reproduce the above copyright
  #       notice, this list of conditions and the following disclaimer in the
  #       documentation and/or other materials provided with the distribution.
  #     * Neither the name of Intel Corporation nor the names of its contributors
  #       may be used to endorse or promote products derived from this software
  #       without specific prior written permission.
  # 
  # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
  # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  #
  
  """
  This script handles the skimage exif problem.
  """
  
  from PIL import Image
  import numpy as np
  
  ORIENTATIONS = {   # used in apply_orientation
      2: (Image.FLIP_LEFT_RIGHT,),
      3: (Image.ROTATE_180,),
      4: (Image.FLIP_TOP_BOTTOM,),
      5: (Image.FLIP_LEFT_RIGHT, Image.ROTATE_90),
      6: (Image.ROTATE_270,),
      7: (Image.FLIP_LEFT_RIGHT, Image.ROTATE_270),
      8: (Image.ROTATE_90,)
  }
  
  
  def open_oriented_im(im_path):
      im = Image.open(im_path)
      if hasattr(im, '_getexif'):
          exif = im._getexif()
          if exif is not None and 274 in exif:
              orientation = exif[274]
              im = apply_orientation(im, orientation)
      img = np.asarray(im).astype(np.float32) / 255.
      if img.ndim == 2:
          img = img[:, :, np.newaxis]
          img = np.tile(img, (1, 1, 3))
      elif img.shape[2] == 4:
          img = img[:, :, :3]
      return img
  
  
  def apply_orientation(im, orientation):
      if orientation in ORIENTATIONS:
          for method in ORIENTATIONS[orientation]:
              im = im.transpose(method)
      return im
  