|
28 | 28 | extern "C" { |
29 | 29 | #endif |
30 | 30 |
|
31 | | -/** |
32 | | - * @brief Loads a cascade from memory. |
33 | | - * @param cascade Pointer to the cascade; if it is not valid, an error is returned. |
34 | | - * @param memory Pointer to the memory containing the cascade; if it is not valid, an error is returned. |
35 | | - * @return stm32ipl_err_Ok on success, error otherwise. |
36 | | - */ |
37 | | -stm32ipl_err_t STM32Ipl_LoadCascadeFromMemory(cascade_t *cascade, const uint8_t *memory) |
38 | | -{ |
39 | | - int i; |
40 | | - uint8_t *mem = (uint8_t*)memory; |
41 | | - |
42 | | - /* Check arguments. */ |
43 | | - if (!cascade || !memory) |
44 | | - return stm32ipl_err_InvalidParameter; |
45 | | - |
46 | | - memset(cascade, 0, sizeof(cascade_t)); |
47 | | - |
48 | | - /* read detection window size */ |
49 | | - // read_data(&fp, &cascade->window, sizeof(cascade->window)); |
50 | | - memcpy(&cascade->window, mem, sizeof(cascade->window)); |
51 | | - mem += sizeof(cascade->window); |
52 | | - |
53 | | - /* read num stages */ |
54 | | - // read_data(&fp, &cascade->n_stages, sizeof(cascade->n_stages)); |
55 | | - memcpy(&cascade->n_stages, mem, sizeof(cascade->n_stages)); |
56 | | - mem += sizeof(cascade->n_stages); |
57 | | - |
58 | | - /* read num features in each stages */ |
59 | | - // read_data(&fp, cascade->stages_array, sizeof(uint8_t) * cascade->n_stages); |
60 | | - cascade->stages_array = mem; |
61 | | - mem += (sizeof(uint8_t) * cascade->n_stages); |
62 | | - |
63 | | - /* sum num of features in each stages*/ |
64 | | - for (i = 0, cascade->n_features = 0; i < cascade->n_stages; i++) { |
65 | | - cascade->n_features += cascade->stages_array[i]; |
66 | | - } |
67 | | - |
68 | | - /* read stages thresholds */ |
69 | | - // read_data(&fp, cascade->stages_thresh_array, sizeof(int16_t)*cascade->n_stages); |
70 | | - cascade->stages_thresh_array = (int16_t*)mem; |
71 | | - mem += (sizeof(int16_t) * cascade->n_stages); |
72 | | - |
73 | | - /* read features thresholds */ |
74 | | - // read_data(&fp, cascade->tree_thresh_array, sizeof(*cascade->tree_thresh_array)*cascade->n_features); |
75 | | - cascade->tree_thresh_array = (int16_t*)mem; |
76 | | - mem += (sizeof(*cascade->tree_thresh_array) * cascade->n_features); |
77 | | - |
78 | | - /* read alpha 1 */ |
79 | | - // read_data(&fp, cascade->alpha1_array, sizeof(*cascade->alpha1_array)*cascade->n_features); |
80 | | - cascade->alpha1_array = (int16_t*)mem; |
81 | | - mem += (sizeof(*cascade->alpha1_array) * cascade->n_features); |
82 | | - |
83 | | - /* read alpha 2 */ |
84 | | - // read_data(&fp, cascade->alpha2_array, sizeof(*cascade->alpha2_array)*cascade->n_features); |
85 | | - cascade->alpha2_array = (int16_t*)mem; |
86 | | - mem += (sizeof(*cascade->alpha2_array) * cascade->n_features); |
87 | | - |
88 | | - /* read num rectangles per feature*/ |
89 | | - // read_data(&fp, cascade->num_rectangles_array, sizeof(*cascade->num_rectangles_array)*cascade->n_features); |
90 | | - cascade->num_rectangles_array = (int8_t*)mem; |
91 | | - mem += (sizeof(*cascade->num_rectangles_array) * cascade->n_features); |
92 | | - |
93 | | - /* sum num of recatngles per feature*/ |
94 | | - for (i = 0, cascade->n_rectangles = 0; i < cascade->n_features; i++) { |
95 | | - cascade->n_rectangles += cascade->num_rectangles_array[i]; |
96 | | - } |
97 | | - |
98 | | - /* read rectangles weights */ |
99 | | - // read_data(&fp, cascade->weights_array, sizeof(*cascade->weights_array)*cascade->n_rectangles); |
100 | | - cascade->weights_array = (int8_t*)mem; |
101 | | - mem += (sizeof(*cascade->weights_array) * cascade->n_rectangles); |
102 | | - |
103 | | - /* read rectangles num rectangles * 4 points */ |
104 | | - //read_data(&fp, cascade->rectangles_array, sizeof(*cascade->rectangles_array)*cascade->n_rectangles *4); |
105 | | - cascade->rectangles_array = (int8_t*)mem; |
106 | | - |
107 | | - return stm32ipl_err_Ok; |
108 | | -} |
109 | | - |
110 | 31 | #ifdef STM32IPL_ENABLE_FRONTAL_FACE_CASCADE |
111 | 32 | /** |
112 | 33 | * @brief Loads the frontal face cascade. |
|
0 commit comments