Извините, если название вводит в заблуждение или неточно.
Я новичок в программировании и этой терминологии...
Контекст:
Отслеживание ключевых точек рук в Mediapipe
Выполнение расчета расстояний между кончиками пальцев (всего 8 значений)
Это работает хорошо и хорошо!
#MIDI Channels
ch_list = [[1],[2],[3],[4],[5],[6],[7],[8]]
#Distance between Fingertips & MIDI Out
point_list = [[4,8],[8,12],[12,16],[16,20]]
def draw_tip_distances(image, results, point_list):
# Loop through hands
for hand in results.multi_hand_landmarks:
for ch in ch_list:
#Loop through point sets
for point in point_list:
a = np.array([hand.landmark[point[0]].x, hand.landmark[point[0]].y]) # First coord
b = np.array([hand.landmark[point[1]].x, hand.landmark[point[1]].y]) # Second coord
dist = np.linalg.norm((a-b)*2.5)
if dist > 1:
dist = 1
if dist < 0.08:
dist = 0
cc_msg = [0xB0, ch[0], round(dist*127,0)]
out.send_message(cc_msg)
print(cc_msg)
cv2.putText(image, str(round(dist, 2)), tuple(np.multiply(b, [640, 480]).astype(int)),
cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 2, cv2.LINE_AA)
return image
Вывод:
каждое значение dist сопоставляется с каждым каналом...
def draw_tip_distances(image, results, point_list):
# Loop through hands
for hand in results.multi_hand_landmarks:
#Loop through point sets
for point in point_list:
a = np.array([hand.landmark[point[0]].x, hand.landmark[point[0]].y]) # First coord
b = np.array([hand.landmark[point[1]].x, hand.landmark[point[1]].y]) # Second coord
dist = np.linalg.norm((a-b)*2.5)
if dist > 1:
dist = 1
if dist < 0.08:
dist = 0
for ch in ch_list:
cc_msg = [0xB0, ch[0], round(dist*127,0)]
out.send_message(cc_msg)
print(cc_msg)
cv2.putText(image, str(round(dist, 2)), tuple(np.multiply(b, [640, 480]).astype(int)),
cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 2, cv2.LINE_AA)
return image
правильное количество строк! (ура)
конечно, значения каналов не статичны в этом случае......
ПОМОЩЬ
Извините, если ответ тривиален, я впервые программирую (с помощью Интернета)
Моя интуиция подсказывает мне, что ответ заключается в использовании формул с переменными, которые я есть в наличии. К сожалению, моя математика не такая уж сложная.
[h4]Извините, если название вводит в заблуждение или неточно.[/h4] Я новичок в программировании и этой терминологии...
Контекст: Отслеживание ключевых точек рук в Mediapipe Выполнение расчета расстояний между кончиками пальцев (всего 8 значений) Это работает хорошо и хорошо! [code]import mediapipe as mp import cv2 import numpy as np import rtmidi
#Distance between Fingertips & MIDI Out point_list = [[4,8],[8,12],[12,16],[16,20]]
def draw_tip_distances(image, results, point_list): # Loop through hands for hand in results.multi_hand_landmarks: #Loop through point sets for point in point_list: a = np.array([hand.landmark[point[0]].x, hand.landmark[point[0]].y]) # First coord b = np.array([hand.landmark[point[1]].x, hand.landmark[point[1]].y]) # Second coord
dist = np.linalg.norm((a-b)*2.5) if dist > 1: dist = 1 if dist < 0.08: dist = 0
#Distance between Fingertips & MIDI Out point_list = [[4,8],[8,12],[12,16],[16,20]]
def draw_tip_distances(image, results, point_list): # Loop through hands for hand in results.multi_hand_landmarks: for ch in ch_list: #Loop through point sets for point in point_list: a = np.array([hand.landmark[point[0]].x, hand.landmark[point[0]].y]) # First coord b = np.array([hand.landmark[point[1]].x, hand.landmark[point[1]].y]) # Second coord
dist = np.linalg.norm((a-b)*2.5) if dist > 1: dist = 1 if dist < 0.08: dist = 0
3 — Вложенный цикл каналов [code]def draw_tip_distances(image, results, point_list): # Loop through hands for hand in results.multi_hand_landmarks: #Loop through point sets for point in point_list: a = np.array([hand.landmark[point[0]].x, hand.landmark[point[0]].y]) # First coord b = np.array([hand.landmark[point[1]].x, hand.landmark[point[1]].y]) # Second coord
dist = np.linalg.norm((a-b)*2.5) if dist > 1: dist = 1 if dist < 0.08: dist = 0
for ch in ch_list: cc_msg = [0xB0, ch[0], round(dist*127,0)] out.send_message(cc_msg) print(cc_msg)
4 – Использование переменной [code]cc_msg = [0xB0, round(dist,2), round(dist*127,0)] out.send_message(cc_msg) print(cc_msg) [/code] в этом примере я использовал «dist». Переменные, которые я могу использовать: a[0], a[1], b [0], b[1], расстояние, [h4]Вывод:[/h4] [code] [176, 0.99, 125.0] [176, 0.32, 40.0] [176, 0.21, 27.0] [176, 0.26, 33.0] [176, 0.77, 98.0] [176, 0.26, 34.0] [176, 0.15, 20.0] [176, 0.28, 36.0] [/code] правильное количество строк! (ура) конечно, значения каналов не статичны в этом случае...... ПОМОЩЬ Извините, если ответ тривиален, я впервые программирую (с помощью Интернета) Моя интуиция подсказывает мне, что ответ заключается в использовании формул с переменными, которые я есть в наличии. К сожалению, моя математика не такая уж сложная.