Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Obtain labels for keypoints #77

Closed
aakaashjois opened this issue Jul 9, 2018 · 2 comments
Closed

Obtain labels for keypoints #77

aakaashjois opened this issue Jul 9, 2018 · 2 comments

Comments

@aakaashjois
Copy link

I followed the demo.ipynb notebook to obtain the key points. I am trying to label each key point detected in the image. But, I am not able to figure out how to do that from the data in all_peaks.

The all_peaks list is something like,

[[(417, 162, 0.23725834488868713, 0)], [(438, 264, 0.22009609639644623, 1)], [(360, 260, 0.22483864426612854, 2)], [(310, 435, 0.22168569266796112, 3)], [(302, 596, 0.23836150765419006, 4)], [(511, 270, 0.2024109661579132, 5)], [], [], [(388, 580, 0.18829642236232758, 6)], [(381, 824, 0.2216421663761139, 7)], [], [(503, 577, 0.19702039659023285, 8)], [(528, 828, 0.21746164560317993, 9)], [], [(406, 140, 0.2475488781929016, 10)], [(444, 141, 0.23833531141281128, 11)], [], [(487, 159, 0.22596435248851776, 12)]]

From what I have understood, the last element in each item of the list is the label index for the keypoint. But when a certain feature is not detected, the item is empty. So I am not able to figure out how to label the keypoints.

Can anyone help me out with this?

@michalfaber
Copy link
Owner

Hi @aakaashjois
all_peaks is an 18 element list where each item is a sublist of body parts. The sublist contains information about detected body parts of a single type. So all_peaks[0] contains all detected noses, all_peaks[1] - all detected necks, etc. For example first detected nose is at all_peaks[0][0] - it is a tuple (444, 141, 0.23833531141281128, 11) where the first 2 items are coordinates, the third element is a score and the last element is an identifier which is a sequence number (it can be any unique number)
This id is used in this part of code:

get the body parts of type A and B

candA = all_peaks[limbSeq[k][0]-1]
candB = all_peaks[limbSeq[k][1]-1]

create a connection [id of body part A, id of body part B, …]

connection = np.vstack([connection, [candA[i][3], candB[j][3], s, i, j]])

Those identifiers are used to find valid connections. Take a look at the code for example

if subset[j][indexA] == partAs[i] or subset[j][indexB] == partBs[i]:
    subset_idx[found] = j
    found += 1

Indeed, when there is no detected body part the sublist is empty

@aakaashjois
Copy link
Author

Hey @michalfaber
I was able to find the labels for the key points in the config file. I am able to get a better understanding of the code now. Thank you so much for the clarification!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants