mirror of
https://github.com/invoke-ai/InvokeAI
synced 2024-08-30 20:32:17 +00:00
cleanup: unused util functions
This commit is contained in:
parent
f588b95c7f
commit
f8e566d62a
@ -153,155 +153,3 @@ def draw_facepose(canvas, all_lmks):
|
|||||||
if x > eps and y > eps:
|
if x > eps and y > eps:
|
||||||
cv2.circle(canvas, (x, y), 3, (255, 255, 255), thickness=-1)
|
cv2.circle(canvas, (x, y), 3, (255, 255, 255), thickness=-1)
|
||||||
return canvas
|
return canvas
|
||||||
|
|
||||||
|
|
||||||
# detect hand according to body pose keypoints
|
|
||||||
# please refer to
|
|
||||||
# https://github.com/CMU-Perceptual-Computing-Lab/openpose/blob/master/src/openpose/hand/handDetector.cpp
|
|
||||||
def handDetect(candidate, subset, oriImg):
|
|
||||||
# right hand: wrist 4, elbow 3, shoulder 2
|
|
||||||
# left hand: wrist 7, elbow 6, shoulder 5
|
|
||||||
ratioWristElbow = 0.33
|
|
||||||
detect_result = []
|
|
||||||
image_height, image_width = oriImg.shape[0:2]
|
|
||||||
for person in subset.astype(int):
|
|
||||||
# if any of three not detected
|
|
||||||
has_left = np.sum(person[[5, 6, 7]] == -1) == 0
|
|
||||||
has_right = np.sum(person[[2, 3, 4]] == -1) == 0
|
|
||||||
if not (has_left or has_right):
|
|
||||||
continue
|
|
||||||
hands = []
|
|
||||||
# left hand
|
|
||||||
if has_left:
|
|
||||||
left_shoulder_index, left_elbow_index, left_wrist_index = person[[5, 6, 7]]
|
|
||||||
x1, y1 = candidate[left_shoulder_index][:2]
|
|
||||||
x2, y2 = candidate[left_elbow_index][:2]
|
|
||||||
x3, y3 = candidate[left_wrist_index][:2]
|
|
||||||
hands.append([x1, y1, x2, y2, x3, y3, True])
|
|
||||||
# right hand
|
|
||||||
if has_right:
|
|
||||||
right_shoulder_index, right_elbow_index, right_wrist_index = person[[2, 3, 4]]
|
|
||||||
x1, y1 = candidate[right_shoulder_index][:2]
|
|
||||||
x2, y2 = candidate[right_elbow_index][:2]
|
|
||||||
x3, y3 = candidate[right_wrist_index][:2]
|
|
||||||
hands.append([x1, y1, x2, y2, x3, y3, False])
|
|
||||||
|
|
||||||
for x1, y1, x2, y2, x3, y3, is_left in hands:
|
|
||||||
# pos_hand = pos_wrist + ratio * (pos_wrist - pos_elbox) = (1 + ratio) * pos_wrist - ratio * pos_elbox
|
|
||||||
# handRectangle.x = posePtr[wrist*3] + ratioWristElbow * (posePtr[wrist*3] - posePtr[elbow*3]);
|
|
||||||
# handRectangle.y = posePtr[wrist*3+1] + ratioWristElbow * (posePtr[wrist*3+1] - posePtr[elbow*3+1]);
|
|
||||||
# const auto distanceWristElbow = getDistance(poseKeypoints, person, wrist, elbow);
|
|
||||||
# const auto distanceElbowShoulder = getDistance(poseKeypoints, person, elbow, shoulder);
|
|
||||||
# handRectangle.width = 1.5f * fastMax(distanceWristElbow, 0.9f * distanceElbowShoulder);
|
|
||||||
x = x3 + ratioWristElbow * (x3 - x2)
|
|
||||||
y = y3 + ratioWristElbow * (y3 - y2)
|
|
||||||
distanceWristElbow = math.sqrt((x3 - x2) ** 2 + (y3 - y2) ** 2)
|
|
||||||
distanceElbowShoulder = math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2)
|
|
||||||
width = 1.5 * max(distanceWristElbow, 0.9 * distanceElbowShoulder)
|
|
||||||
# x-y refers to the center --> offset to topLeft point
|
|
||||||
# handRectangle.x -= handRectangle.width / 2.f;
|
|
||||||
# handRectangle.y -= handRectangle.height / 2.f;
|
|
||||||
x -= width / 2
|
|
||||||
y -= width / 2 # width = height
|
|
||||||
# overflow the image
|
|
||||||
if x < 0:
|
|
||||||
x = 0
|
|
||||||
if y < 0:
|
|
||||||
y = 0
|
|
||||||
width1 = width
|
|
||||||
width2 = width
|
|
||||||
if x + width > image_width:
|
|
||||||
width1 = image_width - x
|
|
||||||
if y + width > image_height:
|
|
||||||
width2 = image_height - y
|
|
||||||
width = min(width1, width2)
|
|
||||||
# the max hand box value is 20 pixels
|
|
||||||
if width >= 20:
|
|
||||||
detect_result.append([int(x), int(y), int(width), is_left])
|
|
||||||
|
|
||||||
"""
|
|
||||||
return value: [[x, y, w, True if left hand else False]].
|
|
||||||
width=height since the network require squared input.
|
|
||||||
x, y is the coordinate of top left
|
|
||||||
"""
|
|
||||||
return detect_result
|
|
||||||
|
|
||||||
|
|
||||||
# Written by Lvmin
|
|
||||||
def faceDetect(candidate, subset, oriImg):
|
|
||||||
# left right eye ear 14 15 16 17
|
|
||||||
detect_result = []
|
|
||||||
image_height, image_width = oriImg.shape[0:2]
|
|
||||||
for person in subset.astype(int):
|
|
||||||
has_head = person[0] > -1
|
|
||||||
if not has_head:
|
|
||||||
continue
|
|
||||||
|
|
||||||
has_left_eye = person[14] > -1
|
|
||||||
has_right_eye = person[15] > -1
|
|
||||||
has_left_ear = person[16] > -1
|
|
||||||
has_right_ear = person[17] > -1
|
|
||||||
|
|
||||||
if not (has_left_eye or has_right_eye or has_left_ear or has_right_ear):
|
|
||||||
continue
|
|
||||||
|
|
||||||
head, left_eye, right_eye, left_ear, right_ear = person[[0, 14, 15, 16, 17]]
|
|
||||||
|
|
||||||
width = 0.0
|
|
||||||
x0, y0 = candidate[head][:2]
|
|
||||||
|
|
||||||
if has_left_eye:
|
|
||||||
x1, y1 = candidate[left_eye][:2]
|
|
||||||
d = max(abs(x0 - x1), abs(y0 - y1))
|
|
||||||
width = max(width, d * 3.0)
|
|
||||||
|
|
||||||
if has_right_eye:
|
|
||||||
x1, y1 = candidate[right_eye][:2]
|
|
||||||
d = max(abs(x0 - x1), abs(y0 - y1))
|
|
||||||
width = max(width, d * 3.0)
|
|
||||||
|
|
||||||
if has_left_ear:
|
|
||||||
x1, y1 = candidate[left_ear][:2]
|
|
||||||
d = max(abs(x0 - x1), abs(y0 - y1))
|
|
||||||
width = max(width, d * 1.5)
|
|
||||||
|
|
||||||
if has_right_ear:
|
|
||||||
x1, y1 = candidate[right_ear][:2]
|
|
||||||
d = max(abs(x0 - x1), abs(y0 - y1))
|
|
||||||
width = max(width, d * 1.5)
|
|
||||||
|
|
||||||
x, y = x0, y0
|
|
||||||
|
|
||||||
x -= width
|
|
||||||
y -= width
|
|
||||||
|
|
||||||
if x < 0:
|
|
||||||
x = 0
|
|
||||||
|
|
||||||
if y < 0:
|
|
||||||
y = 0
|
|
||||||
|
|
||||||
width1 = width * 2
|
|
||||||
width2 = width * 2
|
|
||||||
|
|
||||||
if x + width > image_width:
|
|
||||||
width1 = image_width - x
|
|
||||||
|
|
||||||
if y + width > image_height:
|
|
||||||
width2 = image_height - y
|
|
||||||
|
|
||||||
width = min(width1, width2)
|
|
||||||
|
|
||||||
if width >= 20:
|
|
||||||
detect_result.append([int(x), int(y), int(width)])
|
|
||||||
|
|
||||||
return detect_result
|
|
||||||
|
|
||||||
|
|
||||||
# get max index of 2d array
|
|
||||||
def npmax(array):
|
|
||||||
arrayindex = array.argmax(1)
|
|
||||||
arrayvalue = array.max(1)
|
|
||||||
i = arrayvalue.argmax()
|
|
||||||
j = arrayindex[i]
|
|
||||||
return i, j
|
|
||||||
|
Loading…
Reference in New Issue
Block a user