Я создал модель распознавания лиц Tensorflow и графический интерфейс tkinter для ее реализации. Графический интерфейс работает сам по себе, но когда я пытаюсь реализовать модель в графическом интерфейсе, веб-камера зависает, и все кнопки для загрузки видео и изображений перестают работать. Я не знаю, что я сделал не так.
Это модель и графический интерфейс вместе:
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.error: OpenCV(4.9.0) d:\a\opencv-python\opencv-python\opencv\modules\imgproc\src\color.simd_helpers.hpp:92: error: (-2:Unspecified error) in function '__cdecl cv::impl::`anonymous-namespace'::CvtHelper Invalid number of channels in input image:
> 'VScn::contains(scn)'
> where
> 'scn' is 1
Кроме того, рамки обнаружения вокруг лиц не устанавливаются
Я создал модель распознавания лиц Tensorflow и графический интерфейс tkinter для ее реализации. Графический интерфейс работает сам по себе, но когда я пытаюсь реализовать модель в графическом интерфейсе, веб-камера зависает, и все кнопки для загрузки видео и изображений перестают работать. Я не знаю, что я сделал не так. Это модель и графический интерфейс вместе: [code] import tensorflow as tf import tkinter as tk from tkinter import filedialog from tkinter import font from PIL import Image, ImageTk import cv2 import numpy as np import urllib.request
for (x, y, w, h) in faces: roi = gray_img[y:y + h, x:x + w] roi = cv2.resize(roi, (48, 48)) roi = np.expand_dims(roi, axis=0) roi = np.expand_dims(roi, axis=-1) preds = self.model.predict(roi) emotion = FacialExpressionModel.EMOTIONS_LIST[np.argmax(preds)] emotions.append(emotion)
return emotions
def __init__(self, model_json_file, model_weights_file): # load model from JSON file with open(model_json_file, "r") as json_file: loaded_model_json = json_file.read() self.loaded_model = model_from_json(loaded_model_json) # load weights into the new model self.loaded_model.load_weights(model_weights_file) self.loaded_model.make_predict_function()
self.message_label = tk.Label(self.root, text="If program is to work, please turn on\n webcam feed or upload a photo/video.") self.message_label.place(x=390, y=160)
def showInstructions(self): # Create a new Toplevel window instructions_window = tk.Toplevel(self.root) instructions_window.title("Instructions")
# Define instructions text instructions_text = "How To Use This Program:\n1. This is a deep learning facial expression recogition system that detects one of 7 emotions: Angry, Disgusted, Fearful, Happy, Neutral, Sad, and Surprised. \n2. Either turn on the webcam feed or upload a photo/video.\n3. Press 'Start/Stop Webcam' to start or stop the webcam feed.\n4. Use 'Upload Video' button to upload a video file.\n5. Use 'Upload Image' button to upload an image file.\n5. Follow the facial expression recognition in the main window and have fun!"
# Add Label widget to display instructions text instructions_label = tk.Label(instructions_window, text=instructions_text) instructions_label.pack(padx=10, pady=10, anchor="center")
for (x, y, w, h) in faces: fc = gray_fr[y:y + h, x:x + w] roi = cv2.resize(fc, (48, 48)) pred = self.model.predict_emotion(roi[np.newaxis, :, :, np.newaxis]) emotion = FacialExpressionModel.EMOTIONS_LIST[np.argmax(pred)]
cv2.putText(fr, emotion, (x, y), font, 1, (255, 255, 0), 2) cv2.rectangle(fr, (x, y), (x + w, y + h), (255, 0, 0), 2) # Draw rectangle around detected face
return fr
def update_video_feed(self): frame = self.get_frame() if frame is not None: img = Image.fromarray(frame) imgtk = ImageTk.PhotoImage(image=img) self.canvas.imgtk = imgtk # Keep a reference to prevent garbage collection self.canvas.delete("all") self.canvas.create_image(0, 0, anchor=tk.NW, image=imgtk)
if self.running: self.root.after(10, self.update_video_feed) # Update every 10 milliseconds else: self.video.release()
print("check2") # Load Haarcascade XML file face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
[/code] Это сам по себе рабочий графический интерфейс: [code]import tensorflow as tf import tkinter as tk from tkinter import filedialog from tkinter import font from PIL import Image, ImageTk import cv2 import numpy as np import urllib.request
self.message_label = tk.Label(self.root, text="If program is to work, please turn on\n webcam feed or upload a photo/video.") self.message_label.place(x=390, y=160)
def showInstructions(self): # Create a new Toplevel window instructions_window = tk.Toplevel(self.root) instructions_window.title("Instructions")
# Define instructions text instructions_text = "How To Use This Program:\n1. This is a deep learning facial expression recogition system that detects on of 7 emotions: Anger, Disgust, Fear, Happiness, Neutral, Sadness and Surprise. \n2. Either turn on the webcam feed or upload a photo/video.\n3. Press 'Start/Stop Webcam' to start or stop the webcam feed.\n4. Use 'Upload Video' button to upload a video file.\n5. Use 'Upload Image' button to upload an image file.\n5. Follow the facial expression recognition in the main window and have fun!"
# Add Label widget to display instructions text instructions_label = tk.Label(instructions_window, text=instructions_text) instructions_label.pack(padx=10, pady=10, anchor="center")
def get_frame(self): if self.uploaded_image is not None: fr = np.array(self.uploaded_image) fr = cv2.resize(fr,(377,377)) gray_fr = cv2.cvtColor(fr, cv2.COLOR_RGB2GRAY) faces = facec.detectMultiScale(gray_fr, 1.3, 5)
for (x, y, w, h) in faces: cv2.rectangle(fr, (x, y), (x+w, y+h), (255, 0, 0), 2) # Draw rectangle around detected face return fr if fr is not None else np.zeros((377, 377, 3), dtype=np.uint8)
elif self.uploaded_video is not None: _, fr = self.uploaded_video.read() if fr is None: return np.zeros((377, 377, 3), dtype=np.uint8) fr = cv2.resize(fr,(377,377)) gray_fr = cv2.cvtColor(fr, cv2.COLOR_BGR2GRAY) faces = facec.detectMultiScale(gray_fr, 1.3, 5) for (x, y, w, h) in faces: cv2.rectangle(fr, (x, y), (x+w, y+h), (255, 0, 0), 2) # Draw rectangle around detected face return fr
elif self.video is not None: _, fr = self.video.read() if fr is None: return np.zeros((480, 640, 3), dtype=np.uint8) gray_fr = cv2.cvtColor(fr, cv2.COLOR_BGR2GRAY) faces = facec.detectMultiScale(gray_fr, 1.3, 5) for (x, y, w, h) in faces: cv2.rectangle(fr, (x, y), (x+w, y+h), (255, 0, 0), 2) # Draw rectangle around detected face return fr
[/code] Я также получаю это сообщение об ошибке, когда камера зависает: [code]gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) cv2.error: OpenCV(4.9.0) d:\a\opencv-python\opencv-python\opencv\modules\imgproc\src\color.simd_helpers.hpp:92: error: (-2:Unspecified error) in function '__cdecl cv::impl::`anonymous-namespace'::CvtHelper Invalid number of channels in input image: > 'VScn::contains(scn)' > where > 'scn' is 1
[/code] Кроме того, рамки обнаружения вокруг лиц не устанавливаются
Не могли бы вы помочь мне с моим кодом? У меня большие проблемы с тем, чтобы ответы пользователей оставались на правильной стороне. Максимум, что мне удалось, — это 13 символов, и если пользователь превысит их, он вернется на левую сторону.
def...
Я практиковал Tkinter с Pycharm для моего собственного проекта с сериалом и Arduino.
ничего особенного в нем - несколько кнопок, опционные и этикетки.
Но я нажал на строку меню Mac в графическом окне Tkinter на варианте «Show Tab». Выполнение....
Я пытаюсь научиться использовать Tkinter для создания графического интерфейса для приложений Python. Я пытаюсь создать таймер Pomodoro, однако я столкнулся с несколькими проблемами. И я обнаружил, что эта функция, работающую с работой, можно...
Я пытаюсь научиться использовать Tkinter для создания графического интерфейса для приложений Python. Я пытаюсь создать таймер Pomodoro, однако я столкнулся с несколькими проблемами. И я обнаружил, что эта функция, работающую с работой, можно...
Только что столкнулся с одной проблемой: из keras.models, keras.layers и keras.optimizers говорится, что импорт не может быть разрешен, вы знаете, как я могу исправить это?
import numpy as np
from keras.models import Sequential
from keras.layers...