@@ -95,28 +95,35 @@ class LearningBasedWBImpl : public LearningBasedWB
95
95
palette_size = 300 ;
96
96
palette_bandwidth = 0 .1f ;
97
97
prediction_thresh = 0 .025f ;
98
- if (path_to_model.empty ())
98
+ /* try to load model from file */
99
+ FileStorage fs;
100
+ if (!path_to_model.empty () && fs.open (path_to_model, FileStorage::READ))
99
101
{
100
- /* use the default model */
101
- num_trees = _num_trees;
102
- num_tree_nodes = _num_tree_nodes;
103
- feature_idx = _feature_idx;
104
- thresh_vals = _thresh_vals;
105
- leaf_vals = _leaf_vals;
106
- }
107
- else
108
- {
109
- /* load model from file */
110
- FileStorage fs (path_to_model, 0 );
111
- num_trees = fs[" num_trees" ];
112
- num_tree_nodes = fs[" num_tree_nodes" ];
102
+ if (fs[" num_trees" ].isReal ()) { // workaround for #10506
103
+ double nt = fs[" num_trees" ];
104
+ num_trees = int (nt);
105
+ double ntn = fs[" num_tree_nodes" ];
106
+ num_tree_nodes = int (ntn);
107
+ } else {
108
+ num_trees = fs[" num_trees" ];
109
+ num_tree_nodes = fs[" num_tree_nodes" ];
110
+ }
113
111
fs[" feature_idx" ] >> feature_idx_Mat;
114
112
fs[" thresh_vals" ] >> thresh_vals_Mat;
115
113
fs[" leaf_vals" ] >> leaf_vals_Mat;
116
114
feature_idx = feature_idx_Mat.ptr <uchar>();
117
115
thresh_vals = thresh_vals_Mat.ptr <float >();
118
116
leaf_vals = leaf_vals_Mat.ptr <float >();
119
117
}
118
+ else
119
+ {
120
+ /* use the default model */
121
+ num_trees = _num_trees;
122
+ num_tree_nodes = _num_tree_nodes;
123
+ feature_idx = _feature_idx;
124
+ thresh_vals = _thresh_vals;
125
+ leaf_vals = _leaf_vals;
126
+ }
120
127
}
121
128
122
129
int getRangeMaxVal () const { return range_max_val; }
0 commit comments