gecol_core/extract/
config.rs1use std::hash::Hash;
2
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Serialize, Deserialize)]
7pub struct ExtractionConfig {
8 #[serde(rename = "resize_width", default = "default_resize")]
11 pub res_w: Option<u32>,
12 #[serde(rename = "resize_height", default = "default_resize")]
15 pub res_h: Option<u32>,
16
17 #[serde(rename = "saturation_threshold", default = "default_sat_thresh")]
20 pub sat_thresh: f32,
21 #[serde(rename = "value_threshold", default = "default_val_thresh")]
24 pub val_thresh: f32,
25
26 #[serde(rename = "saliency_threshold", default)]
29 pub sal_thresh: f32,
30 #[serde(rename = "saliency_bonus", default = "default_sal_bonus")]
32 pub sal_bonus: f32,
33 #[serde(default = "default_warmth_bonus")]
35 pub warmth_bonus: f32,
36
37 #[serde(default = "default_clusters")]
39 pub clusters: usize,
40
41 #[serde(rename = "vibrancy_bonus", default = "default_vibr_bonus")]
43 pub vibr_bonus: f32,
44 #[serde(rename = "dominance_bonus", default = "default_dom_bonus")]
46 pub dom_bonus: f32,
47}
48
49impl Default for ExtractionConfig {
50 fn default() -> Self {
51 Self {
52 res_w: default_resize(),
53 res_h: default_resize(),
54 sat_thresh: default_sat_thresh(),
55 val_thresh: default_val_thresh(),
56 sal_thresh: Default::default(),
57 sal_bonus: default_sal_bonus(),
58 warmth_bonus: default_warmth_bonus(),
59 vibr_bonus: default_vibr_bonus(),
60 dom_bonus: default_dom_bonus(),
61 clusters: default_clusters(),
62 }
63 }
64}
65
66impl Hash for ExtractionConfig {
67 fn hash<H: std::hash::Hasher>(&self, state: &mut H) {
69 self.res_w.hash(state);
70 self.res_h.hash(state);
71 self.sat_thresh.to_bits().hash(state);
72 self.val_thresh.to_bits().hash(state);
73 self.sal_thresh.to_bits().hash(state);
74 self.sal_bonus.to_bits().hash(state);
75 self.warmth_bonus.to_bits().hash(state);
76 self.clusters.hash(state);
77 self.vibr_bonus.to_bits().hash(state);
78 self.dom_bonus.to_bits().hash(state);
79 }
80}
81
82fn default_resize() -> Option<u32> {
83 Some(255)
84}
85
86fn default_sat_thresh() -> f32 {
87 0.2
88}
89
90fn default_val_thresh() -> f32 {
91 0.15
92}
93
94fn default_sal_bonus() -> f32 {
95 1.5
96}
97
98fn default_warmth_bonus() -> f32 {
99 0.1
100}
101
102fn default_clusters() -> usize {
103 16
104}
105
106fn default_vibr_bonus() -> f32 {
107 2.5
108}
109
110fn default_dom_bonus() -> f32 {
111 1.
112}