Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Error in Raspberry Pi
#1
Merry Christmas and good evening to everyone. I have a hand tracking code.I wrote the code by combining two different codes with chat gpt. I try to fix errors but I cant fix this error. This line written by ai.

I got "syntax error: invalid syntax" for this line:
'mpDraw.draw_landmarks(img, handLms, mpHands.HAND_CONNECTIONS)'

This is my whole code:
import cv2
import time
import mediapipe as mp
import numpy as np
import math
import board
import busio
import adafruit_mcp4725
import RPi.GPIO as GPIO

# Initialize I2C DAC for frequency control (MCP4725)
i2c = busio.I2C(board.SCL, board.SDA)
dac = adafruit_mcp4725.MCP4725(i2c)

# Initialize GPIO pins for amplitude control (digipot)
CS = 17   # BCM GPIO17
INC = 27  # BCM GPIO27
UD = 22   # BCM GPIO22

GPIO.setmode(GPIO.BCM)
GPIO.setup(CS, GPIO.OUT)
GPIO.setup(INC, GPIO.OUT)
GPIO.setup(UD, GPIO.OUT)

GPIO.output(CS, GPIO.HIGH)
GPIO.output(INC, GPIO.HIGH)
GPIO.output(UD, GPIO.LOW)

# Camera and hand tracking setup
cap = cv2.VideoCapture(0)  # Removed cv2.CAP_DSHOW for Raspberry Pi compatibility

min_freq = 100
max_freq = 1000
y_min = 0
y_max = 600

mpHands = mp.solutions.hands
hands = mpHands.Hands(min_detection_confidence=0.8,
                      min_tracking_confidence=0.75,
                      max_num_hands=2)
mpDraw = mp.solutions.drawing_utils

pTime = 0
cTime = 0

# Initialize amplitude and frequency with default values
amplitude = 100
frequency = 100

def set_digipot_level(new_amplitude, current_position):
    """Control amplifier level via digipot"""
    # Convert amplitude (100 to 32767) to digipot steps (0 to 99)
    new_position = int((new_amplitude - 100) * (99 / (32767 - 100)))
    new_position = max(0, min(99, new_position))

    steps = abs(new_position - current_position)
    direction = (new_position > current_position)
    
    GPIO.output(CS, GPIO.LOW)
    GPIO.output(UD, GPIO.HIGH if direction else GPIO.LOW)
    
    for _ in range(steps):
        GPIO.output(INC, GPIO.LOW)
        time.sleep(0.001)
        GPIO.output(INC, GPIO.HIGH)
        time.sleep(0.001)
        
    GPIO.output(CS, GPIO.HIGH)
    return new_position

def get_label(index, results):
    output = None
    if results.multi_handedness:
        for idx, classification in enumerate(results.multi_handedness):
            if classification.classification[0].index == index:
                output = classification.classification[0].label
    return output

try:
    current_digipot_position = 0  # Track the current position of the digipot
    
    while True:
        success, img = cap.read()
        if not success:
            print("Failed to capture image from camera.")
            break
        img = cv2.flip(img, 1)
        imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

        cTime = time.time()
        fps = 1 / (cTime - pTime)
        pTime = cTime

        results = hands.process(imgRGB)
        if results.multi_hand_landmarks:
            for hand_index, handLms in enumerate(results.multi_hand_landmarks):
                handType = get_label(hand_index, results)
                for lm_id, lm in enumerate(handLms.landmark):
                    h, w, c = img.shape

                    cy = abs(cy - 640)
                    cy -= y_min

                    if lm_id == 8 and handType:
                        if handType == 'Left':
                            # Control amplitude via digipot
                            if cy < 187:
                                amplitude = 100 
                            elif cy < 612:
                                amplitude = int(100 + (32667 - 100) * ((cy - 187) / (612 - 187)))
                            else:
                                amplitude = 32767
                            
                            current_digipot_position = set_digipot_level(amplitude, current_digipot_position)
                            
                        elif handType == 'Right':
                            # Control frequency via DAC
                            if cy < 187:
                                frequency = 100
                            elif cy < 612:
                                frequency = int(100 + (1000 - 100) * ((cy - 187) / (612 - 187)))
                            else:
                                frequency = 1000
                            
                            # Convert frequency to DAC value (0-65535 range for MCP4725)
                            dac_value = int((frequency - min_freq) * (65535 / (max_freq - min_freq)))
                            dac_value = max(0, min(65535, dac_value))
                            dac.value = dac_value

                mpDraw.draw_landmarks(img, handLms, mpHands.HAND_CONNECTIONS)

        cv2.putText(img, "FPS:" + str(int(fps)), (10, 75), cv2.FONT_HERSHEY_PLAIN, 3, (255, 0, 0), 5)
        cv2.imshow("img", img)

        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

finally:
    cap.release()
    cv2.destroyAllWindows()
    GPIO.cleanup()
Yoriz write Dec-26-2024, 09:24 PM:
Please post all code, output and errors (in its entirety) between their respective tags. Refer to BBCode help topic on how to post. Use the "Preview Post" button to make sure the code is presented as you expect before hitting the "Post Reply/Thread" button.
Reply
#2
if AI made an error then AI should be the one to research why it made an error.
Tradition is peer pressure from dead people

What do you call someone who speaks three languages? Trilingual. Two languages? Bilingual. One language? American.
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  No route to host error when using requests.post in python on raspberry pi mariummalik22 0 4,810 Jan-06-2018, 08:34 PM
Last Post: mariummalik22

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020