Привет, я только что написал сценарий, вдохновленный учебником YouTube.
Дело в том, что я не могу заставить сервопривод вращаться. Я думаю, что переменная «x-medium» и «position» не go внизу.
тогда угол поворота не изменяется. то, что я хочу сделать, это следить за цветом с помощью веб-камеры, установленной на сервоприводе. когда мы перемещаем объект, камера вращается
с кем-то helpme?
вот мой сценарий
import sys
sys.path.append('/usr/local/lib/python3.7/site-packages')
import cv2
import numpy as np
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
pmw_gpio = 11
frequence = 50
position = 2.5
GPIO.setup(pmw_gpio, GPIO.OUT)
pmw = GPIO.PWM(pmw_gpio, frequence)
pmw.start(angle_to_percent(90))
time.sleep(1)
cap = cv2.VideoCapture(0)
cap.set(3, 480)
cap.set(4, 320)
_, frame = cap.read()
rows, cols, _ = frame.shape
x_medium = int(cols / 2)
center = int(cols / 2)
position = 90 #degrees
while True:
_, frame = cap.read()
hsv_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
# red color
low_red = np.array([161, 155, 84])
high_red = np.array([179, 255, 255])
red_mask = cv2.inRange(hsv_frame, low_red, high_red)
contours, _ = cv2.findContours(red_mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
contours = sorted(contours, key=lambda x:cv2.contourArea(x), reverse=True)
for cnt in contours:
(x, y, w, h) = cv2.boundingRect(cnt)
x_medium = int((x + x + w) / 2)
print(x_medium)
break
cv2.line(frame, (x_medium, 0), (x_medium, 480), (0, 255, 0), 2)
cv2.imshow("Frame", frame)
#servo
if x_medium < center -40:
position += 0.1
elif x_medium > center + 40:
position -= 0.1
pmw.ChangeDutyCycle(angle_as_percent(position))
key = cv2.waitKey(1)
if key == 27:
break
cap.release()
cv2.destroyAllWindows()