          """ interpret the shapes using our shape model
              (project and reconstruct) """
          landmarks_norm = self.normalized["landmarks"]
          # convert to matrix form
          landmarks_norm_table = np.reshape(landmarks_norm,
                                            [68 * 2, landmarks_norm.shape[2]]).T
          # project onto shapes model and reconstruct
          landmarks_norm_table_rec = self.shapes_model.inverse_transform(
              self.shapes_model.transform(landmarks_norm_table))
          # convert back to shapes (numKeypoint, num_dims, numFrames)
          landmarks_norm_rec = np.reshape(landmarks_norm_table_rec.T,
 
</s> remove         return self.normalized_to_original(landmarks_norm_rec,
                                           self.normalized["scale_factors"],
                                           self.normalized["mean_coords"])
 </s> add         retval = self.normalized_to_original(landmarks_norm_rec,
                                             self.normalized["scale_factors"],
                                             self.normalized["mean_coords"])

        logger.debug("Spatially Filtered: %s", retval)
        return retval </s> remove         normalized_shapes_tbl = np.reshape(landmarks_norm,
                                           [68*2, landmarks_norm.shape[2]]).T
        self.shapes_model = decomposition.PCA(
            n_components=num_components,
            whiten=True,
            random_state=1).fit(normalized_shapes_tbl)
 </s> add         normalized_shapes_tbl = np.reshape(landmarks_norm, [68*2, landmarks_norm.shape[2]]).T
        self.shapes_model = decomposition.PCA(n_components=num_components,
                                              whiten=True,
                                              random_state=1).fit(normalized_shapes_tbl)
        landmarks_norm_table = np.reshape(landmarks_norm, [68 * 2, landmarks_norm.shape[2]]).T
          """ interpret the shapes using our shape model
              (project and reconstruct) """
          landmarks_norm = self.normalized["landmarks"]
          # convert to matrix form
        landmarks_norm_table = np.reshape(landmarks_norm, [68 * 2, landmarks_norm.shape[2]]).T
        landmarks_norm_table = np.reshape(landmarks_norm, [68 * 2, landmarks_norm.shape[2]]).T
          # project onto shapes model and reconstruct
          landmarks_norm_table_rec = self.shapes_model.inverse_transform(
              self.shapes_model.transform(landmarks_norm_table))
          # convert back to shapes (numKeypoint, num_dims, numFrames)
          landmarks_norm_rec = np.reshape(landmarks_norm_table_rec.T,
keep keep keep keep replace replace keep keep keep keep keep
 Add Face Hashes to Alignments (#550)

* Convert main scripts to use face hashes

* Alignment tool: Use hashes, add logging, add face rename function

* More logging. Update Manual tool to work with hashing 
tools/lib_alignments/jobs.py