@@ -25,33 +25,39 @@ License along with SensiML Piccolo AI. If not, see <https://www.gnu.org/licenses
2525
2626float results [NNOM_MAX_NUMBER_REULTS ];
2727
28- nnom_classifier_rows_t NNOMClassifierTable ;
28+ nnom_classifier_rows_t nnom_classifier_rows ;
29+ float probability ;
30+ int32_t label ;
2931
30- uint8_t tf_micro_simple_submit (uint8_t classifier_id , feature_vector_t * feature_vector , model_results_t * model_results )
32+ int last_nnom_initialized = 0 ;
33+ nnom_model_t * model ;
34+ uint8_t nnom_simple_submit (uint8_t classifier_id , feature_vector_t * feature_vector , model_results_t * model_results )
3135{
3236 uint8_t y = 1 ;
3337 float max_result = 0 ;
3438
3539 if (last_nnom_initialized != classifier_id )
3640 {
37- micro_model_setup (NNOMClassifierTable [classifier_id ].model_data , NNOMClassifierTable [classifier_id ].kTensorArenaSize , NNOMClassifierTable [classifier_id ].tensor_arena );
38- last_nnom_initialized = classifier_id ;
41+ model = nnom_model_create ();
42+ //nnom_classifier_rows[0].model=model
43+ last_nnom_initialized = classifier_id ;
3944 }
4045
41- memcpy (nnom_input_data , feature_vector . data , feature_vector . size );
42- nnom_predict (NNOMClassifierTable [classifier_id ].model , & model_results . result , & model_results . output_tensor );
46+ memcpy (nnom_input_data , feature_vector -> data , feature_vector -> size );
47+ nnom_predict (nnom_classifier_rows [classifier_id ].model , & label , & probability );
4348
4449
4550 // regression
46- if (NNOMClassifierTable [classifier_id ].estimator_type == ESTIMATOR_TYPE_REGRESSION )
51+ if (nnom_classifier_rows [classifier_id ].estimator_type == ESTIMATOR_TYPE_REGRESSION )
4752 {
48- return (uint8_t )results [ 0 ] ;
53+ return (uint8_t )label ;
4954 }
5055
5156 // classification
57+ /*
5258 max_result = results[0];
5359 model_results->output_tensor->data[0] = (int16_t)results[0];
54- for (int32_t i = 1 ; i < NNOMClassifierTable [classifier_id ].num_outputs ; i ++ )
60+ for (int32_t i = 1; i < nnom_classifier_rows [classifier_id].num_outputs; i++)
5561 {
5662 if (results[i] > max_result)
5763 {
@@ -61,30 +67,33 @@ uint8_t tf_micro_simple_submit(uint8_t classifier_id, feature_vector_t *feature_
6167 model_results->output_tensor->data[i] = (int16_t)results[i];
6268 }
6369
64- if (max_result < NNOMClassifierTable [classifier_id ].threshold )
70+
71+ if (max_result < nnom_classifier_rows[classifier_id].threshold)
6572 {
6673 model_results->result = 0.0f;
6774 return 0;
6875 }
69-
70- model_results -> result = (float )y ;
71-
72- return y ;
76+
77+ */
78+ model_results -> result = (float )label ;
79+
80+ return float (label );
7381}
7482
75- void nnom_init (tf_micro_classifier_rows_t * classifier_table , const uint8_t num_classifiers )
83+ void nnom_init (nnom_classifier_rows_t * classifier_table , const uint8_t num_classifiers )
7684{
7785 model = nnom_model_create ();
78- NNOMClassifierTable = classifier_table ;
79- NNOMClassifierTable [0 ].model = model
86+ nnom_classifier_rows = classifier_table ;
87+ nnom_classifier_rows [0 ].model = model
88+ last_nnom_initialized = 0
8089
8190}
8291
8392void nnom_model_results_object (int32_t classifier_id , model_results_t * model_results )
8493{
85- for (int32_t i = 0 ; i < NNOMClassifierTable [classifier_id ].num_outputs ; i ++ )
94+ for (int32_t i = 0 ; i < nnom_classifier_rows [classifier_id ].num_outputs ; i ++ )
8695 {
8796 model_results -> output_tensor -> data [i ] = results [i ];
8897 }
89- model_results -> output_tensor -> size = NNOMClassifierTable [classifier_id ].num_outputs ;
98+ model_results -> output_tensor -> size = nnom_classifier_rows [classifier_id ].num_outputs ;
9099}
0 commit comments