Python OpenCV ile Açı Ölçümündeki Hata

Hocam en altta if’in altında dediğiniz gibi try except kullandım ama yine de foto gelmezse hata veriyor. Bahsettiğiniz gibi fotoğrafın olup olmadığını nasıl kontrol ettirebiliriz. Bu sayede foto varsa al/işle/sil yoksa bekle gibisinden bir şey yapmak istiyoruz.

Söylediğim satırı try ile kontrol edip okuma hatası varsa yeniden oku şeklinde dener misiniz?

Alt tarafta değil.

Hocam şu an Pc yanımda değil yarın deneyip sonucu sizlerle paylaşırım inşallah, hayırlı geceler dilerim.

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.

1 Beğeni

Hocam az önce bir soru daha sormuştuk onu şimdi çözdük tekrardan teşekkürler.

Hocam tekrardan merhabalar,
Programımızı biraz daha geliştirdik ve birkaç GUİ eklentisi ekledik(buton vs.). Zaten amacımız işin sonunda programı tamamen bir GUİ haline getirmekti. Şimdilik sadece birkaç buton ekledik. Bu aşamada karşılaştığımız sorunu sizlerle paylaşmak istedik. Şöyleki, Tkinter penceresi açıldığında sarı kırmızı ve mavi adında 3 buton geliyor. Amacımız bu butonlara basıldığında önceden yaptığı gibi kırmızı nesneden istenilen renkteki nesneye çizgi çekip aradaki açıyı hesaplamak. Sorunumuz şu ki; sürekli olarak aynı fotoğrafı işliyor. “os.remove(fotoAd)” komutuyla fotoğrafı silmemize rağmen arka planda aynı fotoğraf işleniyor.
Sorunumuzu, kodları kendi PC’nizde çalıştırarak daha iyi anlayabilirsiniz.


import cv2 as cv
import numpy as np
import math
import os
import time
import serial
from tkinter import *

pen = Tk()

pen.geometry("900x650")
pen.title("DENEME")

ust_frame = Frame(pen, bg = "lightblue")
ust_frame.place(relx = 0.795, rely = 0.01 ,relwidth = 0.20, relheight = 0.98)

yazi = Label(ust_frame, text = "BUTONLAR:", font ="verdana 12 bold" )
yazi.pack(padx = 0.1, pady = 0.1, side = TOP)


arduino = serial.Serial(port='COM3', baudrate=115200, timeout=.1)
def gonder(an):
    arduino.write(bytes(an, 'utf-8'))
    time.sleep(0.05)
    veri = arduino.readline()
    return veri
    while True:
        value = gonder(an)
        print(value) # printing the value

#dosya.close()
#os.remove("test.jpg")
def fotoal(): #Fotoğrafı içe aktarma.
    global data
    global dataHsv
    global fotoAd
    fotoAd = "foto.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(1)
        fotoal()
fotoal()

a = 0
b = 0
maviDeg = None
sariDeg = None
kirmiziDeg = None
xDeg = None
yesilDeg = None

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)])
            #print("mavi",a,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)
        #print(angD)
    else: 
         angD= round(ang )
         #print(angD)
    cv.putText(data,str(angD),(b[0]-40,b[1]-20),cv.FONT_HERSHEY_COMPLEX,1.5,(0,0,0),2)
    
def call_sarı():
    sarı()
    kırmızı()
    os.remove(fotoAd)
    if(sariDeg == None):
        print("Görselde SARI Renk Bulunamadı...")
    while not(sariDeg == None):
        spointsList =(kirmiziDeg,sariDeg, xDeg )
        getAngle(spointsList)
        cv.imshow('Resim', data)
        print("Açı :",angD,"°",sep="")
        cv.waitKey(5000)
        cv.destroyAllWindows()
        print("Fotoğraf bekleniyor...")
        break
    gonder(str(angD))
    
def call_mavi():
    mavi()
    kırmızı()
    os.remove(fotoAd)
    if(maviDeg == None):
        print("Görselde MAVİ Renk Bulunamadı...")
    while not(maviDeg == None):
        mpointsList =(kirmiziDeg,maviDeg, xDeg )
        getAngle(mpointsList)
        cv.imshow('Resim', data)
        print("Açı :",angD,"°",sep="")
        cv.waitKey(5000)
        cv.destroyAllWindows()
        print("Fotoğraf bekleniyor...")
        break
    gonder(str(angD))
    
def call_yeşil():
    yeşil()
    kırmızı()
    os.remove(fotoAd)
    if(yesilDeg == None):
        print("Görselde YEŞİL Renk Bulunamadı...")
    while not(yesilDeg == None):
        ypointsList =(kirmiziDeg,yesilDeg, xDeg )
        getAngle(ypointsList)
        cv.imshow('Resim', data)
        print("Açı :",angD,"°",sep="")
        cv.waitKey(5000)
        cv.destroyAllWindows()
        print("Fotoğraf bekleniyor...")
        break
    gonder(str(angD))
    
def buton():
    try:
        but1 = Button(ust_frame, text = "SARI", command = call_sarı, padx = 50, pady = 10)
        but1.pack(pady = 10)
        but2 = Button(ust_frame, text = "MAVİ", command = call_mavi, padx = 50, pady = 10)
        but2.pack(pady = 10)
        but3 = Button(ust_frame, text = "YEŞİL", command = call_yeşil, padx = 50, pady = 10)
        but3.pack(pady = 10)
        pen.mainloop()
    except:
        fotoal()
buton()

Merhaba.

Yine kodu iyi ilerletmişsiniz.

def buton():
    try:
        but1 = Button(ust_frame, text = "SARI", command = call_sarı, padx = 50, pady = 10)
        but1.pack(pady = 10)
        but2 = Button(ust_frame, text = "MAVİ", command = call_mavi, padx = 50, pady = 10)
        but2.pack(pady = 10)
        but3 = Button(ust_frame, text = "YEŞİL", command = call_yeşil, padx = 50, pady = 10)
        but3.pack(pady = 10)
        pen.mainloop()
    except:
        fotoal()

fotoal() sadece bir hata olursa ancak kendini güncelliyor, bence hata burada. Aslında her butona bastığınızda fotoal ile çağırmalısınız ki yeni resim alınabilsin.

def call_sarı():
    fotoal() # Güncel Resmi Al
    sarı()
    kırmızı()
    os.remove(fotoAd)
    if(sariDeg == None):
        print("Görselde SARI Renk Bulunamadı...")
    while not(sariDeg == None):
        spointsList =(kirmiziDeg,sariDeg, xDeg )
        getAngle(spointsList)
        cv.imshow('Resim', data)
        print("Açı :",angD,"°",sep="")
        cv.waitKey(5000)
        cv.destroyAllWindows()
        print("Fotoğraf bekleniyor...")
        break
    gonder(str(angD))

Renk fonksiyonlarının başında çağırırsanız en güncel resmi alırsınız gibime geliyor.

Gibime geliyor, çünkü kodu denemedim.

Kodunuzu tamamladıktan sonra buraya atın. En son şu fonksiyonları bir düzenleyeyim, belki sınıaflara aktarayım. Çok fazla tekrar var.

:slight_smile:

Deneyin mesaj atın bakalım.

Çok teşekkür ederiz hocam yarın deneyip sonucu sizlerle paylaşırım inşallah.

Tabi hocam mutlaka atacağız.

1 Beğeni

Hocam tekrardan merhabalar :slight_smile:
Söylediğiniz şekilde yapınca sorunumuz çözüldü. Şimdi şöyle bir şey düşünüyoruz. Fotoğraf gelinceye kadar butonlar pasif olarak beklesin fotoğraf gelince butonlar aktifleşsin. Bunun için şöyle bir şey ekledim:

def kontrol():
    global durum
    durum = "disable"
    ad = fotoal()
    print(ad)
    if not(ad == None):
        durum = "normal"

Butonlar kısmını da şöyle yaptık:

def buton():
    while True:
        kontrol()
        but1 = Button(ust_frame, text = "SARI", command = call_sarı, padx = 50, pady = 10, state = durum)
        but1.pack(pady = 10)
        print(durum)
        but2 = Button(ust_frame, text = "MAVİ", command = call_mavi, padx = 50, pady = 10, state = durum)
        but2.pack(pady = 10)
        but3 = Button(ust_frame, text = "YEŞİL", command = call_yeşil, padx = 50, pady = 10, state = durum)
        but3.pack(pady = 10)
        pen.mainloop()

Ancak bir türlü istediğimiz şekilde olmadı. Diğer bir sorunumuz da butona bastıktan sonra foto silindiği için tkinter penceresi donuyor. Bütün sorun fotoal() fonksiyonunda galiba.
Ne olur ne olmaz diye tüm kodları aşağıya bırakıyorum.
Şimdiden teşekkürler.

import cv2 as cv
import numpy as np
import math
import os
import time
import serial
from tkinter import *

pen = Tk()

pen.geometry("900x650")
pen.title("DENEME")

ust_frame = Frame(pen, bg = "lightblue")
ust_frame.place(relx = 0.795, rely = 0.01 ,relwidth = 0.20, relheight = 0.98)

yazi = Label(ust_frame, text = "BUTONLAR:", font ="verdana 12 bold" )
yazi.pack(padx = 0.1, pady = 0.1, side = TOP)


arduino = serial.Serial(port='COM3', baudrate=9600, timeout=.1)
def gonder(an):
    while 1:
        arduino.write(bytes(an, 'utf-8'))
        time.sleep(0.05)
        break
    veri = arduino.readline()
    return veri
    while True:
        value = gonder(an)
        print(value) # printing the value
fotoAd = None
#dosya.close()
#os.remove("test.jpg")
def fotoal(): #Fotoğrafı içe aktarma.
    global data
    global dataHsv
    global fotoAd
    fotoAd = "foto.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(1)
        fotoal()
    return fotoAd

a = 0
b = 0
maviDeg = None
sariDeg = None
kirmiziDeg = None
xDeg = None
yesilDeg = None

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)])
            #print("mavi",a,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)
        #print(angD)
    else: 
         angD= round(ang )
         #print(angD)
    cv.putText(data,str(angD),(b[0]-40,b[1]-20),cv.FONT_HERSHEY_COMPLEX,1.5,(0,0,0),2)

def kontrol():
    global durum
    durum = "disable"
    ad = fotoal()
    print(ad)
    if not(ad == None):
        durum = "normal"
        
def call_sarı():
    kontrol()
    sarı()
    kırmızı()
    os.remove(fotoAd)
    if(sariDeg == None):
        print("Görselde SARI Renk Bulunamadı...")
    while not(sariDeg == None):
        spointsList =(kirmiziDeg,sariDeg, xDeg )
        getAngle(spointsList)
        cv.imshow('Resim', data)
        print("Açı :",angD,"°",sep="")
        cv.waitKey(5000)
        cv.destroyAllWindows()
        print("Fotoğraf bekleniyor...")
        break
    gonder("*"+str(angD)+"#")
    print("foto = "+fotoAd)
def call_mavi():
    fotoal()
    mavi()
    kırmızı()
    os.remove(fotoAd)
    if(maviDeg == None):
        print("Görselde MAVİ Renk Bulunamadı...")
    while not(maviDeg == None):
        mpointsList =(kirmiziDeg,maviDeg, xDeg )
        getAngle(mpointsList)
        cv.imshow('Resim', data)
        print("Açı :",angD,"°",sep="")
        cv.waitKey(5000)
        cv.destroyAllWindows()
        print("Fotoğraf bekleniyor...")
        break
    gonder("*"+str(angD)+"#")
    
def call_yeşil():
    fotoal()
    yeşil()
    kırmızı()
    os.remove(fotoAd)
    if(yesilDeg == None):
        print("Görselde YEŞİL Renk Bulunamadı...")
    while not(yesilDeg == None):
        ypointsList =(kirmiziDeg,yesilDeg, xDeg )
        getAngle(ypointsList)
        cv.imshow('Resim', data)
        print("Açı :",angD,"°",sep="")
        cv.waitKey(5000)
        cv.destroyAllWindows()
        print("Fotoğraf bekleniyor...")
        break
    gonder("*"+str(angD)+"#")
    
def buton():
    while True:
        kontrol()
        but1 = Button(ust_frame, text = "SARI", command = call_sarı, padx = 50, pady = 10, state = durum)
        but1.pack(pady = 10)
        print(durum)
        but2 = Button(ust_frame, text = "MAVİ", command = call_mavi, padx = 50, pady = 10, state = durum)
        but2.pack(pady = 10)
        but3 = Button(ust_frame, text = "YEŞİL", command = call_yeşil, padx = 50, pady = 10, state = durum)
        but3.pack(pady = 10)
        pen.mainloop()
buton()

Butona döngü yada uzun süren kontrol işlemi atarsanız arayüz donar.

Çözüm için verdiğim mesaj linkinin başlığını inceleyebilirsiniz.

Linkini verdiğim alternatif bir çözüm müş, deneyin işlevsel mi görmüş oluruz. Öncesindeki mesajlarda zaten benim çözüm önerim de duruyor.

Hocam yine geç cevaplıyorum kusura bakmayın. Sayenizde bu sorunu da çözdük. Ufak bir sorum daha olacak. Programa şöyle bir şey daha eklemek istiyoruz. Örneğin, “Space” tuşuna basıncaya kadar gelen bütün fotoğraflarda sarı rengini arasın. Space’ye basıldıktan sonra yine renk sorsun. Sorun şu ki tuşa basıldığını yalnızca bir döngüye sokarsak anlayabiliyoruz. Ancak tuş fonksiyonunu döngüye alınca bu sefer diğer kodlar çalışmıyor. Sorunu anlatabildiğimi umuyorum. Bunu nasıl yapabiliriz.

How to bind spacebar key to a certain method in tkinter (python) - Stack Overflow

Hocam günlerdir raspberry pi zero’ya wifi modülü bağlamaya çalışıyoruz ancak ne yaptıysak olmuyor. Aslında raspberry’ye adaptörü bağlayıp terminalde “lsusb” yazdığımızda adaptörü görüyor ancak wifi’yi görmüyor. Şurdaki videoda bir aşamaya kadar geliyoruz ancak “Failed to connect to non - global ctrl_ifname : ( nil ) error : No such file or directory” hatası veriyor. İki adet wifi modülü ile denedik ancak olmuyor.





Lütfen yardımcı olunuz. Teşekkürler.

Linux ve driverlar…

Doğru sürücü ve doğru konfigürasyonu uzaktan bulup tahmin etmek mümkün değil.

“Failed to connect to non - global ctrl_ifname : ( nil ) error : No such file or directory” 

difficulties using NetworkManager · Issue #50 · homeworkc/lazycast · GitHub

“when p2p-dev-wlan0 is created and managemened by WPA_SUPPLICANT the father interface change the mode because the NETWORK_MANAGER try to connect to Wireles infrastruture.”

Wireless-CLI not working on Pi Zero W Stretch Lite - Raspberry Pi Forums

Sadece tahminde bulunabilirim. Dahili wifi yada benzeri bir wlan configüre edilmiş ise onu kaldırıp. Yeniden sizin konfigürasyonunuza uygun bir tane kurmak ve sürücülerini yüklemek gerekir.

Tabi daha önce söylediğim gibi, ESP32 de bu iş daha kolay iken, şimdi burada linux üzerinde doğru konfigürasyonu deneme yanılma dışında bulmam mümkün olmayacak.

Yani baştan endişelendiğim konu zaten bu tür sürücü sorunlarıydı.

Hocam tekrardan merhabalar,
Yazılımımız neredeyse bitti. Ancak bir sorunumuz var :slight_smile:
Yazılımı bu haliyle pyinstaller ile .exe’ye dönüştürmeye çalıştık ancak bir türlü yapamadık. Her seferinde hata veriyor ya da uygulamayı açtığımızda direk kapanıyor. Kodların tamamını bırakıyorum. Şimdiden teşekkürler.

import cv2 as cv
import numpy as np
import math
import os
import time
import serial
from tkinter import *
from threading import *
from win32api import GetKeyState


pen = Tk()

pen.geometry("900x650+0+0")
pen.title("UYGULAMA DENEMESİ")

ust_frame = Frame(pen, bg = "lightblue")
ust_frame.place(relx = 0.795, rely = 0.01 ,relwidth = 0.20, relheight = 0.62)

alt_frame = Frame(pen, bg = "lightblue")
alt_frame.place(relx = 0.795, rely = 0.646 ,relwidth = 0.20, relheight = 0.045)

yazi = Label(ust_frame, text = "BUTONLAR:", font ="verdana 12 bold" )
yazi.pack(padx = 0.1, pady = 0.1, side = TOP)

# c_port = input("PORT GİR: ")
arduino = serial.Serial(port="COM3", baudrate=9600, timeout=.1)
def gonder(an):
    while 1:
        arduino.write(bytes(an, 'utf-8'))
        time.sleep(0.05)
        print(an, "Gönderildi...")
        yazi1 = Label(alt_frame, text = an+"Gönderildi...", font ="verdana 10 bold")
        yazi1.pack(padx = 0.1, pady = 2, side = TOP)
        break
    time.sleep(1)
    Tk.destroy(yazi1)
fotoAd = None
durum = None

def fotoal(): #Fotoğrafı içe aktarma.
    global data
    global dataHsv
    global fotoAd
    fotoAd = "foto.jpg"
    try :
        data = cv.imread(fotoAd)
        print(fotoAd + "İsimli fotoğraf bekleniyor...")
        x, y, w, h = 0, 0, 0, 0
        data = cv.medianBlur(data,5)
        dataHsv=cv.cvtColor(data,cv.COLOR_BGR2HSV)
    except:
        time.sleep(1)
        fotoal()
    return fotoAd

a = 0
b = 0
maviDeg = None
sariDeg = None
kirmiziDeg = None
xDeg = None
yesilDeg = None

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)])
            #print("mavi",a,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)
        #print(angD)
    else: 
         angD= round(ang )
         #print(angD)
    cv.putText(data,str(angD),(b[0]-40,b[1]-20),cv.FONT_HERSHEY_COMPLEX,1.5,(0,0,0),2)
gDeg = False
def call_sarı():
    global gDeg
    while 1:
        if(gDeg == True):
            gDeg = False
            break
        fotoal()
        sarı()
        kırmızı()
        if(sariDeg == None):
            print("Görselde SARI Renk Bulunamadı...")
            os.remove(fotoAd)
            gonder("*"+str(400)+"#")
            time.sleep(0.1)
            gonder("*"+str(400)+"#")
            break
        os.remove(fotoAd)
        gonder("*"+str(400)+"#")
        while not(sariDeg == None):
            spointsList =(kirmiziDeg,sariDeg, xDeg )
            getAngle(spointsList)
            cv.imshow('Resim', data)
            print("Açı :",angD,"°",sep="")
            cv.waitKey(1500)
            cv.destroyAllWindows()
            print("Fotoğraf bekleniyor...")
            durum = "normal"
            break
        gonder("*"+str(angD)+"#")
        time.sleep(0.1)
        gonder("*"+str(angD)+"#")
        print(gDeg)

def call_mavi():
    global gDeg
    while 1:
        if(gDeg == True):
            gDeg = False
            break
        fotoal()
        mavi()
        kırmızı()
        if(maviDeg == None):
            print("Görselde MAVİ Renk Bulunamadı...")
            os.remove(fotoAd)
            gonder("*"+str(400)+"#")
            time.sleep(0.1)
            gonder("*"+str(400)+"#")
            break
        os.remove(fotoAd)
        gonder("*"+str(400)+"#")
        while not(maviDeg == None):
            mpointsList =(kirmiziDeg,maviDeg, xDeg )
            getAngle(mpointsList)
            cv.imshow('Resim', data)
            print("Açı :",angD,"°",sep="")
            cv.waitKey(1500)
            cv.destroyAllWindows()
            durum = "normal"
            print("Fotoğraf bekleniyor...")
            break
        gonder("*"+str(angD)+"#")
        time.sleep(0.1)
        gonder("*"+str(angD)+"#")
        print(gDeg)


def call_yeşil():
    global gDeg
    while 1:
        if(gDeg == True):
            gDeg = False
            break
        fotoal()
        yeşil()
        kırmızı()
        if(yesilDeg == None):
            print("Görselde YEŞİL Renk Bulunamadı...")
            os.remove(fotoAd)
            gonder("*"+str(400)+"#")
            time.sleep(0.1)
            gonder("*"+str(400)+"#")
            break
        os.remove(fotoAd)
        gonder("*"+str(400)+"#")
        while not(yesilDeg == None):
            ypointsList =(kirmiziDeg,yesilDeg, xDeg )
            getAngle(ypointsList)
            cv.imshow('Resim', data)
            print("Açı :",angD,"°",sep="")
            cv.waitKey(1500)
            cv.destroyAllWindows()
            durum = "normal"
            print("Fotoğraf bekleniyor...")
            break
        gonder("*"+str(angD)+"#")
        time.sleep(0.1)
        gonder("*"+str(angD)+"#")
        print(gDeg)

def degdegis():
    global gDeg
    gDeg = True
    gonder("*"+str(450)+"#")
    
def thre_s():
    t1 = Thread(target = call_sarı)
    t1.start()

def thre_m():
    t2 = Thread(target = call_mavi)
    t2.start()

def thre_y():
    t3 = Thread(target = call_yeşil)
    t3.start()
    
def basla():
    gonder("*"+str(500)+"#")
    
def thre_son():
    td = Thread(target = degdegis)
    td.start()

def thre_baslat():
    tb = Thread(target = basla)
    tb.start()

    
def buton():
    but3 = Button(ust_frame, text = "GÖREVİ BAŞLAT", command = thre_baslat, padx = 30, pady = 10)
    but3.pack(pady = 10)
    but3 = Button(ust_frame, text = "GÖREVİ SONLANDIR", command = thre_son, padx = 19, pady = 10)
    but3.pack(pady = 10)
    but1 = Button(ust_frame, text = "SARI HEDEF", command = thre_s, padx = 40, pady = 10)
    but1.pack(pady = 10)
    but2 = Button(ust_frame, text = "MAVİ HEDEF", command = thre_m, padx = 40, pady = 10)
    but2.pack(pady = 10)
    but3 = Button(ust_frame, text = "YEŞİL HEDEF", command = thre_y, padx = 40, pady = 10)
    but3.pack(pady = 10)
    #but3 = Button(ust_frame, text = "AUTO", command = pass , padx = 58, pady = 10)
    #but3.pack(pady = 10)
    pen.mainloop()
    
buton()


Hata çıktılarını verirseniz fikir sahibi olmam kolay olur. Aksi halde kodu ben çevirip denemem gerekecek.

O ana kadar tek verebileceğim tavsiye.

pip install --upgrade opencv-python
pip install --upgrade pyinstaller

Yani güncellemek.

Bunun dışından ancak, aldığınız hata mesajlarını görürsem fikir sahibi olabilirim.

Hocam söylediğiniz güncellemeleri yaptım ancak işe yaramadı.
Herhangi bir hata vermiyor pyinstaller’i çalıştırdıktan sonra .exe haline geliyor ancak uygulama açılmıyor.
Pyinstaller’i çalıştırdığımızda başlara doğru şöyle bir hata metni geliyor ama paketlemeye devam ediyor.

353 WARNING: Several hooks defined for module 'numpy'. Please take care they do not conflict.

Onun dışında “warn-uygulama” adında çok uzun bir hata dosyası oluşturuyor:

Merhaba az önce derledim bir problem yok.

Komut satırından sadece şu komutu verip bekledim.:

içinde print vs komutları olabileceğinden, --noconsole parametresini vermedim.

Konsol ile beraber çalışıyor.

Gördüğüm kadarıyla klasörleri yönlendiriyor.

Ama istediğim yere taşıdım exe dosyası çalıştı.

Yani nelerin eksik olduğunu bilemem şu an ama varsayılan kurulum ve varsayılan ayarlarla gayet rahat derlendi.

Bu kadar kayıp modül uyarısını nasıl aldınız bilmiyorum.

Hocam ilgilendiğiniz için teşekkür ederiz, opencv’nin eski sürümünü kurduk sorun çözüldü.
Aslında tkinter penceresinin sol tarafını opencv için ayırmıştık ancak bir türlü işlenmiş fotoğrafı o kısıma alamadık. Acaba opencv’den gelen işlenmiş fotoğrafı tkinter penceresinde göstermenin bir yolu yok mu? Baya araştırdım da fotoğraf sürekli yenileneceği için webdeki kaynaklar işe yaramadı.
Şimdiden teşekkürler.

Using OpenCV with Tkinter (tutorialspoint.com)

# Define function to show frame
   def show_frames():
      # Get the latest frame and convert into Image
      cv2image= cv2.cvtColor(cap.read()[1],cv2.COLOR_BGR2RGB)
      img = Image.fromarray(cv2image)

      # Convert image to PhotoImage
      imgtk = ImageTk.PhotoImage(image = img)
      label.imgtk = imgtk
      label.configure(image=imgtk)

Bunu kodunuza birleştirmeye çalışın. Olmazsa beraber bakarız.

EDIT:

Madem geri dönüş yok. Ben bakayım dedim.

Buraya kadar yanlış çalışmıyorsa. Klasörde foto adında bir resim varsa bu resmi 1 saniye aralıklarla aranan rengi ve açıyı buluyor.

threading yerine after konusuna bakın deneyin demiştim, denememişsiniz sanırım.

Denemek için kullandım.

import cv2 as cv
import numpy as np
from tkinter import *
from PIL import ImageTk, Image
import os
import math
from threading import*

root = Tk()
photo_file="foto.jpg" # Image path
target_color = "Blue"

def get_picture(photo_file):
    try :
        img = cv.imread(photo_file)
        return img
    except:
        time.sleep(10)
        get_picture()

def getAngle(pointList):
    a, b = pointList[-2:]
    ang = math.degrees(math.atan2(- math.atan2(a[1]-b[1], a[0]-b[0]))
    if ang < 0:
       return  round (ang + 360)
    else: 
       return  round(ang)

def find_color(color, data):
    x, y, w, h = 0, 0, 0, 0
    dataHsv=cv.medianBlur(data,5)
    dataHsv=cv.cvtColor(dataHsv,cv.COLOR_BGR2HSV)

    if  (color == "Blue"):
        lower_color = np.array([75,100,100])  #Blue threshold
        upper_color = np.array([130,255,255])
        
    elif (color == "Yellow"):
        lower_color = np.array([22,100,100])  #Yellow threshold
        upper_color = np.array([38,255,255])
    
    elif (color == "Green"):
        lower_color = np.array([38,100,100])  #Green threshold
        upper_color = np.array([75,255,255])
        
    elif (color == "Red"):
        lower_color = np.array([160,100,100]) #Red threshold
        upper_color = np.array([179,255,255])

    mask = cv.inRange(dataHsv, lower_color, upper_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:
            x, y, w, h = cv.boundingRect(cnt) 
            cv.rectangle(data, (x, y), (x + w, y + h), (0, 255, 0), 3)
            cv.putText(	data, color +" Target", (x,y), cv.FONT_HERSHEY_SIMPLEX, 0.5,(0,0,0), 1, cv.LINE_AA  )
            cv.circle(data,((int(x+(w/2))),(int(y+(h/2)))), 1, (0,255,0), 6)
       
    return ([int(x+(w/2)),int(y+(h/2))]), data

def change_img(data):
   img = Image.fromarray(data)
   img=ImageTk.PhotoImage(img)
   panel.configure(image=img)
   panel.image=img


def print_Angel():
    global target_color
     
    p1, data = find_color(target_color, get_picture(photo_file))
    p2, data2= find_color("Red", data)
    pointList = (p1,p2)
    cv.line(data2, (int(p1[0]), int(p1[1])), (int(p2[0]), int(p2[1])), (0, 0, 0), 3)            
    cv.line(data2, (int(p2[0]), int(p2[1])), (int(p2[0]*2), int(p2[1])), (0, 0, 0), 3)
    cv.putText(data2,str(getAngle(pointList)),(p2[0]-20,p2[1]-40),cv.FONT_HERSHEY_COMPLEX,1,(0,0,0),2)    
    data2 = cv.cvtColor(data,cv.COLOR_RGB2BGR)
    change_img(data2)
    root.after(1000, print_Angel) 

def thre_s():
    global target_color
    target_color = "Yellow"

def thre_m():
    global target_color
    target_color="Blue"
  
def thre_y():
    global target_color
    target_color="Green"

def basla():
    pass
    
def thre_son():
    pass

def thre_baslat():
    pass

root.geometry("900x650+0+0")
root.title("CONTROL PANEL")

ust_frame = Frame(root, bg = "lightblue")
ust_frame.place(relx = 0.795, rely = 0.01 ,relwidth = 0.20, relheight = 0.62)

alt_frame = Frame(root, bg = "lightblue")
alt_frame.place(relx = 0.795, rely = 0.646 ,relwidth = 0.20, relheight = 0.045)

yazi = Label(ust_frame, text = "COMMANDS:", font ="verdana 12 bold" )
yazi.pack(padx = 0.1, pady = 0.1, side = TOP)
    

but3 = Button(ust_frame, text = "GÖREVİ BAŞLAT", command = thre_baslat, padx = 30, pady = 10)
but3.pack(pady = 10)
but3 = Button(ust_frame, text = "GÖREVİ SONLANDIR", command = thre_son, padx = 19, pady = 10)
but3.pack(pady = 10)
but1 = Button(ust_frame, text = "SARI HEDEF", command = thre_s, padx = 40, pady = 10)
but1.pack(pady = 10)
but2 = Button(ust_frame, text = "MAVİ HEDEF", command = thre_m, padx = 40, pady = 10)
but2.pack(pady = 10)
but3 = Button(ust_frame, text = "YEŞİL HEDEF", command = thre_y, padx = 40, pady = 10)
but3.pack(pady = 10)
#but3 = Button(ust_frame, text = "AUTO", command = pass , padx = 58, pady = 10)
#but3.pack(pady = 10)


img = cv.cvtColor(get_picture(photo_file), cv.COLOR_RGB2BGR)
img = Image.fromarray(img)
img=ImageTk.PhotoImage(img)
panel = Label(root, image = img)
panel.pack(side="left", padx=10, pady=10)
panel.pack(side = "bottom", expand = "yes")

root.after(1000,print_Angel)
        
root.mainloop()

Kodu azıcık derleyip toparlayım demiştim. Biraz toparlandı.

305 satırdan 142 satıra düşürmüşüm.

Tabi burada sizin haberleşme fonksiyonlarınızı sildim, ilgli kısımlara ekleyebilirsiniz.
Mevcut resmin yenisinin gelmesi için silmek istediğiniz kodu;

print_Angel() fonksiyonun altına yazıp silinmesini sağlayabilirsiniz. Ben after fonksiyonu ile saniyete 1 kez olmak üzere güncellenecek şekilde ayarladım. Haberleşme ve dosyanızın bulunma durumuna göre tekrar süreyi uzatabilirsiniz.

Renk butonuna basmazsanız, varsayılan mavi hedef, her butona bastığınızda ilgili renk üzerinden çizmeye devam eder.

Kodu çalıştırmakta sorun yaşamazsınız umarım.

Biraz daha üzerinde çalıştığınızda daha da kısaltabiliriz, şimdilik okunaklı kalsın diye daha fazla kısaltmadım.

Kolay gelsin.

EDIT 2: Ben resmi label üzerine aldım, isterseniz label yerine canvas kullanabilirsiniz.