Initial commit: Werewolf game with voice prompts

This commit is contained in:
Terrible Entry 2026-06-16 13:15:22 +02:00
commit 5cdc9fdf82
63 changed files with 1387 additions and 0 deletions

87
werewoolf/finger_count.py Normal file
View file

@ -0,0 +1,87 @@
# code inspiration from https://www.geekering.com/categories/computer-vision/marcellacavalcanti/hand-tracking-and-finger-counting-in-python-with-mediapipe/ because i dont know how to use mediapipe
import cv2
import mediapipe as mp
import time
mp_drawing = mp.solutions.drawing_utils
mp_drawing_styles = mp.solutions.drawing_styles
mp_hands = mp.solutions.hands
def count_fingers(stable_duration=2):
previous_finger_count = -1 # Initialize to an invalid count
stable_start_time = None # To track when the count became stable
cap = cv2.VideoCapture(0)
with mp_hands.Hands(
model_complexity=0,
min_detection_confidence=0.5,
min_tracking_confidence=0.5) as hands:
while cap.isOpened():
success, image = cap.read()
if not success:
print("Ignoring empty camera frame.")
continue
image.flags.writeable = False
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
results = hands.process(image)
image.flags.writeable = True
image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
fingerCount = 0 # Reset fingerCount for each frame
if results.multi_hand_landmarks:
for hand_landmarks in results.multi_hand_landmarks:
handIndex = results.multi_hand_landmarks.index(hand_landmarks)
handLabel = results.multi_handedness[handIndex].classification[0].label
handLandmarks = []
for landmarks in hand_landmarks.landmark:
handLandmarks.append([landmarks.x, landmarks.y])
# Count fingers
if handLabel == "Left" and handLandmarks[4][0] > handLandmarks[3][0]:
fingerCount += 1
elif handLabel == "Right" and handLandmarks[4][0] < handLandmarks[3][0]:
fingerCount += 1
if handLandmarks[8][1] < handLandmarks[6][1]: # Index finger
fingerCount += 1
if handLandmarks[12][1] < handLandmarks[10][1]: # Middle finger
fingerCount += 1
if handLandmarks[16][1] < handLandmarks[14][1]: # Ring finger
fingerCount += 1
if handLandmarks[20][1] < handLandmarks[18][1]: # Pinky
fingerCount += 1
# Draw hand landmarks
mp_drawing.draw_landmarks(
image,
hand_landmarks,
mp_hands.HAND_CONNECTIONS,
mp_drawing_styles.get_default_hand_landmarks_style(),
mp_drawing_styles.get_default_hand_connections_style())
# Display finger count
cv2.putText(image, str(fingerCount), (50, 450), cv2.FONT_HERSHEY_SIMPLEX, 3, (255, 0, 0), 10)
#Display image
cv2.imshow('Finger Count', image)
# Check if the finger count is stable
if fingerCount == previous_finger_count and fingerCount != 0:
if stable_start_time is None:
stable_start_time = time.time() # Start the timer
elif time.time() - stable_start_time >= stable_duration and fingerCount != 0:
cap.release()
cv2.destroyAllWindows()
return fingerCount # Return the stable finger count
else:
stable_start_time = None # Reset the timer if the count changes
previous_finger_count = fingerCount # Update the previous count
if cv2.waitKey(5) & 0xFF == 27:
break
return None # Return None if the loop ends without a stable count