public void changeRecognizer(RecognizerType recognizerType) {
   if (isRecognizerActive) {
     changeRecognizerStatus();
     recognizerManager.changeRecognizer(RecognizerFactory.getRecognizer(recognizerType));
     changeRecognizerStatus();
   } else {
     recognizerManager.changeRecognizer(RecognizerFactory.getRecognizer(recognizerType));
   }
 }
  public Mat detect(Mat capturedImage) {

    List<DetectedElement> detectedElements;

    // loops over all the activated detectors
    for (ElementsDetector detector : detectors.values()) {

      // gets the elements detected by this detector
      detectedElements = detector.detectElements(capturedImage);
      for (DetectedElement detectedElement : detectedElements) {

        // gets the image transformed by the detector
        capturedImage = detectedElement.getTransformedImage();

        // if has to recognize a face
        if (isRecognizerActive
            && detectedElement != null
            && detectedElement.getDetectedImageElement() != null) {

          assert (detectors.size() == 1
              && detectors.containsKey(Constants.DEFAULT_FACE_CLASSIFIER));

          // recognizes the face
          RecognizedFace recognizedFace =
              recognizerManager.recognizeFace(detectedElement.getDetectedImageElement());
          String name;
          if (recognizedFace == Constants.UNKNOWN_FACE) {
            name = recognizedFace.getName();
          } else {
            int percentage =
                (int)
                    (100
                        * (Constants.FACE_RECOGNITION_THRESHOLD - recognizedFace.getConfidence())
                        / Constants.FACE_RECOGNITION_THRESHOLD);
            name = recognizedFace.getName() + "  [" + percentage + "%]";
          }

          // writes the name of the recognized person (sort of embossed)
          Point position = detectedElement.getPosition();
          position.y -= 11;
          position.x -= 1;
          Imgproc.putText(
              capturedImage,
              name,
              position,
              Core.FONT_HERSHEY_TRIPLEX,
              Constants.RECOGNIZED_NAME_FONT_SIZE,
              Constants.BLACK);

          position.y += 1;
          position.x += 1;
          Imgproc.putText(
              capturedImage,
              name,
              position,
              Core.FONT_HERSHEY_TRIPLEX,
              Constants.RECOGNIZED_NAME_FONT_SIZE,
              colors[2]);
        }
      }
    }

    return capturedImage;
  }