#pragma once #include #include "selfdrive/modeld/runners/runmodel.h" class ONNXModel : public RunModel { public: ONNXModel(const char *path, float *output, size_t output_size, int runtime, bool use_extra = false); ~ONNXModel(); void addRecurrent(float *state, int state_size); void addDesire(float *state, int state_size); void addTrafficConvention(float *state, int state_size); void addCalib(float *state, int state_size); void addImage(float *image_buf, int buf_size); void addExtra(float *image_buf, int buf_size); void execute(); private: int proc_pid; float *output; size_t output_size; float *rnn_input_buf = NULL; int rnn_state_size; float *desire_input_buf = NULL; int desire_state_size; float *traffic_convention_input_buf = NULL; int traffic_convention_size; float *calib_input_buf = NULL; int calib_size; float *image_input_buf = NULL; int image_buf_size; float *extra_input_buf = NULL; int extra_buf_size; bool use_extra; // pipe to communicate to keras subprocess void pread(float *buf, int size); void pwrite(float *buf, int size); int pipein[2]; int pipeout[2]; };