docstr: Parameters
  ----------
  preprocessed_data : SArray
  
  Returns
  -------
  numpy array containing the deep features
docstr_tok: ["Parameters","--","--","--","--","--","preprocessed_data",":","SArray","Returns","--","--","--","-","numpy","array","containing","the","deep","features"]
code: def _extract_features(self, preprocessed_data, verbose=True):
      """
      Parameters
      ----------
      preprocessed_data : SArray
  
      Returns
      -------
      numpy array containing the deep features
      """
      last_progress_update = _time.time()
      progress_header_printed = False
  
      deep_features = _tc.SArrayBuilder(_np.ndarray)
  
      if _mac_ver() < (10, 14):
          # Use TensorFlow/Keras
  
          # Transpose data from channel first to channel last
          preprocessed_data = _np.transpose(
              preprocessed_data, (0, 2, 3, 1)
          )
  
          for i, cur_example in enumerate(preprocessed_data):
              y = self.vggish_model.predict([[cur_example]])
              deep_features.append(y[0])
  
              # If `verbose` is set, print an progress update about every 20s
              if verbose and _time.time() - last_progress_update >= 20:
                  if not progress_header_printed:
                      print("Extracting deep features -")
                      progress_header_printed = True
                  print(
                      "Extracted {} of {}".format(
                          i, len(preprocessed_data)
                      )
                  )
                  last_progress_update = _time.time()
          if progress_header_printed:
              print(
                  "Extracted {} of {}\n".format(
                      len(preprocessed_data), len(preprocessed_data)
                  )
              )
  
      else:
          # Use Core ML
  
          for i, cur_example in enumerate(preprocessed_data):
              for cur_frame in cur_example:
                  x = {"input1": _np.asarray([cur_frame])}
                  y = self.vggish_model.predict(x)
                  deep_features.append(y["output1"])
  
              # If `verbose` is set, print an progress update about every 20s
              if verbose and _time.time() - last_progress_update >= 20:
                  if not progress_header_printed:
                      print("Extracting deep features -")
                      progress_header_printed = True
                  print(
                      "Extracted {} of {}".format(
                          i, len(preprocessed_data)
                      )
                  )
                  last_progress_update = _time.time()
          if progress_header_printed:
              print(
                  "Extracted {} of {}\n".format(
                      len(preprocessed_data), len(preprocessed_data)
                  )
              )
  
      return deep_features.close()
  
file_path: turicreate/src/python/turicreate/toolkits/sound_classifier/_audio_feature_extractor.py
imports: import time
  import numpy
  import turicreate.toolkits._tf_utils
  import turicreate
  from .vggish_params import SAMPLE_RATE
  from .._internal_utils import _mac_ver
  from .._pre_trained_models import VGGish
  from turicreate._deps.minimal_package import _minimal_package_import_check
label_desc: Use image node_id 4 for calling the VGGishFeatureExtractor obj's underlying member method code with example usage: obj._extract_features(preprocessed_data, verbose) and returns: deep_features