#include "gpu_preprocess.hpp" #include #include namespace cms { __global__ void yoloNormalize(float* out,unsigned char const* in,int pixels) { int i=blockDim.x*blockIdx.x+threadIdx.x;if(i>=pixels)return; out[i]=__fdiv_rn(float(in[3*i+2]),255.F);out[pixels+i]=__fdiv_rn(float(in[3*i+1]),255.F);out[2*pixels+i]=__fdiv_rn(float(in[3*i]),255.F); } void YoloPreprocess::enqueue(cv::Mat const& frame,float* destination,cudaStream_t stream) { double scale=std::min(double(width_)/frame.cols,double(height_)/frame.rows); int rw=int(std::nearbyint(frame.cols*scale)),rh=int(std::nearbyint(frame.rows*scale)); int left=int(std::nearbyint((width_-rw)/2.0-.1)),top=int(std::nearbyint((height_-rh)/2.0-.1)); size_t bytes=size_t(frame.cols)*frame.rows*3;if(capacity_>>(destination,letter_,pixels);CUDA_CHECK(cudaGetLastError()); } }