Raspberry Pi Renkli Cisim Takibi
Merhaba arkadaşlar. Raspberry pi ile görüntü işleme ve renkli cisim takibi yapacağız. Devrenin ayrıntılı anlatımı videoda mevcuttur.Bende buradan Yazılım ve devre şemasını sizlerle paylaşmak istedim.




import cv2
import numpy as np
import RPi.GPIO as GPIO
import time # kütüphnaeler dahil edildi
GPIO.setmode(GPIO.BCM) #BCM pinleri şeçildi
GPIO.setwarnings(False) # hata mesajı kapatıldı
sol_hiz=17 # sol teker hız değişkeneni 0-50
sag_hiz=20 # sag teker hız değişkeneni 0-50
x=0 # cisim x koordinat için değişken
y=0 # cisim y koordinat için değişken
sol_ileri = 13
sol_geri = 19
sag_ileri = 5
sag_geri = 6 # motor kontrol pinleri
led_sol = 4
led_orta = 27
led_sag = 17
buzzer = 21 # led ve buzzer kontrol pinleri
GPIO.setup(led_sol,GPIO.OUT)
GPIO.setup(led_orta,GPIO.OUT)
GPIO.setup(led_sag,GPIO.OUT)
GPIO.setup(buzzer,GPIO.OUT) # çıkış yapıldı
GPIO.setup(22,GPIO.OUT) # sol teker hız pini
GPIO.setup(26,GPIO.OUT) # sag teker hız pini
GPIO.setup(sol_ileri,GPIO.OUT)
GPIO.setup(sol_geri,GPIO.OUT)
GPIO.setup(sag_ileri,GPIO.OUT)
GPIO.setup(sag_geri,GPIO.OUT) # motor pinleri çıkış yapıldı
GPIO.output(sol_ileri,0)
GPIO.output(sol_geri,0)
GPIO.output(sag_ileri,0)
GPIO.output(sag_geri,0) # motor pinleri low yapıldı araç durur
sol = GPIO.PWM(22,100) # frekan aralığı belirlendi
sag = GPIO.PWM(26,100) #frekan aralığı belirlendi
sol.start(0) # frekans üretimi aktif edildi
sag.start(0)
sol.ChangeDutyCycle(sol_hiz)
sag.ChangeDutyCycle(sag_hiz) # üretilen frekans motorlara aktarıldı
GPIO.output(led_sol,1)
time.sleep(1)
GPIO.output(led_orta,1)
time.sleep(1)
GPIO.output(led_sag,1)
time.sleep(1)
GPIO.output(buzzer,1)
time.sleep(1)
GPIO.output(led_sol,0)
GPIO.output(led_orta,0)
GPIO.output(led_sag,0)
GPIO.output(buzzer,0) # robot çalışmaya başlayacak sırayla led ler yandı
cap = cv2.VideoCapture(0) # alınan video cap değişkeine atandı
cap.set(3, 600)
cap.set(4, 600) # cap değişkenine atanan videonun boyutu belirlendi
_, frame = cap.read()
rows, cols, _ = frame.shape
x_medium = int(cols / 2)
y_medium = int(cols / 2)
w_medium = int(cols / 2)
h_medium = int(cols / 2)
center = int(cols / 2) # cizme ait x y h w bilgileri değişkenlere atandı
while True: # sonsuz döngüye girildi
sol.ChangeDutyCycle(sol_hiz)
sag.ChangeDutyCycle(sag_hiz)
_, frame = cap.read()
hsv_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) # renk algilama işlemi başlatıldı
low_red = np.array([161, 155, 84]) # alt kırımızı rengin bilgileri girildi
high_red = np.array([179, 255, 255]) # üst kırımızı rengin bilgileri girildi
red_mask = cv2.inRange(hsv_frame, low_red, high_red) # renk bilgileri değişkenen atandı
_, contours, _ = cv2.findContours(red_mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
contours = sorted(contours, key=lambda x:cv2.contourArea(x), reverse=True) # renk algılanırsa işleme devam edilecek
for cnt in contours:
(x, y, w, h) = cv2.boundingRect(cnt) # algılanan rengin x ve y koordinatları bulundu
x_medium = int((x + x + w) / 2)
break
# boy renk kalinlik
cv2.line(frame, (x_medium, 0), (x_medium, 480), (0, 0, 255), 2) # x koordinatı ekranda gösterildi
cv2.imshow("Frame", frame)
print("x ",x," y ",y)
key = cv2.waitKey(1)
if key == 27: # renk olup olmadığı sorgulandı
break
elif y > 420 or y < 5: # cisim robota çok yakınsa veya çok uzaksa robot durur
if x < 150: # cisim ekranın solunda ise robot sola döner
GPIO.output(sol_ileri,1)
GPIO.output(sol_geri,0)
GPIO.output(sag_ileri,0)
GPIO.output(sag_geri,0)
elif x > 500: # cisim ekranın sagında ise robot saga döner
GPIO.output(sol_ileri,0)
GPIO.output(sol_geri,0)
GPIO.output(sag_ileri,1)
GPIO.output(sag_geri,0)
elif x > 149 and x < 501: # cisim ekranın ortasında ise robot düz gider
GPIO.output(sol_ileri,0)
GPIO.output(sol_geri,0)
GPIO.output(sag_ileri,0)
GPIO.output(sag_geri,0)
elif x < 150: # cisim ekranın solunda ise robot sola döner
GPIO.output(sol_ileri,1)
GPIO.output(sol_geri,0)
GPIO.output(sag_ileri,0)
GPIO.output(sag_geri,0)
elif x > 500: # cisim ekranın sagında ise robot saga döner
GPIO.output(sol_ileri,0)
GPIO.output(sol_geri,0)
GPIO.output(sag_ileri,1)
GPIO.output(sag_geri,0)
elif x > 149 and x < 501: # cisim ekranın ortasında ise robot düz gider
GPIO.output(sol_ileri,1)
GPIO.output(sol_geri,0)
GPIO.output(sag_ileri,1)
GPIO.output(sag_geri,0)
cap.release()
cv2.destroyAllWindows()
Etiketler: görüntü işleme, işleme, izleme, kırımızı top izleme, opencv, raspberry pi renkli cisim takibi, renk, renk takibi, takip
Eklenme Tarihi: 20 Mayıs 2020
Konu hakkında yorumunuzu yazın