Swap left and right hand labels.

PiperOrigin-RevId: 557625660
This commit is contained in:
MediaPipe Team 2023-08-16 15:47:19 -07:00 committed by Copybara-Service
parent 13bb65db96
commit ed0c8d8d8b
23 changed files with 289 additions and 290 deletions

View File

@ -34,15 +34,15 @@ namespace api2 {
namespace {
using ::mediapipe::tasks::vision::gesture_recognizer::GetLeftHandScore;
using ::mediapipe::tasks::vision::gesture_recognizer::GetRightHandScore;
constexpr char kHandednessTag[] = "HANDEDNESS";
constexpr char kHandednessMatrixTag[] = "HANDEDNESS_MATRIX";
absl::StatusOr<std::unique_ptr<Matrix>> HandednessToMatrix(
const mediapipe::ClassificationList& classification_list) {
// Feature value is the probability that the hand is a left hand.
ASSIGN_OR_RETURN(float score, GetLeftHandScore(classification_list));
// Feature value is the probability that the hand is a right hand.
ASSIGN_OR_RETURN(float score, GetRightHandScore(classification_list));
auto matrix = Matrix(1, 1);
matrix(0, 0) = score;
auto result = std::make_unique<Matrix>();

View File

@ -38,10 +38,10 @@ mediapipe::ClassificationList ClassificationForHandedness(float handedness) {
mediapipe::ClassificationList result;
auto* h = result.add_classification();
if (handedness < 0.5f) {
h->set_label("Right");
h->set_label("Left");
h->set_score(1.0f - handedness);
} else {
h->set_label("Left");
h->set_label("Right");
h->set_score(handedness);
}
return result;
@ -84,8 +84,8 @@ TEST_P(HandednessToMatrixCalculatorTest, OutputsCorrectResult) {
INSTANTIATE_TEST_CASE_P(
HandednessToMatrixCalculatorTests, HandednessToMatrixCalculatorTest,
testing::ValuesIn<HandednessToMatrixCalculatorTestCase>(
{{/* test_name= */ "TestWithRightHand", /* handedness= */ 0.01f},
{/* test_name= */ "TestWithLeftHand", /* handedness= */ 0.99f}}),
{{/* test_name= */ "TestWithLeftHand", /* handedness= */ 0.01f},
{/* test_name= */ "TestWithRightHand", /* handedness= */ 0.99f}}),
[](const testing::TestParamInfo<
HandednessToMatrixCalculatorTest::ParamType>& info) {
return info.param.test_name;

View File

@ -37,7 +37,7 @@ bool IsRightHand(const Classification& c) {
return absl::EqualsIgnoreCase(c.label(), "Right");
}
absl::StatusOr<float> GetLeftHandScore(
absl::StatusOr<float> GetRightHandScore(
const ClassificationList& classification_list) {
auto classifications = classification_list.classification();
auto iter_max =
@ -50,9 +50,9 @@ absl::StatusOr<float> GetLeftHandScore(
RET_CHECK_GE(h.score(), 0.5f);
RET_CHECK_LE(h.score(), 1.0f);
if (IsLeftHand(h)) {
return h.score();
} else if (IsRightHand(h)) {
return 1.0f - h.score();
} else if (IsRightHand(h)) {
return h.score();
} else {
// Unrecognized handedness label.
RET_CHECK_FAIL() << "Unrecognized handedness: " << h.label();

View File

@ -28,7 +28,7 @@ bool IsLeftHand(const mediapipe::Classification& c);
bool IsRightHand(const mediapipe::Classification& c);
absl::StatusOr<float> GetLeftHandScore(
absl::StatusOr<float> GetRightHandScore(
const mediapipe::ClassificationList& classification_list);
} // namespace gesture_recognizer

View File

@ -26,49 +26,49 @@ namespace vision {
namespace gesture_recognizer {
namespace {
TEST(GetLeftHandScore, SingleLeftHandClassification) {
ClassificationList classifications;
auto& c = *classifications.add_classification();
c.set_label("Left");
c.set_score(0.6f);
MP_ASSERT_OK_AND_ASSIGN(float score, GetLeftHandScore(classifications));
EXPECT_FLOAT_EQ(score, 0.6f);
}
TEST(GetLeftHandScore, SingleRightHandClassification) {
TEST(GetRightHandScore, SingleRightHandClassification) {
ClassificationList classifications;
auto& c = *classifications.add_classification();
c.set_label("Right");
c.set_score(0.6f);
MP_ASSERT_OK_AND_ASSIGN(float score, GetRightHandScore(classifications));
EXPECT_FLOAT_EQ(score, 0.6f);
}
TEST(GetRightHandScore, SingleLeftHandClassification) {
ClassificationList classifications;
auto& c = *classifications.add_classification();
c.set_label("Left");
c.set_score(0.9f);
MP_ASSERT_OK_AND_ASSIGN(float score, GetLeftHandScore(classifications));
MP_ASSERT_OK_AND_ASSIGN(float score, GetRightHandScore(classifications));
EXPECT_FLOAT_EQ(score, 0.1f);
}
TEST(GetLeftHandScore, LeftAndRightHandClassification) {
TEST(GetRightHandScore, LeftAndRightHandClassification) {
ClassificationList classifications;
auto& right = *classifications.add_classification();
right.set_label("Right");
right.set_label("Left");
right.set_score(0.9f);
auto& left = *classifications.add_classification();
left.set_label("Left");
left.set_label("Right");
left.set_score(0.1f);
MP_ASSERT_OK_AND_ASSIGN(float score, GetLeftHandScore(classifications));
MP_ASSERT_OK_AND_ASSIGN(float score, GetRightHandScore(classifications));
EXPECT_FLOAT_EQ(score, 0.1f);
}
TEST(GetLeftHandScore, LeftAndRightLowerCaseHandClassification) {
TEST(GetRightHandScore, LeftAndRightLowerCaseHandClassification) {
ClassificationList classifications;
auto& right = *classifications.add_classification();
right.set_label("right");
right.set_label("Left");
right.set_score(0.9f);
auto& left = *classifications.add_classification();
left.set_label("left");
left.set_label("Right");
left.set_score(0.1f);
MP_ASSERT_OK_AND_ASSIGN(float score, GetLeftHandScore(classifications));
MP_ASSERT_OK_AND_ASSIGN(float score, GetRightHandScore(classifications));
EXPECT_FLOAT_EQ(score, 0.1f);
}

View File

@ -76,8 +76,8 @@ using ::testing::proto::Partially;
constexpr char kTestDataDirectory[] = "/mediapipe/tasks/testdata/vision/";
constexpr char kPalmDetectionModel[] = "palm_detection_full.tflite";
constexpr char kTestRightHandsImage[] = "right_hands.jpg";
constexpr char kTestRightHandsRotatedImage[] = "right_hands_rotated.jpg";
constexpr char kTestLeftHandsImage[] = "left_hands.jpg";
constexpr char kTestLeftHandsRotatedImage[] = "left_hands_rotated.jpg";
constexpr char kTestModelResourcesTag[] = "test_model_resources";
constexpr char kOneHandResultFile[] = "hand_detector_result_one_hand.pbtxt";
@ -207,21 +207,21 @@ INSTANTIATE_TEST_SUITE_P(
HandDetectionTest, HandDetectionTest,
Values(TestParams{.test_name = "DetectOneHand",
.hand_detection_model_name = kPalmDetectionModel,
.test_image_name = kTestRightHandsImage,
.test_image_name = kTestLeftHandsImage,
.rotation = 0,
.num_hands = 1,
.expected_result =
GetExpectedHandDetectorResult(kOneHandResultFile)},
TestParams{.test_name = "DetectTwoHands",
.hand_detection_model_name = kPalmDetectionModel,
.test_image_name = kTestRightHandsImage,
.test_image_name = kTestLeftHandsImage,
.rotation = 0,
.num_hands = 2,
.expected_result =
GetExpectedHandDetectorResult(kTwoHandsResultFile)},
TestParams{.test_name = "DetectOneHandWithRotation",
.hand_detection_model_name = kPalmDetectionModel,
.test_image_name = kTestRightHandsRotatedImage,
.test_image_name = kTestLeftHandsRotatedImage,
.rotation = M_PI / 2.0f,
.num_hands = 1,
.expected_result = GetExpectedHandDetectorResult(

View File

@ -69,8 +69,8 @@ using ::testing::proto::Partially;
constexpr char kTestDataDirectory[] = "/mediapipe/tasks/testdata/vision/";
constexpr char kHandLandmarkerModelBundle[] = "hand_landmarker.task";
constexpr char kLeftHandsImage[] = "left_hands.jpg";
constexpr char kLeftHandsRotatedImage[] = "left_hands_rotated.jpg";
constexpr char kRightHandsImage[] = "right_hands.jpg";
constexpr char kRightHandsRotatedImage[] = "right_hands_rotated.jpg";
constexpr char kImageTag[] = "IMAGE";
constexpr char kImageName[] = "image_in";
@ -86,15 +86,15 @@ constexpr char kHandednessTag[] = "HANDEDNESS";
constexpr char kHandednessName[] = "handedness";
// Expected hand landmarks positions, in text proto format.
constexpr char kExpectedLeftUpHandLandmarksFilename[] =
"expected_left_up_hand_landmarks.prototxt";
constexpr char kExpectedLeftDownHandLandmarksFilename[] =
"expected_left_down_hand_landmarks.prototxt";
constexpr char kExpectedRightUpHandLandmarksFilename[] =
"expected_right_up_hand_landmarks.prototxt";
constexpr char kExpectedRightDownHandLandmarksFilename[] =
"expected_right_down_hand_landmarks.prototxt";
// Same but for the rotated image.
constexpr char kExpectedLeftUpHandRotatedLandmarksFilename[] =
"expected_left_up_hand_rotated_landmarks.prototxt";
constexpr char kExpectedLeftDownHandRotatedLandmarksFilename[] =
"expected_left_down_hand_rotated_landmarks.prototxt";
constexpr char kExpectedRightUpHandRotatedLandmarksFilename[] =
"expected_right_up_hand_rotated_landmarks.prototxt";
constexpr char kExpectedRightDownHandRotatedLandmarksFilename[] =
"expected_right_down_hand_rotated_landmarks.prototxt";
constexpr float kFullModelFractionDiff = 0.03; // percentage
constexpr float kAbsMargin = 0.03;
@ -141,8 +141,8 @@ class HandLandmarkerTest : public tflite::testing::Test {};
TEST_F(HandLandmarkerTest, Succeeds) {
MP_ASSERT_OK_AND_ASSIGN(
Image image,
DecodeImageFromFile(JoinPath("./", kTestDataDirectory, kLeftHandsImage)));
Image image, DecodeImageFromFile(
JoinPath("./", kTestDataDirectory, kRightHandsImage)));
NormalizedRect input_norm_rect;
input_norm_rect.set_x_center(0.5);
input_norm_rect.set_y_center(0.5);
@ -157,8 +157,8 @@ TEST_F(HandLandmarkerTest, Succeeds) {
.Get<std::vector<NormalizedLandmarkList>>();
ASSERT_EQ(landmarks.size(), kMaxNumHands);
std::vector<NormalizedLandmarkList> expected_landmarks = {
GetExpectedLandmarkList(kExpectedLeftUpHandLandmarksFilename),
GetExpectedLandmarkList(kExpectedLeftDownHandLandmarksFilename)};
GetExpectedLandmarkList(kExpectedRightUpHandLandmarksFilename),
GetExpectedLandmarkList(kExpectedRightDownHandLandmarksFilename)};
EXPECT_THAT(landmarks[0],
Approximately(Partially(EqualsProto(expected_landmarks[0])),
@ -173,7 +173,7 @@ TEST_F(HandLandmarkerTest, Succeeds) {
TEST_F(HandLandmarkerTest, SucceedsWithRotation) {
MP_ASSERT_OK_AND_ASSIGN(
Image image, DecodeImageFromFile(JoinPath("./", kTestDataDirectory,
kLeftHandsRotatedImage)));
kRightHandsRotatedImage)));
NormalizedRect input_norm_rect;
input_norm_rect.set_x_center(0.5);
input_norm_rect.set_y_center(0.5);
@ -189,8 +189,8 @@ TEST_F(HandLandmarkerTest, SucceedsWithRotation) {
.Get<std::vector<NormalizedLandmarkList>>();
ASSERT_EQ(landmarks.size(), kMaxNumHands);
std::vector<NormalizedLandmarkList> expected_landmarks = {
GetExpectedLandmarkList(kExpectedLeftUpHandRotatedLandmarksFilename),
GetExpectedLandmarkList(kExpectedLeftDownHandRotatedLandmarksFilename)};
GetExpectedLandmarkList(kExpectedRightUpHandRotatedLandmarksFilename),
GetExpectedLandmarkList(kExpectedRightDownHandRotatedLandmarksFilename)};
EXPECT_THAT(landmarks[0],
Approximately(Partially(EqualsProto(expected_landmarks[0])),

View File

@ -142,8 +142,8 @@ void ConfigureTensorsToHandednessCalculator(
LabelMapItem right_hand = LabelMapItem();
right_hand.set_name("Right");
right_hand.set_display_name("Right");
(*options->mutable_label_items())[0] = std::move(left_hand);
(*options->mutable_label_items())[1] = std::move(right_hand);
(*options->mutable_label_items())[0] = std::move(right_hand);
(*options->mutable_label_items())[1] = std::move(left_hand);
}
void ConfigureHandRectTransformationCalculator(

View File

@ -342,7 +342,7 @@ INSTANTIATE_TEST_SUITE_P(
.test_name = "HandLandmarkerLiteModelRightUpHand",
.input_model_name = kHandLandmarkerLiteModel,
.test_image_name = kRightHandsImage,
.hand_rect = MakeHandRect(0.25, 0.5, 0.5, 1.0, 0),
.hand_rect = MakeHandRect(0.75, 0.5, 0.5, 1.0, 0),
.expected_presence = true,
.expected_landmarks =
GetExpectedLandmarkList(kExpectedRightUpHandLandmarksFilename),
@ -352,7 +352,7 @@ INSTANTIATE_TEST_SUITE_P(
.test_name = "HandLandmarkerLiteModelRightDownHand",
.input_model_name = kHandLandmarkerLiteModel,
.test_image_name = kRightHandsImage,
.hand_rect = MakeHandRect(0.75, 0.5, 0.5, 1.0, M_PI),
.hand_rect = MakeHandRect(0.25, 0.5, 0.5, 1.0, M_PI),
.expected_presence = true,
.expected_landmarks = GetExpectedLandmarkList(
kExpectedRightDownHandLandmarksFilename),
@ -362,7 +362,7 @@ INSTANTIATE_TEST_SUITE_P(
.test_name = "HandLandmarkerFullModelRightUpHand",
.input_model_name = kHandLandmarkerFullModel,
.test_image_name = kRightHandsImage,
.hand_rect = MakeHandRect(0.25, 0.5, 0.5, 1.0, 0),
.hand_rect = MakeHandRect(0.75, 0.5, 0.5, 1.0, 0),
.expected_presence = true,
.expected_landmarks =
GetExpectedLandmarkList(kExpectedRightUpHandLandmarksFilename),
@ -372,7 +372,7 @@ INSTANTIATE_TEST_SUITE_P(
.test_name = "HandLandmarkerFullModelRightDownHand",
.input_model_name = kHandLandmarkerFullModel,
.test_image_name = kRightHandsImage,
.hand_rect = MakeHandRect(0.75, 0.5, 0.5, 1.0, M_PI),
.hand_rect = MakeHandRect(0.25, 0.5, 0.5, 1.0, M_PI),
.expected_presence = true,
.expected_landmarks = GetExpectedLandmarkList(
kExpectedRightDownHandLandmarksFilename),
@ -382,7 +382,7 @@ INSTANTIATE_TEST_SUITE_P(
.test_name = "HandLandmarkerLiteModelLeftUpHand",
.input_model_name = kHandLandmarkerLiteModel,
.test_image_name = kLeftHandsImage,
.hand_rect = MakeHandRect(0.75, 0.5, 0.5, 1.0, 0),
.hand_rect = MakeHandRect(0.25, 0.5, 0.5, 1.0, 0),
.expected_presence = true,
.expected_landmarks =
GetExpectedLandmarkList(kExpectedLeftUpHandLandmarksFilename),
@ -392,7 +392,7 @@ INSTANTIATE_TEST_SUITE_P(
.test_name = "HandLandmarkerLiteModelLeftDownHand",
.input_model_name = kHandLandmarkerLiteModel,
.test_image_name = kLeftHandsImage,
.hand_rect = MakeHandRect(0.25, 0.5, 0.5, 1.0, M_PI),
.hand_rect = MakeHandRect(0.75, 0.5, 0.5, 1.0, M_PI),
.expected_presence = true,
.expected_landmarks =
GetExpectedLandmarkList(kExpectedLeftDownHandLandmarksFilename),
@ -402,7 +402,7 @@ INSTANTIATE_TEST_SUITE_P(
.test_name = "HandLandmarkerFullModelLeftUpHand",
.input_model_name = kHandLandmarkerFullModel,
.test_image_name = kLeftHandsImage,
.hand_rect = MakeHandRect(0.75, 0.5, 0.5, 1.0, 0),
.hand_rect = MakeHandRect(0.25, 0.5, 0.5, 1.0, 0),
.expected_presence = true,
.expected_landmarks =
GetExpectedLandmarkList(kExpectedLeftUpHandLandmarksFilename),
@ -412,7 +412,7 @@ INSTANTIATE_TEST_SUITE_P(
.test_name = "HandLandmarkerFullModelLeftDownHand",
.input_model_name = kHandLandmarkerFullModel,
.test_image_name = kLeftHandsImage,
.hand_rect = MakeHandRect(0.25, 0.5, 0.5, 1.0, M_PI),
.hand_rect = MakeHandRect(0.75, 0.5, 0.5, 1.0, M_PI),
.expected_presence = true,
.expected_landmarks =
GetExpectedLandmarkList(kExpectedLeftDownHandLandmarksFilename),
@ -431,8 +431,8 @@ INSTANTIATE_TEST_SUITE_P(
.test_image_name = kRightHandsImage,
.hand_rects =
{
MakeHandRect(0.25, 0.5, 0.5, 1.0, 0),
MakeHandRect(0.75, 0.5, 0.5, 1.0, M_PI),
MakeHandRect(0.75, 0.5, 0.5, 1.0, 0),
MakeHandRect(0.25, 0.5, 0.5, 1.0, M_PI),
},
.expected_presences = {true, true},
.expected_landmark_lists =
@ -449,8 +449,8 @@ INSTANTIATE_TEST_SUITE_P(
.test_image_name = kLeftHandsImage,
.hand_rects =
{
MakeHandRect(0.75, 0.5, 0.5, 1.0, 0),
MakeHandRect(0.25, 0.5, 0.5, 1.0, M_PI),
MakeHandRect(0.25, 0.5, 0.5, 1.0, 0),
MakeHandRect(0.75, 0.5, 0.5, 1.0, M_PI),
},
.expected_presences = {true, true},
.expected_landmark_lists =

View File

@ -107,7 +107,6 @@ exports_files(
"expected_left_down_hand_landmarks.prototxt",
"expected_left_down_hand_rotated_landmarks.prototxt",
"expected_left_up_hand_landmarks.prototxt",
"expected_left_up_hand_rotated_landmarks.prototxt",
"expected_right_down_hand_landmarks.prototxt",
"expected_right_up_hand_landmarks.prototxt",
"face_geometry_expected_out.pbtxt",
@ -214,12 +213,12 @@ filegroup(
name = "test_protos",
srcs = [
"expected_left_down_hand_landmarks.prototxt",
"expected_left_down_hand_rotated_landmarks.prototxt",
"expected_left_up_hand_landmarks.prototxt",
"expected_left_up_hand_rotated_landmarks.prototxt",
"expected_pose_landmarks.prototxt",
"expected_right_down_hand_landmarks.prototxt",
"expected_right_down_hand_rotated_landmarks.prototxt",
"expected_right_up_hand_landmarks.prototxt",
"expected_right_up_hand_rotated_landmarks.prototxt",
"face_geometry_expected_out.pbtxt",
"fist_landmarks.pbtxt",
"hand_detector_result_one_hand.pbtxt",

View File

@ -1,84 +1,84 @@
landmark {
x: 0.19942205
y: 0.09026158
x: 0.8055556
y: 0.08900524
}
landmark {
x: 0.29673815
y: 0.1236096
x: 0.7
y: 0.13089006
}
landmark {
x: 0.35452557
y: 0.24131873
x: 0.6375
y: 0.2460733
}
landmark {
x: 0.39504135
y: 0.3613678
x: 0.59583336
y: 0.38219896
}
landmark {
x: 0.4381017
y: 0.44257507
x: 0.55138886
y: 0.4764398
}
landmark {
x: 0.30564976
y: 0.43276948
x: 0.70416665
y: 0.43717277
}
landmark {
x: 0.33376893
y: 0.6287609
x: 0.6652778
y: 0.64136124
}
landmark {
x: 0.34690586
y: 0.7581718
x: 0.6513889
y: 0.7643979
}
landmark {
x: 0.3569131
y: 0.85597074
x: 0.64444447
y: 0.8638743
}
landmark {
x: 0.24617499
y: 0.4616468
x: 0.7569444
y: 0.4712042
}
landmark {
x: 0.25602233
y: 0.6825256
x: 0.7416667
y: 0.6937173
}
landmark {
x: 0.25772986
y: 0.8347353
x: 0.74027777
y: 0.83507854
}
landmark {
x: 0.25762093
y: 0.949471
x: 0.74444443
y: 0.9424084
}
landmark {
x: 0.18984047
y: 0.45083284
x: 0.80694443
y: 0.45026177
}
landmark {
x: 0.18280011
y: 0.65619284
x: 0.81527776
y: 0.65968585
}
landmark {
x: 0.17377229
y: 0.7914928
x: 0.82361114
y: 0.79581153
}
landmark {
x: 0.16702436
y: 0.89128083
x: 0.83194447
y: 0.90575916
}
landmark {
x: 0.14224908
y: 0.41272494
x: 0.8541667
y: 0.43979058
}
landmark {
x: 0.119362295
y: 0.5680165
x: 0.87222224
y: 0.5837696
}
landmark {
x: 0.102372244
y: 0.67237973
x: 0.88611114
y: 0.6753927
}
landmark {
x: 0.08747025
y: 0.7554076
x: 0.9
y: 0.7539267
}

View File

@ -1,84 +1,84 @@
landmark {
x: 0.7977909
y: 0.90771425
x: 0.19166666
y: 0.89790577
}
landmark {
x: 0.7005595
y: 0.87075
x: 0.29305556
y: 0.8638743
}
landmark {
x: 0.6439954
y: 0.7551088
x: 0.35694444
y: 0.7486911
}
landmark {
x: 0.60334325
y: 0.6363517
x: 0.40138888
y: 0.62041885
}
landmark {
x: 0.5600122
y: 0.55537516
x: 0.44722223
y: 0.5314136
}
landmark {
x: 0.6928512
y: 0.56547815
x: 0.30416667
y: 0.565445
}
landmark {
x: 0.66476023
y: 0.3680001
x: 0.33055556
y: 0.36125654
}
landmark {
x: 0.6514839
y: 0.23800957
x: 0.34583333
y: 0.2356021
}
landmark {
x: 0.6416936
y: 0.13911664
x: 0.3513889
y: 0.13350785
}
landmark {
x: 0.75269383
y: 0.53802305
x: 0.24583334
y: 0.5340314
}
landmark {
x: 0.7422081
y: 0.31609806
x: 0.25555557
y: 0.30104712
}
landmark {
x: 0.74030703
y: 0.16485286
x: 0.25972223
y: 0.15706806
}
landmark {
x: 0.7408123
y: 0.050073862
x: 0.25694445
y: 0.04973822
}
landmark {
x: 0.80908364
y: 0.548252
x: 0.19166666
y: 0.5445026
}
landmark {
x: 0.8152498
y: 0.34377483
x: 0.18194444
y: 0.33246073
}
landmark {
x: 0.82466483
y: 0.20964715
x: 0.17222223
y: 0.20157067
}
landmark {
x: 0.832543
y: 0.10994735
x: 0.1625
y: 0.09424084
}
landmark {
x: 0.85659754
y: 0.5847515
x: 0.14722222
y: 0.58115184
}
landmark {
x: 0.8787856
y: 0.42845485
x: 0.12777779
y: 0.41623038
}
landmark {
x: 0.89572114
y: 0.32542163
x: 0.10972222
y: 0.32460734
}
landmark {
x: 0.9110377
y: 0.24356759
x: 0.094444446
y: 0.2434555
}

View File

@ -1,84 +1,84 @@
landmark {
x: 0.8055556
y: 0.08900524
x: 0.19942205
y: 0.09026158
}
landmark {
x: 0.7
y: 0.13089006
x: 0.29673815
y: 0.1236096
}
landmark {
x: 0.6375
y: 0.2460733
x: 0.35452557
y: 0.24131873
}
landmark {
x: 0.59583336
y: 0.38219896
x: 0.39504135
y: 0.3613678
}
landmark {
x: 0.55138886
y: 0.4764398
x: 0.4381017
y: 0.44257507
}
landmark {
x: 0.70416665
y: 0.43717277
x: 0.30564976
y: 0.43276948
}
landmark {
x: 0.6652778
y: 0.64136124
x: 0.33376893
y: 0.6287609
}
landmark {
x: 0.6513889
y: 0.7643979
x: 0.34690586
y: 0.7581718
}
landmark {
x: 0.64444447
y: 0.8638743
x: 0.3569131
y: 0.85597074
}
landmark {
x: 0.7569444
y: 0.4712042
x: 0.24617499
y: 0.4616468
}
landmark {
x: 0.7416667
y: 0.6937173
x: 0.25602233
y: 0.6825256
}
landmark {
x: 0.74027777
y: 0.83507854
x: 0.25772986
y: 0.8347353
}
landmark {
x: 0.74444443
y: 0.9424084
x: 0.25762093
y: 0.949471
}
landmark {
x: 0.80694443
y: 0.45026177
x: 0.18984047
y: 0.45083284
}
landmark {
x: 0.81527776
y: 0.65968585
x: 0.18280011
y: 0.65619284
}
landmark {
x: 0.82361114
y: 0.79581153
x: 0.17377229
y: 0.7914928
}
landmark {
x: 0.83194447
y: 0.90575916
x: 0.16702436
y: 0.89128083
}
landmark {
x: 0.8541667
y: 0.43979058
x: 0.14224908
y: 0.41272494
}
landmark {
x: 0.87222224
y: 0.5837696
x: 0.119362295
y: 0.5680165
}
landmark {
x: 0.88611114
y: 0.6753927
x: 0.102372244
y: 0.67237973
}
landmark {
x: 0.9
y: 0.7539267
x: 0.08747025
y: 0.7554076
}

View File

@ -1,84 +1,84 @@
landmark {
x: 0.19166666
y: 0.89790577
x: 0.7977909
y: 0.90771425
}
landmark {
x: 0.29305556
y: 0.8638743
x: 0.7005595
y: 0.87075
}
landmark {
x: 0.35694444
y: 0.7486911
x: 0.6439954
y: 0.7551088
}
landmark {
x: 0.40138888
y: 0.62041885
x: 0.60334325
y: 0.6363517
}
landmark {
x: 0.44722223
y: 0.5314136
x: 0.5600122
y: 0.55537516
}
landmark {
x: 0.30416667
y: 0.565445
x: 0.6928512
y: 0.56547815
}
landmark {
x: 0.33055556
y: 0.36125654
x: 0.66476023
y: 0.3680001
}
landmark {
x: 0.34583333
y: 0.2356021
x: 0.6514839
y: 0.23800957
}
landmark {
x: 0.3513889
y: 0.13350785
x: 0.6416936
y: 0.13911664
}
landmark {
x: 0.24583334
y: 0.5340314
x: 0.75269383
y: 0.53802305
}
landmark {
x: 0.25555557
y: 0.30104712
x: 0.7422081
y: 0.31609806
}
landmark {
x: 0.25972223
y: 0.15706806
x: 0.74030703
y: 0.16485286
}
landmark {
x: 0.25694445
y: 0.04973822
x: 0.7408123
y: 0.050073862
}
landmark {
x: 0.19166666
y: 0.5445026
x: 0.80908364
y: 0.548252
}
landmark {
x: 0.18194444
y: 0.33246073
x: 0.8152498
y: 0.34377483
}
landmark {
x: 0.17222223
y: 0.20157067
x: 0.82466483
y: 0.20964715
}
landmark {
x: 0.1625
y: 0.09424084
x: 0.832543
y: 0.10994735
}
landmark {
x: 0.14722222
y: 0.58115184
x: 0.85659754
y: 0.5847515
}
landmark {
x: 0.12777779
y: 0.41623038
x: 0.8787856
y: 0.42845485
}
landmark {
x: 0.10972222
y: 0.32460734
x: 0.89572114
y: 0.32542163
}
landmark {
x: 0.094444446
y: 0.2434555
x: 0.9110377
y: 0.24356759
}

View File

@ -1,8 +1,8 @@
classifications {
classification {
score: 1.0
label: "Left"
display_name: "Left"
label: "Right"
display_name: "Right"
}
}

View File

@ -1,8 +1,8 @@
classifications {
classification {
score: 1.0
label: "Left"
display_name: "Left"
label: "Right"
display_name: "Right"
}
}

View File

@ -1,8 +1,8 @@
classifications {
classification {
score: 1.0
label: "Left"
display_name: "Left"
label: "Right"
display_name: "Right"
}
}

View File

@ -1,8 +1,8 @@
classifications {
classification {
score: 1.0
label: "Left"
display_name: "Left"
label: "Right"
display_name: "Right"
}
}

View File

@ -1,8 +1,8 @@
classifications {
classification {
score: 1.0
label: "Left"
display_name: "Left"
label: "Right"
display_name: "Right"
}
}

View File

@ -1,8 +1,8 @@
classifications {
classification {
score: 1.0
label: "Left"
display_name: "Left"
label: "Right"
display_name: "Right"
}
}

View File

@ -306,26 +306,14 @@ def external_files():
http_file(
name = "com_google_mediapipe_expected_left_down_hand_landmarks_prototxt",
sha256 = "ae9cb01035f18b0023fc12256c048666da76b41b327cec09c2d2820054b1295f",
urls = ["https://storage.googleapis.com/mediapipe-assets/expected_left_down_hand_landmarks.prototxt?generation=1661875720230540"],
)
http_file(
name = "com_google_mediapipe_expected_left_down_hand_rotated_landmarks_prototxt",
sha256 = "c4dfdcc2e4cd366eb5f8ad227be94049eb593e3a528564611094687912463687",
urls = ["https://storage.googleapis.com/mediapipe-assets/expected_left_down_hand_rotated_landmarks.prototxt?generation=1666629474155924"],
sha256 = "f281b745175aaa7f458def6cf4c89521fb56302dd61a05642b3b4a4f237ffaa3",
urls = ["https://storage.googleapis.com/mediapipe-assets/expected_left_down_hand_landmarks.prototxt?generation=1692121979089068"],
)
http_file(
name = "com_google_mediapipe_expected_left_up_hand_landmarks_prototxt",
sha256 = "1353ba617c4f048083618587cd23a8a22115f634521c153d4e1bd1ebd4f49dd7",
urls = ["https://storage.googleapis.com/mediapipe-assets/expected_left_up_hand_landmarks.prototxt?generation=1661875726008879"],
)
http_file(
name = "com_google_mediapipe_expected_left_up_hand_rotated_landmarks_prototxt",
sha256 = "7fb2d33cf69d2da50952a45bad0c0618f30859e608958fee95948a6e0de63ccb",
urls = ["https://storage.googleapis.com/mediapipe-assets/expected_left_up_hand_rotated_landmarks.prototxt?generation=1666629476401757"],
sha256 = "174cf5f7c3ab547f0affb666ee7be933b0758c60fbfe7b7e93795c5082555592",
urls = ["https://storage.googleapis.com/mediapipe-assets/expected_left_up_hand_landmarks.prototxt?generation=1692121981605963"],
)
http_file(
@ -336,14 +324,26 @@ def external_files():
http_file(
name = "com_google_mediapipe_expected_right_down_hand_landmarks_prototxt",
sha256 = "f281b745175aaa7f458def6cf4c89521fb56302dd61a05642b3b4a4f237ffaa3",
urls = ["https://storage.googleapis.com/mediapipe-assets/expected_right_down_hand_landmarks.prototxt?generation=1661875730821226"],
sha256 = "ae9cb01035f18b0023fc12256c048666da76b41b327cec09c2d2820054b1295f",
urls = ["https://storage.googleapis.com/mediapipe-assets/expected_right_down_hand_landmarks.prototxt?generation=1692121986324450"],
)
http_file(
name = "com_google_mediapipe_expected_right_down_hand_rotated_landmarks_prototxt",
sha256 = "c4dfdcc2e4cd366eb5f8ad227be94049eb593e3a528564611094687912463687",
urls = ["https://storage.googleapis.com/mediapipe-assets/expected_right_down_hand_rotated_landmarks.prototxt?generation=1692121989028161"],
)
http_file(
name = "com_google_mediapipe_expected_right_up_hand_landmarks_prototxt",
sha256 = "174cf5f7c3ab547f0affb666ee7be933b0758c60fbfe7b7e93795c5082555592",
urls = ["https://storage.googleapis.com/mediapipe-assets/expected_right_up_hand_landmarks.prototxt?generation=1661875733440313"],
sha256 = "1353ba617c4f048083618587cd23a8a22115f634521c153d4e1bd1ebd4f49dd7",
urls = ["https://storage.googleapis.com/mediapipe-assets/expected_right_up_hand_landmarks.prototxt?generation=1692121991596258"],
)
http_file(
name = "com_google_mediapipe_expected_right_up_hand_rotated_landmarks_prototxt",
sha256 = "7fb2d33cf69d2da50952a45bad0c0618f30859e608958fee95948a6e0de63ccb",
urls = ["https://storage.googleapis.com/mediapipe-assets/expected_right_up_hand_rotated_landmarks.prototxt?generation=1692121994043161"],
)
http_file(
@ -450,8 +450,8 @@ def external_files():
http_file(
name = "com_google_mediapipe_fist_landmarks_pbtxt",
sha256 = "76d6489e6163211ce5e9080e51983165bb9b24ff50146cc7487bd629f011c598",
urls = ["https://storage.googleapis.com/mediapipe-assets/fist_landmarks.pbtxt?generation=1666999360561864"],
sha256 = "4b0ad2b00d5f2d140450f9f168af0f7422ecf6b630b7d64a213bcf6f04fb078b",
urls = ["https://storage.googleapis.com/mediapipe-assets/fist_landmarks.pbtxt?generation=1692121997451835"],
)
http_file(
@ -636,14 +636,14 @@ def external_files():
http_file(
name = "com_google_mediapipe_left_hands_jpg",
sha256 = "4b5134daa4cb60465535239535f9f74c2842aba3aa5fd30bf04ef5678f93d87f",
urls = ["https://storage.googleapis.com/mediapipe-assets/left_hands.jpg?generation=1661875796949017"],
sha256 = "240c082e80128ff1ca8a83ce645e2ba4d8bc30f0967b7991cf5fa375bab489e1",
urls = ["https://storage.googleapis.com/mediapipe-assets/left_hands.jpg?generation=1692122001487742"],
)
http_file(
name = "com_google_mediapipe_left_hands_rotated_jpg",
sha256 = "8609c6202bca43a99bbf23fa8e687e49fa525e89481152e4c0987f46d60d7931",
urls = ["https://storage.googleapis.com/mediapipe-assets/left_hands_rotated.jpg?generation=1666037068103465"],
sha256 = "b3bdf692f0d54b86c8b67e6d1286dd0078fbe6e9dfcd507b187e3bd8b398c0f9",
urls = ["https://storage.googleapis.com/mediapipe-assets/left_hands_rotated.jpg?generation=1692122004272021"],
)
http_file(
@ -948,8 +948,8 @@ def external_files():
http_file(
name = "com_google_mediapipe_pointing_up_landmarks_pbtxt",
sha256 = "a3cd7f088a9e997dbb8f00d91dbf3faaacbdb262c8f2fde3c07a9d0656488065",
urls = ["https://storage.googleapis.com/mediapipe-assets/pointing_up_landmarks.pbtxt?generation=1665174976408451"],
sha256 = "6bfcd360c0caa82559396d387ac30e1d59efab3b3d96b5512f4f018d0abae7c4",
urls = ["https://storage.googleapis.com/mediapipe-assets/pointing_up_landmarks.pbtxt?generation=1692122010006268"],
)
http_file(
@ -960,8 +960,8 @@ def external_files():
http_file(
name = "com_google_mediapipe_pointing_up_rotated_landmarks_pbtxt",
sha256 = "5ec37218d8b613436f5c10121dc689bf9ee69af0656a6ccf8c2e3e8b652e2ad6",
urls = ["https://storage.googleapis.com/mediapipe-assets/pointing_up_rotated_landmarks.pbtxt?generation=1666629486774022"],
sha256 = "cc58cbe1ead8c5051e643d2b90b77d00843cab2f1227af3489513d2b02359dd1",
urls = ["https://storage.googleapis.com/mediapipe-assets/pointing_up_rotated_landmarks.pbtxt?generation=1692122012510778"],
)
http_file(
@ -1122,14 +1122,14 @@ def external_files():
http_file(
name = "com_google_mediapipe_right_hands_jpg",
sha256 = "240c082e80128ff1ca8a83ce645e2ba4d8bc30f0967b7991cf5fa375bab489e1",
urls = ["https://storage.googleapis.com/mediapipe-assets/right_hands.jpg?generation=1661875908672404"],
sha256 = "4b5134daa4cb60465535239535f9f74c2842aba3aa5fd30bf04ef5678f93d87f",
urls = ["https://storage.googleapis.com/mediapipe-assets/right_hands.jpg?generation=1692122016203904"],
)
http_file(
name = "com_google_mediapipe_right_hands_rotated_jpg",
sha256 = "b3bdf692f0d54b86c8b67e6d1286dd0078fbe6e9dfcd507b187e3bd8b398c0f9",
urls = ["https://storage.googleapis.com/mediapipe-assets/right_hands_rotated.jpg?generation=1666037076873345"],
sha256 = "8609c6202bca43a99bbf23fa8e687e49fa525e89481152e4c0987f46d60d7931",
urls = ["https://storage.googleapis.com/mediapipe-assets/right_hands_rotated.jpg?generation=1692122018668162"],
)
http_file(
@ -1320,14 +1320,14 @@ def external_files():
http_file(
name = "com_google_mediapipe_thumb_up_landmarks_pbtxt",
sha256 = "b129ae0536be4e25d6cdee74aabe9dedf1bcfe87430a40b68be4079db3a4d926",
urls = ["https://storage.googleapis.com/mediapipe-assets/thumb_up_landmarks.pbtxt?generation=1665174979747784"],
sha256 = "feddaa81e188b9bceae12a96766f71e8ff3b2b316b4a31d64054d8a329e6015e",
urls = ["https://storage.googleapis.com/mediapipe-assets/thumb_up_landmarks.pbtxt?generation=1692122022310696"],
)
http_file(
name = "com_google_mediapipe_thumb_up_rotated_landmarks_pbtxt",
sha256 = "6645bbd98ea7f90b3e1ba297e16ea5280847fc5bf5400726d98c282f6c597257",
urls = ["https://storage.googleapis.com/mediapipe-assets/thumb_up_rotated_landmarks.pbtxt?generation=1666629489421733"],
sha256 = "f0e90db82890ad2e0304af5e6e88b2e64f3774eec4d43e56b634a296553b7196",
urls = ["https://storage.googleapis.com/mediapipe-assets/thumb_up_rotated_landmarks.pbtxt?generation=1692122024789637"],
)
http_file(
@ -1362,8 +1362,8 @@ def external_files():
http_file(
name = "com_google_mediapipe_victory_landmarks_pbtxt",
sha256 = "b25ab4f222674489f543afb6454396ecbc1437a7ae6213dbf0553029ae939ab0",
urls = ["https://storage.googleapis.com/mediapipe-assets/victory_landmarks.pbtxt?generation=1666999366036622"],
sha256 = "73fb59741872bc66b79982d4c9765a4128d6308cc5d919100615080c0f4c0c55",
urls = ["https://storage.googleapis.com/mediapipe-assets/victory_landmarks.pbtxt?generation=1692122027459905"],
)
http_file(