remove the line of the hand landmark and added palm center description
This commit is contained in:
parent
82001c9895
commit
0d177710bb
43
app3.py
43
app3.py
|
@ -25,6 +25,19 @@ hands = mp_hands.Hands(static_image_mode=False, max_num_hands=2, min_detection_c
|
|||
|
||||
# Initialize MediaPipe drawing utilities
|
||||
mp_drawing = mp.solutions.drawing_utils
|
||||
drawing_styles = mp.solutions.drawing_styles
|
||||
|
||||
# Configure drawing options
|
||||
dot_drawing_spec = mp_drawing.DrawingSpec(color=(255, 0, 0), thickness=3, circle_radius=5)
|
||||
|
||||
|
||||
def draw_landmarks_no_lines(image, hand_landmarks, landmark_drawing_spec):
|
||||
if not hand_landmarks:
|
||||
return
|
||||
for idx, landmark in enumerate(hand_landmarks.landmark):
|
||||
landmark_px = mp_drawing._normalized_to_pixel_coordinates(landmark.x, landmark.y, image.shape[1], image.shape[0])
|
||||
if landmark_px:
|
||||
cv2.circle(image, landmark_px, landmark_drawing_spec.circle_radius, landmark_drawing_spec.color, landmark_drawing_spec.thickness)
|
||||
|
||||
# Initialize camera capture
|
||||
cap = cv2.VideoCapture(0)
|
||||
|
@ -99,7 +112,31 @@ def generate_frames(stat):
|
|||
distances = [np.sqrt((landmark.x - finger_tip.x) ** 2 +
|
||||
(landmark.y - finger_tip.y) ** 2) for landmark in open_palm]
|
||||
|
||||
if distances:
|
||||
############# ini utk kira palm center ########## #
|
||||
# calculate the finger tip distance from palm center
|
||||
# Calculate the Euclidean distance between the finger tip and the palm center
|
||||
finger_tip_distance = np.sqrt((finger_tip.x - palm_center_x) ** 2 +
|
||||
(finger_tip.y - palm_center_y) ** 2)
|
||||
|
||||
# Set a threshold distance in normalized coordinates
|
||||
threshold_distance = 0.34
|
||||
threshold_distance2 = 0.37
|
||||
|
||||
|
||||
# Print the finger tip distance
|
||||
print(finger_tip_distance)
|
||||
|
||||
# Check if the finger tip is close to the palm center within the threshold distance
|
||||
if finger_tip_distance > threshold_distance and finger_tip_distance < threshold_distance2:
|
||||
the_image_path = all_data[21]["image_path"]
|
||||
the_name = all_data[21]["name"]
|
||||
the_keterangan = all_data[21]["keterangan"]
|
||||
# closest_landmark_name = landmark_names[21]
|
||||
cv2.putText(frame, f'Closest Landmark: Tengah Telapak Tangan',
|
||||
(int(finger_tip.x * w), int(finger_tip.y * h)),
|
||||
cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 2)
|
||||
########## ending palm center ##########
|
||||
elif distances:
|
||||
closest_landmark_idx = np.argmin(distances)
|
||||
# print("ini index", closest_landmark_idx)
|
||||
|
||||
|
@ -118,12 +155,14 @@ def generate_frames(stat):
|
|||
(0, 0, 255), 2, cv2.LINE_AA)
|
||||
|
||||
# Draw landmarks on the frame
|
||||
mp_drawing.draw_landmarks(frame, hand_landmarks, mp_hands.HAND_CONNECTIONS)
|
||||
draw_landmarks_no_lines(frame, hand_landmarks, dot_drawing_spec)
|
||||
else:
|
||||
the_image_path = "gambar/tutorial.jpg"
|
||||
the_name = None
|
||||
the_keterangan = "Posisikan satu tangan kepada menunjuk dan tangan lainnya kepada terbuka dan tunjukkan ke arah titik tangan"
|
||||
|
||||
|
||||
|
||||
# Convert the frame to bytes
|
||||
ret, buffer = cv2.imencode('.jpg', frame)
|
||||
frame = buffer.tobytes()
|
||||
|
|
|
@ -124,6 +124,12 @@
|
|||
"name": "Bagian Hujung Jari Kelingking",
|
||||
"image_path":"gambar/bagian_hujung_jari.jpg",
|
||||
"keterangan":"Berikan tekanan pada bagian atas jari untuk menangani gangguan pada kepala, otak, dan sinus. Dari ujung masing-masing jari—termasuk ibu jari Anda—hingga sendi pertama jari mewakili kepala, otak, dan sinus.<br>Bagian tengah bantalan ibu jari Anda, khususnya mewakili kelenjar pituitari, pineal, dan hipotalamus yang terletak di bagian tengah otak, yang bisa bermanfaat untuk mengatasi insomnia dan gangguan tidur lainnya"
|
||||
},
|
||||
{
|
||||
"index": 21,
|
||||
"name": "Tengah Telapak Tangan",
|
||||
"image_path":"gambar/tengah_telapak_tangan.jpg",
|
||||
"keterangan":"Ini Tengah Telapak Tangan"
|
||||
}
|
||||
|
||||
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 58 KiB |
Loading…
Reference in New Issue