From e838803ea579cd3b8d3aa03cfb4bb1fbed088316 Mon Sep 17 00:00:00 2001 From: Gines Hidalgo Date: Sun, 26 Apr 2020 23:18:40 -0400 Subject: [PATCH] Fixed 4k images with many people not rendering skeletons --- doc/release_notes.md | 5 +- include/openpose/face/renderFace.hpp | 2 +- include/openpose/gpu/cuda.hpp | 2 +- include/openpose/hand/renderHand.hpp | 2 +- include/openpose/pose/renderPose.hpp | 12 +-- include/openpose_private/utilities/render.hu | 28 ++--- src/openpose/face/faceGpuRenderer.cpp | 2 +- src/openpose/face/renderFace.cu | 2 +- src/openpose/gpu/cuda.cpp | 21 ++-- src/openpose/hand/handGpuRenderer.cpp | 2 +- src/openpose/hand/renderHand.cu | 2 +- src/openpose/pose/poseGpuRenderer.cpp | 2 +- src/openpose/pose/renderPose.cu | 101 ++++++++++--------- 13 files changed, 91 insertions(+), 92 deletions(-) diff --git a/doc/release_notes.md b/doc/release_notes.md index 4faa49f4..a692d188 100644 --- a/doc/release_notes.md +++ b/doc/release_notes.md @@ -407,7 +407,10 @@ OpenPose Library - Release Notes 4. Natural sort now works properly with filenames containining numbers longer than the limit of an int. 5. Optionally auto-generated bin folder only contains the required DLLs (depending on the CMake configuration), instead of all of them. 6. When WrapperStructFace and WrapperStructHand are not called and configured for Wrapper, setting body to CPU rendering was not working. - 7. Skelton rendering: All or some skeletons were not properly displayed or completely missing on images with many people. + 7. Skeleton rendering bugs: + 1. All or some skeletons were not properly displayed or completely missing on images with many people (e.g., videos with about 32 people). + 2. All or some skeletons were not properly displayed or completely missing on images where the multiplication of people and image resolution was too big (e.g., videos with about 32 people on 4k resolution). + 3. Flag `output_resolution` was not working with GPU resize, redirected to CPU in those cases. 4. Changes/additions that affect the compatibility with the OpenPose Unity Plugin: diff --git a/include/openpose/face/renderFace.hpp b/include/openpose/face/renderFace.hpp index ed7a90e4..771618b9 100644 --- a/include/openpose/face/renderFace.hpp +++ b/include/openpose/face/renderFace.hpp @@ -10,7 +10,7 @@ namespace op Array& frameArray, const Array& faceKeypoints, const float renderThreshold); void renderFaceKeypointsGpu( - float* framePtr, float* maxPtr, float* minPtr, float* scalePtr, const Point& frameSize, + float* framePtr, float* maxPtr, float* minPtr, float* scalePtr, const Point& frameSize, const float* const facePtr, const int numberPeople, const float renderThreshold, const float alphaColorToAdd = FACE_DEFAULT_ALPHA_KEYPOINT); } diff --git a/include/openpose/gpu/cuda.hpp b/include/openpose/gpu/cuda.hpp index e2d16b3b..50aad8cf 100644 --- a/include/openpose/gpu/cuda.hpp +++ b/include/openpose/gpu/cuda.hpp @@ -19,7 +19,7 @@ namespace op } OP_API void getNumberCudaThreadsAndBlocks( - dim3& numberCudaThreads, dim3& numberCudaBlocks, const Point& frameSize); + dim3& numberCudaThreads, dim3& numberCudaBlocks, const Point& frameSize); template void reorderAndNormalize( diff --git a/include/openpose/hand/renderHand.hpp b/include/openpose/hand/renderHand.hpp index 7610a8d8..ec2acbe9 100644 --- a/include/openpose/hand/renderHand.hpp +++ b/include/openpose/hand/renderHand.hpp @@ -10,7 +10,7 @@ namespace op Array& frameArray, const std::array, 2>& handKeypoints, const float renderThreshold); void renderHandKeypointsGpu( - float* framePtr, float* maxPtr, float* minPtr, float* scalePtr, const Point& frameSize, + float* framePtr, float* maxPtr, float* minPtr, float* scalePtr, const Point& frameSize, const float* const handsPtr, const int numberHands, const float renderThreshold, const float alphaColorToAdd = HAND_DEFAULT_ALPHA_KEYPOINT); } diff --git a/include/openpose/pose/renderPose.hpp b/include/openpose/pose/renderPose.hpp index ace60250..41da3e68 100644 --- a/include/openpose/pose/renderPose.hpp +++ b/include/openpose/pose/renderPose.hpp @@ -13,32 +13,32 @@ namespace op void renderPoseKeypointsGpu( float* framePtr, float* maxPtr, float* minPtr, float* scalePtr, const PoseModel poseModel, - const int numberPeople, const Point& frameSize, const float* const posePtr, + const int numberPeople, const Point& frameSize, const float* const posePtr, const float renderThreshold, const bool googlyEyes = false, const bool blendOriginalFrame = true, const float alphaBlending = POSE_DEFAULT_ALPHA_KEYPOINT); void renderPoseHeatMapGpu( - float* frame, const Point& frameSize, const float* const heatMapPtr, const Point& heatMapSize, + float* frame, const Point& frameSize, const float* const heatMapPtr, const Point& heatMapSize, const float scaleToKeepRatio, const unsigned int part, const float alphaBlending = POSE_DEFAULT_ALPHA_HEAT_MAP); void renderPoseHeatMapsGpu( - float* frame, const PoseModel poseModel, const Point& frameSize, const float* const heatMapPtr, + float* frame, const PoseModel poseModel, const Point& frameSize, const float* const heatMapPtr, const Point& heatMapSize, const float scaleToKeepRatio, const float alphaBlending = POSE_DEFAULT_ALPHA_HEAT_MAP); void renderPosePAFGpu( - float* framePtr, const PoseModel poseModel, const Point& frameSize, const float* const heatMapPtr, + float* framePtr, const PoseModel poseModel, const Point& frameSize, const float* const heatMapPtr, const Point& heatMapSize, const float scaleToKeepRatio, const int part, const float alphaBlending = POSE_DEFAULT_ALPHA_HEAT_MAP); void renderPosePAFsGpu( - float* framePtr, const PoseModel poseModel, const Point& frameSize, const float* const heatMapPtr, + float* framePtr, const PoseModel poseModel, const Point& frameSize, const float* const heatMapPtr, const Point& heatMapSize, const float scaleToKeepRatio, const float alphaBlending = POSE_DEFAULT_ALPHA_HEAT_MAP); void renderPoseDistanceGpu( - float* framePtr, const Point& frameSize, const float* const heatMapPtr, const Point& heatMapSize, + float* framePtr, const Point& frameSize, const float* const heatMapPtr, const Point& heatMapSize, const float scaleToKeepRatio, const unsigned int part, const float alphaBlending = POSE_DEFAULT_ALPHA_HEAT_MAP); } diff --git a/include/openpose_private/utilities/render.hu b/include/openpose_private/utilities/render.hu index 1e0ea338..89622af8 100644 --- a/include/openpose_private/utilities/render.hu +++ b/include/openpose_private/utilities/render.hu @@ -4,10 +4,10 @@ namespace op { __inline__ __device__ void getBoundingBoxPerPerson( - float* maxPtr, float* minPtr, float* scalePtr,const int targetWidth, const int targetHeight, + float* maxPtr, float* minPtr, float* scalePtr,const unsigned int targetWidth, const unsigned int targetHeight, const float* const keypointsPtr, const int numberPeople, const int numberParts, const float threshold) { - const auto globalIdx = threadIdx.x; + const unsigned long globalIdx = threadIdx.x; // Fill shared parameters if (globalIdx < numberPeople) @@ -18,10 +18,10 @@ namespace op float maxValueY = 0.f; for (auto part = 0 ; part < numberParts ; part++) { - const auto index = 3 * (globalIdx*numberParts + part); - const auto x = keypointsPtr[index]; - const auto y = keypointsPtr[index+1]; - const auto score = keypointsPtr[index+2]; + const unsigned long index = 3u * (globalIdx*numberParts + part); + const float x = keypointsPtr[index]; + const float y = keypointsPtr[index+1]; + const float score = keypointsPtr[index+2]; if (score > threshold) { if (x < minValueX) @@ -62,7 +62,7 @@ namespace op __inline__ __device__ void renderKeypoints( float* targetPtr, float* sharedMaxs, float* sharedMins, float* sharedScaleF, const float* const maxPtr, const float* const minPtr, const float* const scalePtr, const int globalIdx, const int x, const int y, - const int targetWidth, const int targetHeight, const float* const keypointsPtr, + const unsigned int targetWidth, const unsigned int targetHeight, const float* const keypointsPtr, const unsigned int* const partPairsPtr, const int numberPeople, const int numberParts, const int numberPartPairs, const float* const rgbColorsPtr, const int numberColors, const float radius, const float lineWidth, const float* const keypointScalePtr, const int numberScales, const float threshold, @@ -82,7 +82,7 @@ namespace op // Fill each (x,y) target pixel if (x < targetWidth && y < targetHeight) { - const auto baseIndex = 3*(y * targetWidth + x); + const unsigned long baseIndex = 3u*(y * (unsigned long)targetWidth + x); float b = targetPtr[baseIndex]; float g = targetPtr[baseIndex+1]; float r = targetPtr[baseIndex+2]; @@ -208,7 +208,7 @@ namespace op __inline__ __device__ void renderKeypointsOld( float* targetPtr, float2* sharedMaxs, float2* sharedMins, float* sharedScaleF, const int globalIdx, - const int x, const int y, const int targetWidth, const int targetHeight, const float* const keypointsPtr, + const int x, const int y, const unsigned int targetWidth, const unsigned int targetHeight, const float* const keypointsPtr, const unsigned int* const partPairsPtr, const int numberPeople, const int numberParts, const int numberPartPairs, const float* const rgbColorsPtr, const int numberColors, const float radius, const float lineWidth, const float* const keypointScalePtr, const int numberScales, const float threshold, @@ -224,10 +224,10 @@ namespace op float maxValueY = 0.f; for (auto part = 0 ; part < numberParts ; part++) { - const auto index = 3 * (globalIdx*numberParts + part); - const auto x = keypointsPtr[index]; - const auto y = keypointsPtr[index+1]; - const auto score = keypointsPtr[index+2]; + const unsigned long index = 3u * (((unsigned long)globalIdx)*numberParts + part); + const float x = keypointsPtr[index]; + const float y = keypointsPtr[index+1]; + const float score = keypointsPtr[index+2]; if (score > threshold) { if (x < minValueX) @@ -263,7 +263,7 @@ namespace op // Fill each (x,y) target pixel if (x < targetWidth && y < targetHeight) { - const auto baseIndex = 3*(y * targetWidth + x); + const unsigned long baseIndex = 3u*(y * (unsigned long)targetWidth + x); float b = targetPtr[baseIndex]; float g = targetPtr[baseIndex+1]; float r = targetPtr[baseIndex+2]; diff --git a/src/openpose/face/faceGpuRenderer.cpp b/src/openpose/face/faceGpuRenderer.cpp index 9b243e20..0d1385bd 100644 --- a/src/openpose/face/faceGpuRenderer.cpp +++ b/src/openpose/face/faceGpuRenderer.cpp @@ -83,7 +83,7 @@ namespace op // I prefer std::round(T&) over positiveIntRound(T) for std::atomic const auto elementRendered = spElementToRender->load(); const auto numberPeople = faceKeypoints.getSize(0); - const Point frameSize{outputData.getSize(1), outputData.getSize(0)}; + const Point frameSize{(unsigned int)outputData.getSize(1), (unsigned int)outputData.getSize(0)}; if (numberPeople > 0 && elementRendered == 0) { // Draw faceKeypoints diff --git a/src/openpose/face/renderFace.cu b/src/openpose/face/renderFace.cu index 834e35a9..5328d960 100644 --- a/src/openpose/face/renderFace.cu +++ b/src/openpose/face/renderFace.cu @@ -46,7 +46,7 @@ namespace op } void renderFaceKeypointsGpu( - float* framePtr, float* maxPtr, float* minPtr, float* scalePtr, const Point& frameSize, + float* framePtr, float* maxPtr, float* minPtr, float* scalePtr, const Point& frameSize, const float* const facePtr, const int numberPeople, const float renderThreshold, const float alphaColorToAdd) { try diff --git a/src/openpose/gpu/cuda.cpp b/src/openpose/gpu/cuda.cpp index c47dd4bf..9529321f 100644 --- a/src/openpose/gpu/cuda.cpp +++ b/src/openpose/gpu/cuda.cpp @@ -8,16 +8,11 @@ namespace op { #ifdef USE_CUDA - #ifdef DNDEBUG - #define base 32 - #else - #define base 64 - #endif - const dim3 THREADS_PER_BLOCK_TINY{base, base, 1}; // 32 |64 - const dim3 THREADS_PER_BLOCK_SMALL{2*base, 2*base, 1}; // 64 |128 - const dim3 THREADS_PER_BLOCK_MEDIUM{4*base, 4*base, 1}; // 128|256 - const dim3 THREADS_PER_BLOCK_BIG{8*base, 8*base, 1}; // 256|512 - const dim3 THREADS_PER_BLOCK_HUGE{16*base, 16*base, 1}; // 512|1024 + const dim3 THREADS_PER_BLOCK_TINY {32, 32, 1}; + const dim3 THREADS_PER_BLOCK_SMALL {64, 64, 1}; + const dim3 THREADS_PER_BLOCK_MEDIUM{128, 128, 1}; + const dim3 THREADS_PER_BLOCK_BIG {256, 256, 1}; + const dim3 THREADS_PER_BLOCK_HUGE {256, 256, 1}; #endif void cudaCheck(const int line, const std::string& function, const std::string& file) @@ -65,7 +60,7 @@ namespace op } } - void getNumberCudaThreadsAndBlocks(dim3& numberCudaThreads, dim3& numberCudaBlocks, const Point& frameSize) + void getNumberCudaThreadsAndBlocks(dim3& numberCudaThreads, dim3& numberCudaBlocks, const Point& frameSize) { try { @@ -93,8 +88,8 @@ namespace op else numberCudaThreads = THREADS_PER_BLOCK_TINY; // numberCudaBlocks - numberCudaBlocks = dim3{getNumberCudaBlocks((unsigned int)frameSize.x, numberCudaThreads.x), - getNumberCudaBlocks((unsigned int)frameSize.y, numberCudaThreads.y), + numberCudaBlocks = dim3{getNumberCudaBlocks(frameSize.x, numberCudaThreads.x), + getNumberCudaBlocks(frameSize.y, numberCudaThreads.y), numberCudaThreads.z}; #else UNUSED(numberCudaThreads); diff --git a/src/openpose/hand/handGpuRenderer.cpp b/src/openpose/hand/handGpuRenderer.cpp index 166d93a1..bab8f4c6 100644 --- a/src/openpose/hand/handGpuRenderer.cpp +++ b/src/openpose/hand/handGpuRenderer.cpp @@ -84,7 +84,7 @@ namespace op // I prefer std::round(T&) over positiveIntRound(T) for std::atomic const auto elementRendered = spElementToRender->load(); const auto numberPeople = handKeypoints[0].getSize(0); - const Point frameSize{outputData.getSize(1), outputData.getSize(0)}; + const Point frameSize{(unsigned int)outputData.getSize(1), (unsigned int)outputData.getSize(0)}; // GPU rendering if (numberPeople > 0 && elementRendered == 0) { diff --git a/src/openpose/hand/renderHand.cu b/src/openpose/hand/renderHand.cu index b0715d91..079bbcd2 100644 --- a/src/openpose/hand/renderHand.cu +++ b/src/openpose/hand/renderHand.cu @@ -46,7 +46,7 @@ namespace op } void renderHandKeypointsGpu( - float* framePtr, float* maxPtr, float* minPtr, float* scalePtr, const Point& frameSize, + float* framePtr, float* maxPtr, float* minPtr, float* scalePtr, const Point& frameSize, const float* const handsPtr, const int numberHands, const float renderThreshold, const float alphaColorToAdd) { try diff --git a/src/openpose/pose/poseGpuRenderer.cpp b/src/openpose/pose/poseGpuRenderer.cpp index e64130a1..0d8f25a6 100644 --- a/src/openpose/pose/poseGpuRenderer.cpp +++ b/src/openpose/pose/poseGpuRenderer.cpp @@ -110,7 +110,7 @@ namespace op const auto hasBkg = addBkgChannel(mPoseModel); const auto numberBodyPartsPlusBkg = numberBodyParts + (hasBkg ? 1 : 0); const auto numberBodyPAFChannels = getPosePartPairs(mPoseModel).size(); - const Point frameSize{outputData.getSize(1), outputData.getSize(0)}; + const Point frameSize{(unsigned int)outputData.getSize(1), (unsigned int)outputData.getSize(0)}; // Draw poseKeypoints if (elementRendered == 0) { diff --git a/src/openpose/pose/renderPose.cu b/src/openpose/pose/renderPose.cu index 25a61a1c..83c11e49 100644 --- a/src/openpose/pose/renderPose.cu +++ b/src/openpose/pose/renderPose.cu @@ -119,7 +119,7 @@ namespace op } __global__ void getBoundingBoxPerPersonPose( - float* maxPtr, float* minPtr, float* scalePtr,const int targetWidth, const int targetHeight, + float* maxPtr, float* minPtr, float* scalePtr,const unsigned int targetWidth, const unsigned int targetHeight, const float* const keypointsPtr, const int numberPeople, const int numberParts, const float threshold) { getBoundingBoxPerPerson( @@ -127,9 +127,9 @@ namespace op } __global__ void renderPoseCoco( - float* targetPtr, float* minPtr, float* maxPtr, float* scalePtr, const int targetWidth, const int targetHeight, - const float* const posePtr, const int numberPeople, const float threshold, const bool googlyEyes, - const bool blendOriginalFrame, const float alphaColorToAdd) + float* targetPtr, float* minPtr, float* maxPtr, float* scalePtr, const unsigned int targetWidth, + const unsigned int targetHeight, const float* const posePtr, const int numberPeople, const float threshold, + const bool googlyEyes, const bool blendOriginalFrame, const float alphaColorToAdd) { const auto x = (blockIdx.x * blockDim.x) + threadIdx.x; const auto y = (blockIdx.y * blockDim.y) + threadIdx.y; @@ -159,9 +159,9 @@ namespace op } __global__ void renderPoseBody19( - float* targetPtr, float* minPtr, float* maxPtr, float* scalePtr, const int targetWidth, const int targetHeight, - const float* const posePtr, const int numberPeople, const float threshold, const bool googlyEyes, - const bool blendOriginalFrame, const float alphaColorToAdd) + float* targetPtr, float* minPtr, float* maxPtr, float* scalePtr, const unsigned int targetWidth, + const unsigned int targetHeight, const float* const posePtr, const int numberPeople, const float threshold, + const bool googlyEyes, const bool blendOriginalFrame, const float alphaColorToAdd) { const auto x = (blockIdx.x * blockDim.x) + threadIdx.x; const auto y = (blockIdx.y * blockDim.y) + threadIdx.y; @@ -192,9 +192,9 @@ namespace op } __global__ void renderPoseBody23( - float* targetPtr, float* minPtr, float* maxPtr, float* scalePtr, const int targetWidth, const int targetHeight, - const float* const posePtr, const int numberPeople, const float threshold, const bool googlyEyes, - const bool blendOriginalFrame, const float alphaColorToAdd) + float* targetPtr, float* minPtr, float* maxPtr, float* scalePtr, const unsigned int targetWidth, + const unsigned int targetHeight, const float* const posePtr, const int numberPeople, const float threshold, + const bool googlyEyes, const bool blendOriginalFrame, const float alphaColorToAdd) { const auto x = (blockIdx.x * blockDim.x) + threadIdx.x; const auto y = (blockIdx.y * blockDim.y) + threadIdx.y; @@ -257,9 +257,9 @@ namespace op } __global__ void renderPoseBody25b( - float* targetPtr, float* minPtr, float* maxPtr, float* scalePtr, const int targetWidth, const int targetHeight, - const float* const posePtr, const int numberPeople, const float threshold, const bool googlyEyes, - const bool blendOriginalFrame, const float alphaColorToAdd) + float* targetPtr, float* minPtr, float* maxPtr, float* scalePtr, const unsigned int targetWidth, + const unsigned int targetHeight, const float* const posePtr, const int numberPeople, const float threshold, + const bool googlyEyes, const bool blendOriginalFrame, const float alphaColorToAdd) { const auto x = (blockIdx.x * blockDim.x) + threadIdx.x; const auto y = (blockIdx.y * blockDim.y) + threadIdx.y; @@ -289,9 +289,9 @@ namespace op } __global__ void renderPoseBody135( - float* targetPtr, float* minPtr, float* maxPtr, float* scalePtr, const int targetWidth, const int targetHeight, - const float* const posePtr, const int numberPeople, const float threshold, const bool googlyEyes, - const bool blendOriginalFrame, const float alphaColorToAdd) + float* targetPtr, float* minPtr, float* maxPtr, float* scalePtr, const unsigned int targetWidth, + const unsigned int targetHeight, const float* const posePtr, const int numberPeople, const float threshold, + const bool googlyEyes, const bool blendOriginalFrame, const float alphaColorToAdd) { const auto x = (blockIdx.x * blockDim.x) + threadIdx.x; const auto y = (blockIdx.y * blockDim.y) + threadIdx.y; @@ -321,9 +321,9 @@ namespace op } __global__ void renderPoseMpi29Parts( - float* targetPtr, float* minPtr, float* maxPtr, float* scalePtr, const int targetWidth, const int targetHeight, - const float* const posePtr, const int numberPeople, const float threshold, const bool blendOriginalFrame, - const float alphaColorToAdd) + float* targetPtr, float* minPtr, float* maxPtr, float* scalePtr, const unsigned int targetWidth, + const unsigned int targetHeight, const float* const posePtr, const int numberPeople, const float threshold, + const bool blendOriginalFrame, const float alphaColorToAdd) { const auto x = (blockIdx.x * blockDim.x) + threadIdx.x; const auto y = (blockIdx.y * blockDim.y) + threadIdx.y; @@ -353,9 +353,9 @@ namespace op } __global__ void renderPoseCar12( - float* targetPtr, float* minPtr, float* maxPtr, float* scalePtr, const int targetWidth, const int targetHeight, - const float* const posePtr, const int numberPeople, const float threshold, const bool googlyEyes, - const bool blendOriginalFrame, const float alphaColorToAdd) + float* targetPtr, float* minPtr, float* maxPtr, float* scalePtr, const unsigned int targetWidth, + const unsigned int targetHeight, const float* const posePtr, const int numberPeople, const float threshold, + const bool googlyEyes, const bool blendOriginalFrame, const float alphaColorToAdd) { const auto x = (blockIdx.x * blockDim.x) + threadIdx.x; const auto y = (blockIdx.y * blockDim.y) + threadIdx.y; @@ -385,9 +385,9 @@ namespace op } __global__ void renderPoseCar22( - float* targetPtr, float* minPtr, float* maxPtr, float* scalePtr, const int targetWidth, const int targetHeight, - const float* const posePtr, const int numberPeople, const float threshold, const bool googlyEyes, - const bool blendOriginalFrame, const float alphaColorToAdd) + float* targetPtr, float* minPtr, float* maxPtr, float* scalePtr, const unsigned int targetWidth, + const unsigned int targetHeight, const float* const posePtr, const int numberPeople, const float threshold, + const bool googlyEyes, const bool blendOriginalFrame, const float alphaColorToAdd) { const auto x = (blockIdx.x * blockDim.x) + threadIdx.x; const auto y = (blockIdx.y * blockDim.y) + threadIdx.y; @@ -416,10 +416,10 @@ namespace op blendOriginalFrame, (googlyEyes ? 6 : -1), (googlyEyes ? 7 : -1)); } - __global__ void renderBodyPartHeatMaps(float* targetPtr, const int targetWidth, const int targetHeight, - const float* const heatMapPtr, const int widthHeatMap, - const int heightHeatMap, const float scaleToKeepRatio, - const int numberBodyParts, const float alphaColorToAdd) + __global__ void renderBodyPartHeatMaps( + float* targetPtr, const unsigned int targetWidth, const unsigned int targetHeight, + const float* const heatMapPtr, const int widthHeatMap, const int heightHeatMap, const float scaleToKeepRatio, + const int numberBodyParts, const float alphaColorToAdd) { const auto x = (blockIdx.x * blockDim.x) + threadIdx.x; const auto y = (blockIdx.y * blockDim.y) + threadIdx.y; @@ -451,10 +451,10 @@ namespace op } } - __global__ void renderBodyPartHeatMap(float* targetPtr, const int targetWidth, const int targetHeight, - const float* const heatMapPtr, const int widthHeatMap, - const int heightHeatMap, const float scaleToKeepRatio, const unsigned int part, - const float alphaColorToAdd, const bool absValue = false) + __global__ void renderBodyPartHeatMap( + float* targetPtr, const unsigned int targetWidth, const unsigned int targetHeight, + const float* const heatMapPtr, const int widthHeatMap, const int heightHeatMap, const float scaleToKeepRatio, + const unsigned int part, const float alphaColorToAdd, const bool absValue = false) { const auto x = (blockIdx.x * blockDim.x) + threadIdx.x; const auto y = (blockIdx.y * blockDim.y) + threadIdx.y; @@ -479,10 +479,10 @@ namespace op } } - __global__ void renderPartAffinities(float* targetPtr, const int targetWidth, const int targetHeight, - const float* const heatMapPtr, const int widthHeatMap, - const int heightHeatMap, const float scaleToKeepRatio, - const int partsToRender, const int initPart, const float alphaColorToAdd) + __global__ void renderPartAffinities( + float* targetPtr, const unsigned int targetWidth, const unsigned int targetHeight, + const float* const heatMapPtr, const int widthHeatMap, const int heightHeatMap, + const float scaleToKeepRatio, const int partsToRender, const int initPart, const float alphaColorToAdd) { const auto x = (blockIdx.x * blockDim.x) + threadIdx.x; const auto y = (blockIdx.y * blockDim.y) + threadIdx.y; @@ -546,10 +546,11 @@ namespace op } } - __global__ void renderDistance(float* targetPtr, const int targetWidth, const int targetHeight, - const float* const heatMapPtr, const int widthHeatMap, const int heightHeatMap, - const float scaleToKeepRatio, const int part, const int numberBodyParts, - const int numberBodyPAFChannels, const float alphaColorToAdd) + __global__ void renderDistance( + float* targetPtr, const unsigned int targetWidth, const unsigned int targetHeight, + const float* const heatMapPtr, const int widthHeatMap, const int heightHeatMap, + const float scaleToKeepRatio, const int part, const int numberBodyParts, const int numberBodyPAFChannels, + const float alphaColorToAdd) { const auto x = (blockIdx.x * blockDim.x) + threadIdx.x; const auto y = (blockIdx.y * blockDim.y) + threadIdx.y; @@ -580,7 +581,7 @@ namespace op error("Alpha must be in the range [0, 1].", __LINE__, __FUNCTION__, __FILE__); } - inline void renderPosePAFGpuAux(float* framePtr, const PoseModel poseModel, const Point& frameSize, + inline void renderPosePAFGpuAux(float* framePtr, const PoseModel poseModel, const Point& frameSize, const float* const heatMapPtr, const Point& heatMapSize, const float scaleToKeepRatio, const int part, const int partsToRender, const float alphaBlending) @@ -607,7 +608,7 @@ namespace op void renderPoseKeypointsGpu( float* framePtr, float* maxPtr, float* minPtr, float* scalePtr, const PoseModel poseModel, - const int numberPeople, const Point& frameSize, const float* const posePtr, + const int numberPeople, const Point& frameSize, const float* const posePtr, const float renderThreshold, const bool googlyEyes, const bool blendOriginalFrame, const float alphaBlending) { try @@ -747,9 +748,9 @@ namespace op } } - void renderPoseHeatMapGpu(float* framePtr, const Point& frameSize, const float* const heatMapPtr, - const Point& heatMapSize, const float scaleToKeepRatio, const unsigned int part, - const float alphaBlending) + void renderPoseHeatMapGpu( + float* framePtr, const Point& frameSize, const float* const heatMapPtr, + const Point& heatMapSize, const float scaleToKeepRatio, const unsigned int part, const float alphaBlending) { try { @@ -772,7 +773,7 @@ namespace op } } - void renderPoseHeatMapsGpu(float* framePtr, const PoseModel poseModel, const Point& frameSize, + void renderPoseHeatMapsGpu(float* framePtr, const PoseModel poseModel, const Point& frameSize, const float* const heatMapPtr, const Point& heatMapSize, const float scaleToKeepRatio, const float alphaBlending) { @@ -800,7 +801,7 @@ namespace op } void renderPosePAFGpu( - float* framePtr, const PoseModel poseModel, const Point& frameSize, const float* const heatMapPtr, + float* framePtr, const PoseModel poseModel, const Point& frameSize, const float* const heatMapPtr, const Point& heatMapSize, const float scaleToKeepRatio, const int part, const float alphaBlending) { try @@ -815,7 +816,7 @@ namespace op } void renderPosePAFsGpu( - float* framePtr, const PoseModel poseModel, const Point& frameSize, const float* const heatMapPtr, + float* framePtr, const PoseModel poseModel, const Point& frameSize, const float* const heatMapPtr, const Point& heatMapSize, const float scaleToKeepRatio, const float alphaBlending) { try @@ -833,7 +834,7 @@ namespace op } void renderPoseDistanceGpu( - float* framePtr, const Point& frameSize, const float* const heatMapPtr, const Point& heatMapSize, + float* framePtr, const Point& frameSize, const float* const heatMapPtr, const Point& heatMapSize, const float scaleToKeepRatio, const unsigned int part, const float alphaBlending) { try