class_docstr: Allows to perform MTCNN Detection ->
      a) Detection of faces (with the confidence probability)
      b) Detection of keypoints (left eye, right eye, nose, mouth_left, mouth_right)
class_docstr_tok: ["Allows","to","perform","MTCNN","Detection","-",">","a",")","Detection","of","faces","(","with","the","confidence","probability",")","b",")","Detection","of","keypoints","(","left","eye",",","right","eye",",","nose",",","mouth_left",",","mouth_right",")"]
docstr: Detects bounding boxes from the specified image.
  :param img: image to process
  :return: list containing all the bounding boxes detected with their keypoints.
docstr_tok: ["Detects","bounding","boxes","from","the","specified","image",".",":","param","img",":","image","to","process",":","return",":","list","containing","all","the","bounding","boxes","detected","with","their","keypoints","."]
code: def detect_faces(self, img) -> list:
      """
      Detects bounding boxes from the specified image.
      :param img: image to process
      :return: list containing all the bounding boxes detected with their keypoints.
      """
      if img is None or not hasattr(img, "shape"):
          raise InvalidImage("Image not valid.")
  
      height, width, _ = img.shape
      stage_status = StageStatus(width=width, height=height)
  
      m = 12 / self._min_face_size
      min_layer = np.amin([height, width]) * m
  
      scales = self.__compute_scale_pyramid(m, min_layer)
  
      stages = [self.__stage1, self.__stage2, self.__stage3]
      result = [scales, stage_status]
  
      # We pipe here each of the stages
      for stage in stages:
          result = stage(img, result[0], result[1])
  
      [total_boxes, points] = result
  
      bounding_boxes = []
  
      for bounding_box, keypoints in zip(total_boxes, points.T):
          x = max(0, int(bounding_box[0]))
          y = max(0, int(bounding_box[1]))
          width = int(bounding_box[2] - x)
          height = int(bounding_box[3] - y)
          bounding_boxes.append(
              {
                  "box": [x, y, width, height],
                  "confidence": bounding_box[-1],
                  "keypoints": {
                      "left_eye": (
                          int(keypoints[0]),
                          int(keypoints[5]),
                      ),
                      "right_eye": (
                          int(keypoints[1]),
                          int(keypoints[6]),
                      ),
                      "nose": (int(keypoints[2]), int(keypoints[7])),
                      "mouth_left": (
                          int(keypoints[3]),
                          int(keypoints[8]),
                      ),
                      "mouth_right": (
                          int(keypoints[4]),
                          int(keypoints[9]),
                      ),
                  },
              }
          )
  
      return bounding_boxes
  
imports: import cv2
  import numpy
  import pkg_resources
  from mtcnn.exceptions import InvalidImage
  from mtcnn.network.factory import NetworkFactory
label_desc: Use image node_id 11 for calling the MTCNN obj's underlying member method code with example usage: obj.detect_faces(img) and returns: bounding_boxes