8 changed files with 146 additions and 49 deletions
			
			
		@ -0,0 +1,70 @@ | 
				
			|||||
 | 
					#include "ofMain.h" | 
				
			||||
 | 
					#include "Onnx.h" | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					class ModelThread : public ofThread | 
				
			||||
 | 
					{ | 
				
			||||
 | 
					    public: | 
				
			||||
 | 
					    ofImage* img; | 
				
			||||
 | 
					    ofFbo* fbo; | 
				
			||||
 | 
					    Onnx* model; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    ~ModelThread(){ | 
				
			||||
 | 
					        stop(); | 
				
			||||
 | 
					        waitForThread(false); | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    void setup(ofImage* _img, ofFbo* _fbo, Onnx* _model){ | 
				
			||||
 | 
					        std::lock_guard<std::mutex> lock(mutex); | 
				
			||||
 | 
					        this->img = _img; | 
				
			||||
 | 
					        this->fbo = _fbo; | 
				
			||||
 | 
					        this->model = _model; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    void start(){ | 
				
			||||
 | 
					        startThread(); | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    void stop(){ | 
				
			||||
 | 
					        stopThread(); | 
				
			||||
 | 
					        condition.notify_all(); | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    void threadedFunction(){ | 
				
			||||
 | 
					        while(isThreadRunning()){ | 
				
			||||
 | 
					            std::unique_lock<std::mutex> lock(mutex); | 
				
			||||
 | 
					            inferDepthImage(fbo, img, model); | 
				
			||||
 | 
					            condition.wait(lock); | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    void update(){ | 
				
			||||
 | 
					        std::lock_guard<std::mutex> lock(mutex); | 
				
			||||
 | 
					        condition.notify_one(); | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    void inferDepthImage(ofFbo* fbo, ofImage* img, Onnx* model){ | 
				
			||||
 | 
					        std::cout << "infer" << std::endl; | 
				
			||||
 | 
					        auto output_tensors = model->Run(*img); | 
				
			||||
 | 
					        float* output_ptr = output_tensors.front().GetTensorMutableData<float>(); | 
				
			||||
 | 
					        size_t num_elements = output_tensors.front().GetTensorTypeAndShapeInfo().GetElementCount(); | 
				
			||||
 | 
					        std::cout << "done" << std::endl; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        float min_value = model->ReduceMin(output_ptr, num_elements); | 
				
			||||
 | 
					        float max_value = model->ReduceMax(output_ptr, num_elements); | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        std::cout << "done1" << std::endl; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        model->Normalize(output_ptr, num_elements, min_value, max_value); | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        std::cout << "don2e" << std::endl; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        model->DataToFbo(output_ptr, 518, 518, *fbo); | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        std::cout << "done3" << std::endl; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    protected: | 
				
			||||
 | 
					    std::condition_variable condition; | 
				
			||||
 | 
					}; | 
				
			||||
					Loading…
					
					
				
		Reference in new issue