Beispiel #1
0
/* Overlays bounding boxes and landmarks from tracks onto a copy of the images in the list  */
void sdk_draw_utils_overlay_track_list_on_image_list(
  sdk_utils_file_list_type in_image_list,
  ppr_track_list_type track_list,
  int min_confidence,
  int overlay_frame_numbers,
  const char *output_image_format)
{
  int i;
  int frame_num;

  int *i_tracked_face_lists;

  ppr_raw_image_type raw_image;
  char title[FILENAME_MAX];
  char out_filename[FILENAME_MAX];
  ppr_face_attributes_type face_attributes;
  
  /* Create array of indices into tracked face arrays */
  i_tracked_face_lists = (int*)malloc(track_list.length * sizeof(int));
  sdk_utils_check_allocation(i_tracked_face_lists, "i_tracked_face_lists", __FUNCTION__);
  for (i = 0; i < track_list.length; i++)
    i_tracked_face_lists[i] = 0;

  /* Loop through each image in list */
  for (frame_num = 0; frame_num < in_image_list.length; frame_num++)
  {
    /* Read image */
    TRY_RAW_IMAGE(ppr_raw_image_io_read(in_image_list.filenames[frame_num], &raw_image));

    /* Overlay polygons on frame */
    sdk_draw_utils_advance_indices_to_frame(track_list, i_tracked_face_lists, frame_num);
    for (i = 0; i < track_list.length; i++)
    {
      ppr_get_face_attributes(track_list.tracks[i].tracked_faces.faces[i_tracked_face_lists[i]], &face_attributes);
      if (face_attributes.tracking_info.frame_number == frame_num)
      {
        /* Overlay polygon for this face */
        sdk_draw_utils_overlay_tracked_faces(&raw_image, 1, &track_list.tracks[i].tracked_faces.faces[i_tracked_face_lists[i]], min_confidence);
      }
    }

    /* Overlay frame number on frame */
    if (overlay_frame_numbers)
      sdk_draw_utils_overlay_frame_number(&raw_image, frame_num);

    /* Write image to file */
    sdk_utils_get_file_title(in_image_list.filenames[frame_num], title);
    sprintf(out_filename, "%s_track_overlay.%s", title, output_image_format);
    TRY_RAW_IMAGE(ppr_raw_image_io_write(out_filename, raw_image));

    /* Free image */
    ppr_raw_image_free(raw_image);
  }

  /* Clean up */
  free(i_tracked_face_lists);
}
Beispiel #2
0
janus_error janus_read_image(const char *file_name, janus_image *image)
{
    ppr_raw_image_type ppr_image;
    ppr_raw_image_error_type error = ppr_raw_image_io_read(file_name, &ppr_image);
    if (error != PPR_RAW_IMAGE_SUCCESS)
        return JANUS_INVALID_IMAGE;
    *image = janusFromPittPatt(&ppr_image);
    ppr_raw_image_free(ppr_image);
    return JANUS_SUCCESS;
}
Beispiel #3
0
janus_error janus_read_frame(janus_video video, janus_image *image)
{
    ppr_raw_image_type ppr_frame;
    ppr_video_io_error_type error = ppr_video_io_get_frame((ppr_video_io_type)video, &ppr_frame);
    error = error || ppr_video_io_step_forward((ppr_video_io_type)video);
    if (error != PPR_VIDEO_IO_SUCCESS)
        return JANUS_INVALID_VIDEO;
    *image = janus_from_pittpatt(&ppr_frame);
    ppr_raw_image_free(ppr_frame);
    return JANUS_SUCCESS;
}
Beispiel #4
0
/* Overlays bounding boxes and landmarks from tracks onto copies of the frames in the video */
void sdk_draw_utils_overlay_track_list_on_video(
  const char *in_filename,
  ppr_track_list_type track_list,
  int min_confidence,
  int overlay_frame_numbers,
  const char *output_video_format)
{
  int i;
  int frame_num;

  ppr_video_io_type input_video;
  ppr_video_io_type output_video;
  int frame_rate_numerator;
  int frame_rate_denominator;
  int *i_tracked_face_lists;
  ppr_face_attributes_type face_attributes;

  ppr_raw_image_type raw_image;
  char title[FILENAME_MAX];
  char out_filename[FILENAME_MAX];
  
  /* Open video */
  TRY_VIDEO(ppr_video_io_open(&input_video, in_filename));
  TRY_VIDEO(ppr_video_io_get_frame_rate(input_video, &frame_rate_numerator, &frame_rate_denominator));

  /* Create output video */
  sdk_utils_get_file_title(in_filename, title);
  sprintf(out_filename, "%s_track_overlay.%s", title, output_video_format);
  TRY_VIDEO(ppr_video_io_create(&output_video, out_filename, BIT_RATE, frame_rate_numerator, frame_rate_denominator));

  /* Create array of indices into tracked face arrays */
  i_tracked_face_lists = (int*)malloc(track_list.length * sizeof(int));
  sdk_utils_check_allocation(i_tracked_face_lists, "i_tracked_face_lists", __FUNCTION__);
  for (i = 0; i < track_list.length; i++)
    i_tracked_face_lists[i] = 0;

  /* Loop through each frame of video */
  frame_num = 0;
  while (ppr_video_io_is_frame_available(input_video))
  {
    /* Read frame from video */
    TRY_VIDEO(ppr_video_io_get_frame(input_video, &raw_image));

    /* Overlay polygons on frame */
    sdk_draw_utils_advance_indices_to_frame(track_list, i_tracked_face_lists, frame_num);
    for (i = 0; i < track_list.length; i++)
    {
      ppr_get_face_attributes(track_list.tracks[i].tracked_faces.faces[i_tracked_face_lists[i]], &face_attributes);
      if (face_attributes.tracking_info.frame_number == frame_num)
      {
        /* Overlay polygon for this face */
        sdk_draw_utils_overlay_tracked_faces(&raw_image, 1, &track_list.tracks[i].tracked_faces.faces[i_tracked_face_lists[i]], min_confidence);
      }
    }

    /* Overlay frame number on frame */
    if (overlay_frame_numbers)
      sdk_draw_utils_overlay_frame_number(&raw_image, frame_num);

    /* Write frame to output video */
    TRY_VIDEO(ppr_video_io_add_frame(output_video, raw_image));

    /* Free frame */
    ppr_raw_image_free(raw_image);

    /* Advance to next frame */
    TRY_VIDEO(ppr_video_io_step_forward(input_video));
    frame_num++;
  }

  /* Close video */
  TRY_VIDEO(ppr_video_io_close(input_video));
  TRY_VIDEO(ppr_video_io_close(output_video));

  /* Clean up */
  free(i_tracked_face_lists);
}
void sdk_print_utils_print_face(ppr_context_type context,
                                ppr_face_type face)
{
  int rv;
  ppr_string_type face_string;
  ppr_face_attributes_type face_attributes;
  ppr_landmark_list_type landmark_list;
  ppr_polygon_type face_boundary;
  ppr_raw_image_type thumbnail;
  ppr_settings_type settings;
  int is_extractable;
  int has_template;
  
  TRY(ppr_get_face_attributes(face, &face_attributes));
  sdk_print_utils_print_face_attributes(face_attributes);

  TRY(ppr_get_face_landmarks(face, &landmark_list));
  sdk_print_utils_print_landmark_list(landmark_list);

  TRY(ppr_get_face_boundary(face, PPR_BOUNDING_BOX_STYLE_DEFAULT, &face_boundary));
  printf("----------------------------------------------------------------------\n");
  printf(" Default Bounding Box Style \n");
  printf("----------------------------------------------------------------------\n");
  sdk_print_utils_print_polygon(face_boundary);

  printf("----------------------------------------------------------------------\n");
  printf("----------------------------------------------------------------------\n");
  printf(" Additional Info\n");
  printf("----------------------------------------------------------------------\n");
  TRY(ppr_get_face_string(context, face, &face_string));
  printf(" - String: %s\n", face_string.str);
  
  rv = ppr_get_face_thumbnail(context, face, &thumbnail);
  if (rv == PPR_SUCCESS)
  {
    printf(" - Face HAS THUMBNAIL\n");
    ppr_raw_image_free(thumbnail);
  }
  else if (rv == PPR_NO_THUMBNAIL)
  {
    printf(" - Face DOES NOT have thumbnail\n");
  }
  else
  {
    fprintf(stderr, "ERROR - %s: ppr_get_face_thumbnail", ppr_error_message(rv));
    fprintf(stderr, " (%s:%d)\n", __FILE__, __LINE__);
    ppr_finalize_sdk();
    exit(EXIT_FAILURE);
  }

  TRY(ppr_get_settings(context, &settings));
  if (settings.recognition.enable_extraction)
  {
    TRY(ppr_is_template_extractable(context, face, &is_extractable));
    if (is_extractable)
      printf(" - Template CAN be extracted\n");
    else
      printf(" - Template CANNOT be extracted\n");

    TRY(ppr_face_has_template(context, face, &has_template));
    if (has_template)
      printf(" - Face HAS template\n");
    else
      printf(" - Face DOES NOT have template\n");
  }

  printf("----------------------------------------------------------------------\n");

  ppr_free_string(face_string);
  ppr_free_landmark_list(landmark_list);
  ppr_free_polygon(face_boundary);
}