openpilot is an open source driver assistance system. openpilot performs the functions of Automated Lane Centering and Adaptive Cruise Control for over 200 supported car makes and models.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

54 lines
1.8 KiB

#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;
}