Как получить координаты x, y точек, присутствующих в кафе с глубоким обучением python - PullRequest
1 голос
/ 26 января 2020

Я недавно начал узнавать о распознавании частей тела человека, используя python, поэтому я выбрал Caffe для этого. Я успешно запустил программу, которая производит вывод двух изображений. Один с ключевыми точками и второй Скелтон.

Я хочу знать о координатах x, y, найденных с помощью Caffe. Вот программа, которую я использую.

 protoFile = r"D:\pose_deploy_linevec.prototxt"
 weightsFile = r"D:\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]]

frame = cv2.imread(r"C:\Downloads\vinnie1.jpg")
frameCopy = np.copy(frame)
frameWidth = frame.shape[1]
frameHeight = frame.shape[0]
threshold = 0.1

net = cv2.dnn.readNetFromCaffe(protoFile, weightsFile)

t = time.time()

# input image dimensions for the network
inWidth = 368
inHeight = 368
inpBlob = cv2.dnn.blobFromImage(frame, 1.0 / 255, (inWidth, inHeight),
                          (0, 0, 0), swapRB=False, crop=False)

net.setInput(inpBlob)

output = net.forward()
print("time taken by network : {:.3f}".format(time.time() - t))

H = output.shape[2]
W = output.shape[3]

# Empty list to store the detected keypoints
points = []

for i in range(nPoints):
    # confidence map of corresponding body's part.
    probMap = output[0, i, :, :]

    # Find global maxima of the probMap.
    minVal, prob, minLoc, point = cv2.minMaxLoc(probMap)

    # Scale the point to fit on the original image
    x = (frameWidth * point[0]) / W
    y = (frameHeight * point[1]) / H

    if prob > threshold : 
        cv2.circle(frameCopy, (int(x), int(y)), 8, (0, 255, 255), thickness=-1, lineType=cv2.FILLED)
        cv2.putText(frameCopy, "{}".format(i), (int(x), int(y)), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2, lineType=cv2.LINE_AA)

        # Add the point to the list if the probability is greater than the threshold
        points.append((int(x), int(y)))
    else :
        points.append(None)

for pair in POSE_PAIRS:
    partA = pair[0]
    partB = pair[1]
    print("pair=> ", pair)
    print("pair[0]=> ", pair[0])
    print("pair[1]=> ", pair[1])
    print("points[partA] => ", points[partA])

    if points[partA] and points[partB]:
        cv2.line(frame, points[partA], points[partB], (0, 255, 255), 2)
        cv2.circle(frame, points[partA], 8, (0, 0, 255), thickness=-1, lineType=cv2.FILLED)

Я хочу узнать из координат глаза человека на изображении. То есть настоящие пары. Я получаю координаты пары [0,1] и других пар. Будет замечательно, если кто-то или внесет предложения для меня, или даст решения. спасибо заранее

...