          text_sizes = [cv2.getTextSize(self.faces["filenames"][idx],
                                        font,
                                        font_scale,
                                        1)[0]
                        for idx in range(self.total_columns)]
          # Get X and Y co-ords for each text item
          text_y = int((height + text_sizes[0][1]) / 2)
          text_x = [int((self.size - text_sizes[idx][0]) / 2) + self.size * idx
                    for idx in range(self.total_columns)]
          logger.debug("filenames: %s, text_sizes: %s, text_x: %s, text_y: %s",
                       self.faces["filenames"], text_sizes, text_x, text_y)
 
</s> remove         text_x = [int((self.size - text_sizes[idx][0]) / 2) + self.size * idx
                  for idx in range(self.total_columns)]
 </s> add         text_x = [int((self._size - text_sizes[idx][0]) / 2) + self._size * idx
                  for idx in range(self._total_columns)] </s> remove                      self.faces["filenames"], text_sizes, text_x, text_y)
        header_box = np.ones((height, self.size * self.total_columns, 3), np.uint8) * 255
        for idx, text in enumerate(self.faces["filenames"]):
 </s> add                      self._faces["filenames"], text_sizes, text_x, text_y)
        header_box = np.ones((height, self._size * self._total_columns, 3), np.uint8) * 255
        for idx, text in enumerate(self._faces["filenames"]): </s> remove         text_sizes = [cv2.getTextSize(self.faces["filenames"][idx],
 </s> add         text_sizes = [cv2.getTextSize(self._faces["filenames"][idx], </s> remove     def header_text(self):
        """ Create header text for output image """
        font_scale = self.size / 640
        height = self.size // 8
 </s> add     def _header_text(self):
        """ Create the header text displaying the frame name for each preview column.

        Returns
        -------
        :class:`numpy.ndarray`
            The header row of the preview image containing the frame names for each column
        """
        font_scale = self._size / 640
        height = self._size // 8 </s> remove             while idx < self.sample_size:
                logger.debug("Predicting face %s of %s", idx + 1, self.sample_size)
                items = self.predictor.out_queue.get()
 </s> add             while idx < self._sample_size:
                logger.debug("Predicting face %s of %s", idx + 1, self._sample_size)
                items = self._predictor.out_queue.get()
                      for idx in range(self._total_columns)]
        # Get X and Y co-ordinates for each text item
          text_sizes = [cv2.getTextSize(self.faces["filenames"][idx],
                                        font,
                                        font_scale,
                                        1)[0]
                      for idx in range(self._total_columns)]
        # Get X and Y co-ordinates for each text item
                      for idx in range(self._total_columns)]
        # Get X and Y co-ordinates for each text item
          text_y = int((height + text_sizes[0][1]) / 2)
          text_x = [int((self.size - text_sizes[idx][0]) / 2) + self.size * idx
                    for idx in range(self.total_columns)]
          logger.debug("filenames: %s, text_sizes: %s, text_x: %s, text_y: %s",
                       self.faces["filenames"], text_sizes, text_x, text_y)
keep keep keep keep replace replace keep keep keep keep keep
 Smart Masks to Convert (#957)

- scripts.convert - Use Smart Masks for Convert
    * Make on-the-fly conversion an explicit option

- Move BlurMask to lib.faces_detect

- tools.preview - Fix for smart masks
    * Subclass from tk.Tk
    * Options to lib.gui.control_helper
    *variable cleanup

- lib.logger - Demote more tensorflow deprecation messages

- Documentation:
    * lib.faces_detect.BlurMask
    * plugins.convert.mask
    * lib.convert
    * scripts.convert
    * scripts.fsmedia
    * tools.preview 
tools/preview.py