Метод .crop
берет список, содержащий 4 координаты области кадрирования -
[
X_top_left_corner, Y_top_left_corner,
X_bottom_right_corner, Y_bottom_right_corner
]
Что я могу сказать по координатам face_landmarks['top_lip']
, я думаю, этоуказывает на контур губ.Итак, вам нужно найти самый левый верхний угол и самый правый нижний угол и передать его в метод crop
.
[(498, 937), (546,926), (597, 924), (637, 930), (676, 922), (726, 922), (772, 929), (756, 935), (677, 940), (637, 946), (597, 942), (516, 942)]
Чтобы найти левый верхний угол, вам нужно найти наименьшую координату X и наименьшую координату Y изэти данные.И эти две координаты могут присутствовать в отдельных кортежах.
Для правого нижнего угла вам понадобится самая высокая координата X и самая высокая координата y.Опять же, эти два могут присутствовать в отдельных кортежах.
Вы можете определить углы следующим образом:
x1 = min(my_list)[0] # top left corner X
y1 = min(my_list, key=lambda pair: pair[1])[1] # top left corner Y
x2 = max(my_list)[0] # bottom right corner X
y2 = max(my_list, key=lambda pair: pair[1])[1] # bottom right corner Y
В этом случае наименьшая координата X равна 498
и наименьшая координата Y 922
.Это создаст ваш левый верхний угол.
Наивысшая координата X - 772
, а наивысшая координата Y - 946
.Это будет ваш правый нижний угол.
Это должно работать для обрезки верхней губы:
# im.crop([x1, y1, x2, y2])
im.crop([498, 922, 772, 946])