не может вызвать команду "кнопка": приложение было уничтожено - PullRequest
0 голосов
/ 22 января 2019

Это мой код Opencv. Если глаза не обнаруживаются в течение более 3 секунд, выполняется всплывающая функция. Если всплывающая функция выполняется еще раз, но глаз не обнаруживается снова более 3 секунд, Кнопка «Невозможно вызвать» Команда «Приложение подготовлено» Произошла ошибка. Ошибка возникает в строках 19 и 63 (def popup, иначе ~ if Sec = 3: popup) Можете ли вы сказать мне, почему?

Переводчик используется. Прости и спасибо. Удачи в работе.

from picamera.array import PiRGBArray

from tkinter import *

from tkinter import messagebox

import RPi.GPIO as gpio

from picamera import PiCamera

import time

import cv2

import threading





window = Tk()

window.title("Message Box")

window.geometry("200x100+0+0")

window.resizable(0,0)



Sec = 0



def popup():

        test_button = Button(window, text = "Open Your Eyes!!",)

        test_button.pack()

        window.mainloop()



RELAY = 17

gpio.setmode(gpio.BCM)

gpio.setup(RELAY, gpio.OUT, initial=gpio.LOW)

camera = PiCamera()

camera.resolution = (640, 480)

camera.framerate = 40

rawCapture = PiRGBArray(camera, size=(640, 480))



faceCascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")

eyesCascade = cv2.CascadeClassifier("haarcascade_eye_tree_eyeglasses.xml")



time.sleep(0.1)



for frame in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True):

    image = frame.array



    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

    faces = faceCascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(50, 50))



    for (x, y, w, h) in faces:

        cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)

        roi_gray = gray[y:y + h, x:x + w]

        roi_color = image[y:y + h, x:x + w]

        eyes = eyesCascade.detectMultiScale(roi_gray)



        for (ex, ey, ew, eh) in eyes:

                print (eyes)

                cv2.rectangle(roi_color, (ex, ey), (ex + ew, ey + eh), (100, 255, 255), 2)





        if len(faces) >= 1 and len(eyes) >= 2:

            Sec = 0

            # cv2.putText(image, 'WARNING!', (10, 500), cv2.FONT_HERSHEY_SIMPLEX, 4, (255, 255, 255), 2)

            gpio.output(RELAY, False)



        else:

            Sec += 1

            print(str(Sec) + " Sec")

            time.sleep(1)

            if Sec == 3:

                popup()

            gpio.output(RELAY, True)



    cv2.imshow("OPEN CV", image)

    key = cv2.waitKey(1) & 0xFF

    rawCapture.truncate(0)



    if key == ord("q"):

        break

gpio.output(RELAY, False)

gpio.cleanup() 

cv2.destroyAllWindows()

ошибка

Исключение в обратном вызове Tkinter

Traceback (последний вызов был последним):

Файл "/usr/lib/python3.5/tkinter/init.py", строка 1562, в вызов

return self.func(*args)

Файл "/home/pi/opencv/rpi_eye_blink_detector-master/detector.py", строка 19, в popup_quit

window.destroy()

Файл "/usr/lib/python3.5/tkinter/init.py", строка 1922, в файле destroy

self.tk.call('destroy', self._w)

_tkinter.TclError: не может вызвать команду «уничтожить»: приложение было уничтожено

1 Ответ

0 голосов
/ 25 января 2019

Как насчет последних 5 строк.Должно ли это быть так?Попробуйте

if key == ord("q"): 
            gpio.output(RELAY, False)   
            gpio.cleanup()     
            cv2.destroyAllWindows()            
            break
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...