diff --git a/app3.py b/app3.py index a57f0a2..ce40255 100644 --- a/app3.py +++ b/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) @@ -98,8 +111,32 @@ def generate_frames(stat): distances = [np.sqrt((landmark.x - finger_tip.x) ** 2 + (landmark.y - finger_tip.y) ** 2) for landmark in open_palm] + + ############# 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 - if distances: + + # 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() diff --git a/dataset.json b/dataset.json index be952d5..63e5af9 100644 --- a/dataset.json +++ b/dataset.json @@ -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.
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" } diff --git a/gambar/tengah_telapak_tangan.jpg b/gambar/tengah_telapak_tangan.jpg new file mode 100644 index 0000000..36ce340 Binary files /dev/null and b/gambar/tengah_telapak_tangan.jpg differ