鼻子– 0,颈部– 1,
右肩– 2,右肘– 3,右手腕– 4,
左肩– 5,左肘– 6,左手腕– 7,
右臀部– 8,右膝– 9 , 右脚踝 – 10,
左臀部 – 11, 左膝盖 – 12, 左脚踝 – 13,
右眼 – 14, 左眼 – 15, 右耳 – 16, 左耳 – 17,
背景 – 18
头 – 0,颈部 - 1,
右肩 - 2,右肘 - 3,右手腕 - 4,
左肩 - 5,左肘 - 6,左手腕 - 7,
右臀部 - 8,右膝盖 - 9,右脚踝 - 10,
左臀部 - 11,左膝 - 12,左脚踝 - 13,
胸部 - 14,背景 - 15
if MODE is "COCO":
protoFile = "pose/coco/pose_deploy_linevec.prototxt"
weightsFile = "pose/coco/pose_iter_440000.caffemodel"
nPoints = 18
POSE_PAIRS = [ [1,0],[1,2],[1,5],[2,3],[3,4],[5,6],[6,7],[1,8],[8,9],[9,10],[1,11],[11,12],[12,13],[0,14],[0,15],[14,16],[15,17]]
elif MODE is "MPI" :
protoFile = "pose/mpi/pose_deploy_linevec_faster_4_stages.prototxt"
weightsFile = "pose/mpi/pose_iter_160000.caffemodel"
nPoints = 15
POSE_PAIRS = [[0,1], [1,2], [2,3], [3,4], [1,5], [5,6], [6,7], [1,14], [14,8], [8,9], [9,10], [14,11], [11,12], [12,13] ]
.prototxt 文件,它指定了神经网络的架构——不同层的排列方式等。
.caffemodel 文件,用于存储训练模型的权重
函数cv2.dnn.blobFromImage(image[, scalefactor[, size[, mean[, swapRB[, crop[, ddepth]]]]]])
平均值(mean)
缩放系数(scalefactor)
交换RB通道(swapRB)
图像裁剪(crop)
blobFromImage(InputArray image,
double scalefactor=1.0,
const Size& size = Size(),
const Scalar& mean = Scalar(),
bool swapRB = false,
bool crop = false,
int ddepth = CV_32F)
inpBlob = cv2.dnn.blobFromImage(frame, 1.0 / 255, (inWidth, inHeight),
(0, 0, 0), swapRB=False, crop=False)
作用:
对图像进行预处理,包括减均值,比例缩放,裁剪,交换通道等,返回一个4通道的blob(blob可以简单理解为一个N维的数组,用于神经网络的输入)
各参数的意义
image
输入图像
scalefactor
当我们将图片减去平均值之后,还可以对剩下的像素值进行一定的尺度缩放,它的默认值是1,如果希望减去平均像素之后的值,全部缩小一半,那么可以将scalefactor设为1/2
mean
需要将图片整体减去的平均值,如果我们需要对RGB图片的三个通道分别减去不同的值,那么可以使用3组平均值,如果只使用一组,那么就默认对三个通道减去一样的值。减去平均值(mean):为了消除同一场景下不同光照的图片,对我们最终的分类或者神经网络的影响,我们常常对图片的R、G、B通道的像素求一个平均值,然后将每个像素值减去我们的平均值,这样就可以得到像素之间的相对值,就可以排除光照的影响。
swapRB
是否交换RB,OpenCV中认为我们的图片通道顺序是BGR,但是我平均值假设的顺序是RGB,所以如果需要交换R和G,那么就要使swapRB=true
crop
图像裁剪,默认为False.当值为True时,先按比例缩放,然后从中心裁剪成size尺寸
size
输出图像的空间尺寸,如size=(200,300),Width=200, Height=300
ddepth
当cv2.imshow()处理图像深度为CV_8U(默认范围为[0,255])时,按原数据显示;当处理图像深度为CV_16U(默认范围为[0,65535])时,除以256,映射到[0,255];当图像深度为CV_32F和CV_64F时(默认范围为[0,1]),乘以255映射到[0,255];当碰到负数时,首先取其绝对值,然后按照上述图像深度将超出数据范围的部分采取截断操作,最后映射到[0,255]显示图像