Ben de koda bakamıyorum şu an üstün körü tavsiyeler.
Muhtemelen dosyayı açamıyor.
Emin değilim imread() none döndürüyorsa, tekrar oku şeklinde bir if döngüsü ile, hata döndürüyorsa try ile yerinde yakalamak gerekir.
Deneyerek bakalım yarın iki seçenekten biri çalışacaktır.
EDIT:
Madem yarın oldu;
def fotoal(): #Fotoğrafı içe aktarma.
global data
global dataHsv
global fotoAd
fotoAd = "resim5.jpg"
try :
data = cv.imread(fotoAd)
print(fotoAd)
x, y, w, h = 0, 0, 0, 0
data = cv.medianBlur(data,5)
dataHsv=cv.cvtColor(data,cv.COLOR_BGR2HSV)
except:
time.sleep(10)
fotoal()
try except içine aldım. dosyayı açamazsa, 10 saniye bekleyip tekrar resmi istiyor. Çok tehlikeli aslında eğer fotoğraf gönderemezseniz bu durumda kod burada döner durur. Ama işinizi görür.
if(renk == "sarı"):
while 1:
sarı()
kırmızı()
spointsList =(kirmiziDeg,sariDeg, xDeg )
getAngle(spointsList)
cv.imshow('Resim', data)
gonder(str(angD)) #Seri porttan gönder.
print("Açı :",angD,"°",sep="")
os.remove(fotoAd)
fotoal()
print("Fotoğraf bekleniyor...")
time.sleep(10)
fotoal()
Buradaki try except leri çıkardım. Burada her yerden hata alabilir ve kontrol etmek zor.
gonder in içinde ayrı, fotoal ın içinde ayrı hata takibi yapmak daha doğru olur.
#arduino = serial.Serial(port='COM5', baudrate=115200, timeout=.1)
def gonder(an): #Seri haberleşme.
#arduino.write(bytes(an, 'utf-8'))
#time.sleep(0.05)
#veri = arduino.readline()
return veri
while True:
#value = gonder(an)
print(value)
Bende haberleşme kısmı olmadığından bu kısmın bazı satırlarını yorum satırına çevirdim. Bende şu an com5 te haberleşen bir şey olmadığından.
Klasöre önce resim5.jpg olmadan başlattım.
Kod çalıştı, 10 saniyede bir warning veriyor, doğal çünkü resmi bulamadı. Resim geldiğinde kodu çalıştırıyor.
import cv2 as cv
import numpy as np
import math
import time
import serial
import os
def fotoal(): #Fotoğrafı içe aktarma.
global data
global dataHsv
global fotoAd
fotoAd = "resim5.jpg"
try :
data = cv.imread(fotoAd)
print(fotoAd)
x, y, w, h = 0, 0, 0, 0
data = cv.medianBlur(data,5)
dataHsv=cv.cvtColor(data,cv.COLOR_BGR2HSV)
except:
time.sleep(10)
fotoal()
a = 0
b = 0
maviDeg = None
sariDeg = None
kirmiziDeg = None
xDeg = None
yesilDeg = None
#arduino = serial.Serial(port='COM5', baudrate=115200, timeout=.1)
def gonder(an): #Seri haberleşme.
#arduino.write(bytes(an, 'utf-8'))
#time.sleep(0.05)
#veri = arduino.readline()
return veri
while True:
#value = gonder(an)
print(value)
fotoal()
def mavi():
global a
global b
global maviDeg
mlower_color = np.array([75,100,100])#Mavi renk eşik değerleri.
mupper_color = np.array([130,255,255])
mask = cv.inRange(dataHsv, mlower_color,mupper_color)
mask = cv.dilate(mask,(3,3),iterations=3)
contour, _ = cv.findContours(mask,cv.RETR_TREE,cv.CHAIN_APPROX_SIMPLE)
for cnt in contour:
area = cv.contourArea(cnt)
if area > 480:#Kontur minimum değeri.
x, y, w, h = cv.boundingRect(cnt) #Diktörtgen kutu çizimi.
cv.rectangle(data, (x, y), (x + w, y + h), (0, 255, 0), 3)
cv.putText( data, "Mavi Hedef", (x-35,y), cv.FONT_HERSHEY_SIMPLEX, 1,(0,0,0), 2, cv.LINE_AA )
a = x+(w/2) # Çerçeve genişliğinin yarısı
b = y+(h/2) # Çerçeve yüksekliğinin yarısı
cv.circle(data,((int(a)),(int(b))), 1, (0,255,0), 6)
maviDeg = ([int(a),int(b)])
def sarı():
global a
global b
global sariDeg
slower_color = np.array([22,100,100])#Sarı renk eşik değerleri.
supper_color = np.array([38,255,255])
mask = cv.inRange(dataHsv, slower_color,supper_color)
mask = cv.dilate(mask,(3,3),iterations=3)
contour, _ = cv.findContours(mask,cv.RETR_TREE,cv.CHAIN_APPROX_SIMPLE)
for cnt in contour:
area = cv.contourArea(cnt)
if area > 480:#Kontur minimum değeri.
x, y, w, h = cv.boundingRect(cnt) #Diktörtgen kutu çizimi.
cv.rectangle(data, (x, y), (x + w, y + h), (0, 255, 0), 3)
cv.putText( data, "Sari Hedef", (x-35,y), cv.FONT_HERSHEY_SIMPLEX, 1,(0,0,0), 2, cv.LINE_AA )
a = x+(w/2) # Çerçeve genişliğinin yarısı
b = y+(h/2) # Çerçeve yüksekliğinin yarısı
cv.circle(data,((int(a)),(int(b))), 1, (0,255,0), 6)
sariDeg = ([int(a),int(b)])
def yeşil():
global a
global b
global yesilDeg
ylower_color = np.array([38,100,100])#Yeşil renk eşik değerleri.
yupper_color = np.array([75,255,255])
mask = cv.inRange(dataHsv, ylower_color,yupper_color)
mask = cv.dilate(mask,(3,3),iterations=3)
contour, _ = cv.findContours(mask,cv.RETR_TREE,cv.CHAIN_APPROX_SIMPLE)
for cnt in contour:
area = cv.contourArea(cnt)
if area > 480:#Kontur minimum değeri.
x, y, w, h = cv.boundingRect(cnt) #Diktörtgen kutu çizimi.
cv.rectangle(data, (x, y), (x + w, y + h), (0, 255, 0), 3)
cv.putText( data, "Yesil Hedef", (x-35,y), cv.FONT_HERSHEY_SIMPLEX, 1,(0,0,0), 2, cv.LINE_AA )
a = x+(w/2) # Çerçeve genişliğinin yarısı
b = y+(h/2) # Çerçeve yüksekliğinin yarısı
cv.circle(data,((int(a)),(int(b))), 1, (0,255,0), 6)
yesilDeg = ([int(a),int(b)])
def kırmızı():
global kirmiziDeg
global xDeg
klower_color = np.array([160,100,100])#Kırrmızı renk eşik değerleri.
kupper_color = np.array([179,255,255])
mask = cv.inRange(dataHsv, klower_color,kupper_color)
mask = cv.dilate(mask,(3,3),iterations=3)
contour, _ = cv.findContours(mask,cv.RETR_TREE,cv.CHAIN_APPROX_SIMPLE)
for cnt in contour:
area = cv.contourArea(cnt)
if area > 480:#Kontur minimum değeri.
x, y, w, h = cv.boundingRect(cnt) #Diktörtgen kutu çizimi.
cv.rectangle(data, (x, y), (x + w, y + h), (0, 255, 0), 3)
cv.putText( data, "Kirmizi", (x,y), cv.FONT_HERSHEY_SIMPLEX, 1,(0,0,0), 2, cv.LINE_AA )
a1 = x+(w/2) # Çerçeve genişliğinin yarısı
b1 = y+(h/2) # Çerçeve yüksekliğinin yarısı
cv.circle(data,((int(a1)),(int(b1))), 1, (0,255,0), 6)
kirmiziDeg = ([int(a1),int(b1)])
cv.line(data, (int(a1), int(b1)), (int(a), int(b)), (0, 0, 0), 5)
cv.line(data, (int(a1), int(b1)), (int(a1+a1), int(b1)), (0, 0, 0), 5)
xDeg = ([a1+a1,b1])
angD = None
def getAngle(pointList):
global angD
b, a, c = pointList[-3:]
ang = math.degrees(math.atan2(c[1]-b[1], c[0]-b[0]) - math.atan2(a[1]-b[1], a[0]-b[0]))
if ang < 0:
angD= round (ang + 360)
else:
angD= round(ang )
cv.putText(data,str(angD),(b[0]-40,b[1]-20),cv.FONT_HERSHEY_COMPLEX,1.5,(0,0,0),2)
renk = input("sarı, yeşil, mavi\nÇizgi çekilecek renk: ")
if(renk == "sarı"):
while 1:
sarı()
kırmızı()
spointsList =(kirmiziDeg,sariDeg, xDeg )
getAngle(spointsList)
cv.imshow('Resim', data)
gonder(str(angD)) #Seri porttan gönder.
print("Açı :",angD,"°",sep="")
os.remove(fotoAd)
fotoal()
print("Fotoğraf bekleniyor...")
time.sleep(10)
fotoal()
elif(renk == "mavi"):
mavi()
kırmızı()
mpointsList =(kirmiziDeg,maviDeg, xDeg )
getAngle(mpointsList)
gonder(str(angD)) #Seri porttan gönder.
print("Açı :",angD,"°",sep="")
cv.imshow('Resim', data)
elif(renk == "yeşil"):
yeşil()
kırmızı()
ypointsList =(kirmiziDeg,yesilDeg, xDeg )
getAngle(ypointsList)
gonder(str(angD)) #Seri porttan gönder.
print("Açı :",angD,"°",sep="")
cv.imshow('Resim', data)
Söylediğim gibi yorum satırlarını düzelterek kodu çalıştırın.
Ben olduğu gibi bıraktım kodu.
Mutlaka haberleşme fonksiyonunuzda da try except ile hata denetimi yapın. Kod her yerden kırılmaya çok müsait.