Skip to contents

Reads CPCe files/exports from a folder, matches images, validates points, and writes analysis/ML-ready outputs. A crosswalk is optional. Without one, pointcoral uses the raw labels already stored in the CPCe files. With one, it standardizes those raw labels to full labels, ecological classes, and custom ML classes.

Usage

run_pointcoral(
  cpce_dir,
  image_root,
  out_dir,
  crosswalk_path = NULL,
  recursive = TRUE,
  class_col = "ml_class",
  patch_size = 224,
  make_patches = TRUE,
  make_masks = FALSE,
  make_qc = TRUE
)

Arguments

cpce_dir

Folder containing CPCe files or exports.

image_root

Folder containing source images.

out_dir

Output directory.

crosswalk_path

Optional path to a user-supplied label crosswalk.

recursive

Whether to search cpce_dir recursively.

class_col

Class column to use for ML labels.

patch_size

Patch size for point-centered patches.

make_patches, make_masks, make_qc

Whether to write optional outputs.

Value

A list from write_pointcoral_dataset().

Examples

example_dir <- system.file("extdata", package = "pointcoral")
run_pointcoral(
  cpce_dir = example_dir,
  image_root = example_dir,
  out_dir = file.path(tempdir(), "pointcoral-run-example"),
  recursive = FALSE,
  make_patches = FALSE,
  make_masks = FALSE,
  make_qc = FALSE,
  class_col = "raw_label"
)
#> $paths
#> $paths$points_raw
#> [1] "/tmp/RtmpLwJlKK/pointcoral-run-example/tables/points_raw.csv"
#> 
#> $paths$points_clean
#> [1] "/tmp/RtmpLwJlKK/pointcoral-run-example/tables/points_clean.csv"
#> 
#> $paths$validation_report
#> [1] "/tmp/RtmpLwJlKK/pointcoral-run-example/tables/validation_report.csv"
#> 
#> $paths$crosswalk_check
#> [1] "/tmp/RtmpLwJlKK/pointcoral-run-example/tables/crosswalk_check.csv"
#> 
#> $paths$label_summary
#> [1] "/tmp/RtmpLwJlKK/pointcoral-run-example/qc/label_summary.csv"
#> 
#> $paths$image_summary
#> [1] "/tmp/RtmpLwJlKK/pointcoral-run-example/tables/image_summary.csv"
#> 
#> $paths$transect_summary
#> [1] "/tmp/RtmpLwJlKK/pointcoral-run-example/tables/transect_summary.csv"
#> 
#> $paths$site_summary
#> [1] "/tmp/RtmpLwJlKK/pointcoral-run-example/tables/site_summary.csv"
#> 
#> $paths$class_lookup
#> [1] "/tmp/RtmpLwJlKK/pointcoral-run-example/tables/class_lookup.csv"
#> 
#> $paths$labels
#> [1] "/tmp/RtmpLwJlKK/pointcoral-run-example/ml/labels.csv"
#> 
#> $paths$class_lookup
#> [1] "/tmp/RtmpLwJlKK/pointcoral-run-example/ml/class_lookup.csv"
#> 
#> $paths$labels_train
#> [1] "/tmp/RtmpLwJlKK/pointcoral-run-example/ml/labels_train.csv"
#> 
#> $paths$labels_val
#> [1] "/tmp/RtmpLwJlKK/pointcoral-run-example/ml/labels_val.csv"
#> 
#> $paths$labels_test
#> [1] "/tmp/RtmpLwJlKK/pointcoral-run-example/ml/labels_test.csv"
#> 
#> 
#> $points_raw
#> # A tibble: 200 × 36
#>    project_id site  transect survey_date image_id image_file image_path point_id
#>    <chr>      <chr> <chr>    <date>      <chr>    <chr>      <chr>         <int>
#>  1 NA         Hole… HIW_158… NA          HIW_158… HIW_158_W… /home/run…        1
#>  2 NA         Hole… HIW_158… NA          HIW_158… HIW_158_W… /home/run…        2
#>  3 NA         Hole… HIW_158… NA          HIW_158… HIW_158_W… /home/run…        3
#>  4 NA         Hole… HIW_158… NA          HIW_158… HIW_158_W… /home/run…        4
#>  5 NA         Hole… HIW_158… NA          HIW_158… HIW_158_W… /home/run…        5
#>  6 NA         Hole… HIW_158… NA          HIW_158… HIW_158_W… /home/run…        6
#>  7 NA         Hole… HIW_158… NA          HIW_158… HIW_158_W… /home/run…        7
#>  8 NA         Hole… HIW_158… NA          HIW_158… HIW_158_W… /home/run…        8
#>  9 NA         Hole… HIW_158… NA          HIW_158… HIW_158_W… /home/run…        9
#> 10 NA         Hole… HIW_158… NA          HIW_158… HIW_158_W… /home/run…       10
#> # ℹ 190 more rows
#> # ℹ 28 more variables: cpce_x <dbl>, cpce_y <dbl>, cpce_width <dbl>,
#> #   cpce_height <dbl>, image_width <int>, image_height <int>, x_px <int>,
#> #   y_px <int>, raw_code <chr>, raw_label <chr>, full_label <chr>,
#> #   clean_label <chr>, label_class <chr>, major_category <chr>, ml_class <chr>,
#> #   class_id <int>, reviewer <chr>, notes <chr>, cpce_note_type <chr>,
#> #   cpc_file <chr>, codefile_path <chr>, cpce_image_path <chr>, …
#> 
#> $points_clean
#> # A tibble: 200 × 36
#>    project_id site  transect survey_date image_id image_file image_path point_id
#>    <chr>      <chr> <chr>    <date>      <chr>    <chr>      <chr>         <int>
#>  1 NA         Hole… HIW_158… NA          HIW_158… HIW_158_W… /home/run…        1
#>  2 NA         Hole… HIW_158… NA          HIW_158… HIW_158_W… /home/run…        2
#>  3 NA         Hole… HIW_158… NA          HIW_158… HIW_158_W… /home/run…        3
#>  4 NA         Hole… HIW_158… NA          HIW_158… HIW_158_W… /home/run…        4
#>  5 NA         Hole… HIW_158… NA          HIW_158… HIW_158_W… /home/run…        5
#>  6 NA         Hole… HIW_158… NA          HIW_158… HIW_158_W… /home/run…        6
#>  7 NA         Hole… HIW_158… NA          HIW_158… HIW_158_W… /home/run…        7
#>  8 NA         Hole… HIW_158… NA          HIW_158… HIW_158_W… /home/run…        8
#>  9 NA         Hole… HIW_158… NA          HIW_158… HIW_158_W… /home/run…        9
#> 10 NA         Hole… HIW_158… NA          HIW_158… HIW_158_W… /home/run…       10
#> # ℹ 190 more rows
#> # ℹ 28 more variables: cpce_x <dbl>, cpce_y <dbl>, cpce_width <dbl>,
#> #   cpce_height <dbl>, image_width <int>, image_height <int>, x_px <int>,
#> #   y_px <int>, raw_code <chr>, raw_label <chr>, full_label <chr>,
#> #   clean_label <chr>, label_class <chr>, major_category <chr>, ml_class <chr>,
#> #   class_id <int>, reviewer <chr>, notes <chr>, cpce_note_type <chr>,
#> #   cpc_file <chr>, codefile_path <chr>, cpce_image_path <chr>, …
#> 
#> $validation_report
#> # A tibble: 1 × 4
#>   check severity     n details                      
#>   <chr> <chr>    <int> <chr>                        
#> 1 ok    info         0 No validation issues detected
#> 
#> $crosswalk_check
#> # A tibble: 0 × 0
#> 
#> $class_col
#> [1] "raw_label"
#> 
#> $ml_points
#> # A tibble: 200 × 21
#>    image_path         image_id  x_px  y_px label class_id split project_id site 
#>    <chr>              <chr>    <int> <int> <chr>    <int> <chr> <chr>      <chr>
#>  1 /home/runner/work… HIW_158…    19    11 SPO         12 train NA         Hole…
#>  2 /home/runner/work… HIW_158…     7   107 S           11 train NA         Hole…
#>  3 /home/runner/work… HIW_158…    26   165 CALG         1 train NA         Hole…
#>  4 /home/runner/work… HIW_158…    69   202 SPO         12 train NA         Hole…
#>  5 /home/runner/work… HIW_158…    26   243 SPO         12 train NA         Hole…
#>  6 /home/runner/work… HIW_158…    43   305 SPO         12 train NA         Hole…
#>  7 /home/runner/work… HIW_158…     2   363 PEYS        10 train NA         Hole…
#>  8 /home/runner/work… HIW_158…    74   452 CALG         1 train NA         Hole…
#>  9 /home/runner/work… HIW_158…    43   469 SPO         12 train NA         Hole…
#> 10 /home/runner/work… HIW_158…    18   541 LOBO         2 train NA         Hole…
#> # ℹ 190 more rows
#> # ℹ 12 more variables: transect <chr>, survey_date <date>, image_file <chr>,
#> #   point_id <int>, raw_code <chr>, raw_label <chr>, full_label <chr>,
#> #   clean_label <chr>, label_class <chr>, major_category <chr>, reviewer <chr>,
#> #   notes <chr>
#> 
#> $patch_manifest
#> # A tibble: 0 × 0
#> 
#> $mask_manifest
#> # A tibble: 0 × 0
#> 
#> $qc_manifest
#> # A tibble: 0 × 0
#> 
#> $label_summary
#> # A tibble: 18 × 4
#>    summary_type  label     n details             
#>    <chr>         <chr> <int> <chr>               
#>  1 class_balance S        65 Point count by label
#>  2 class_balance SPO      44 Point count by label
#>  3 class_balance CALG     31 Point count by label
#>  4 class_balance PEYS     13 Point count by label
#>  5 class_balance LOBO      9 Point count by label
#>  6 class_balance P         9 Point count by label
#>  7 class_balance PEFL      7 Point count by label
#>  8 class_balance MICR      6 Point count by label
#>  9 class_balance AA        4 Point count by label
#> 10 class_balance MFRN      4 Point count by label
#> 11 class_balance TURF      3 Point count by label
#> 12 class_balance PEGI      2 Point count by label
#> 13 class_balance MME       1 Point count by label
#> 14 class_balance PEME      1 Point count by label
#> 15 class_balance SS        1 Point count by label
#> 16 rare_label    MME       1 Rare label count    
#> 17 rare_label    PEME      1 Rare label count    
#> 18 rare_label    SS        1 Rare label count    
#>