# include "monitoring.h"
# include "common/mat.h"
# define MODEL_WIDTH 320
# define MODEL_HEIGHT 160
extern const uint8_t monitoring_model_data [ ] asm ( " _binary_monitoring_model_dlc_start " ) ;
extern const uint8_t monitoring_model_end [ ] asm ( " _binary_monitoring_model_dlc_end " ) ;
const size_t monitoring_model_size = monitoring_model_end - monitoring_model_data ;
void monitoring_init ( MonitoringState * s , cl_device_id device_id , cl_context context ) {
model_input_init ( & s - > in , MODEL_WIDTH , MODEL_HEIGHT , device_id , context ) ;
s - > m = new SNPEModel ( monitoring_model_data , monitoring_model_size , ( float * ) & s - > output , OUTPUT_SIZE ) ;
}
MonitoringResult monitoring_eval_frame ( MonitoringState * s , cl_command_queue q ,
cl_mem yuv_cl , int width , int height ) {
const mat3 front_frame_from_scaled_frame = ( mat3 ) { {
width / 426.0f , 0.0 , 0.0 ,
0.0 , height / 320.0f , 0.0 ,
0.0 , 0.0 , 1.0 ,
} } ;
const mat3 scaled_frame_from_cropped_frame = ( mat3 ) { {
1.0 , 0.0 , 426.0 - 160.0 ,
0.0 , 1.0 , 0.0 ,
0.0 , 0.0 , 1.0 ,
} } ;
const mat3 transpose = ( mat3 ) { {
0.0 , 1.0 , 0.0 ,
1.0 , 0.0 , 0.0 ,
0.0 , 0.0 , 1.0 ,
} } ;
const mat3 front_frame_from_cropped_frame = matmul3 ( front_frame_from_scaled_frame , scaled_frame_from_cropped_frame ) ;
const mat3 front_frame_from_monitoring_frame = matmul3 ( front_frame_from_cropped_frame , transpose ) ;
float * net_input_buf = model_input_prepare ( & s - > in , q , yuv_cl , width , height , front_frame_from_monitoring_frame ) ;
s - > m - > execute ( net_input_buf ) ;
MonitoringResult ret = { 0 } ;
memcpy ( ret . vs , s - > output , sizeof ( ret . vs ) ) ;
ret . std = sqrtf ( 2.f ) / s - > output [ OUTPUT_SIZE - 1 ] ;
return ret ;
}
void monitoring_free ( MonitoringState * s ) {
model_input_free ( & s - > in ) ;
delete s - > m ;
}