Я пытаюсь отобразить канал с веб-камеры на моем GUI created. Однако, похоже, мне это не удается. Как только вы запустите эту программу, появится всплывающее окно GUI. После нажатия на кнопку «Пуск» программа обнаружения AI запустится в другом кадре. Однако я бы хотел, чтобы это программное обеспечение для обнаружения ИИ отображалось на верхней панели моего GUI. Кто-нибудь может мне с этим помочь? Извините, я новичок в этом.
Ниже приведен код:
import cv2
import numpy as np
import wx
class Main(wx.Frame):
def __init__(self):
wx.Frame.__init__(self,parent = None, title = "Baby Sleep Monitor", size = (700,700))
splitter = wx.SplitterWindow(self)
top = TopPanel(splitter)
bottom = BottomPanel(splitter,top)
splitter.SplitHorizontally(top, bottom)
splitter.SetMinimumPaneSize(470)
class TopPanel (wx.Panel):
def __init__(self,parent):
wx.Panel.__init__(self,parent = parent)
class BottomPanel (wx.Panel):
def __init__(self,parent,top):
wx.Panel.__init__(self,parent = parent)
self.graph = top
self.SetBackgroundColour("gray")
self.togglebuttonStart = wx.ToggleButton(self, id = -1, label = "Start", pos = (10,10))
self.togglebuttonStart.Bind(wx.EVT_TOGGLEBUTTON, self.OnStartClick)
labelchannels = wx.StaticText(self, -1, "Analogue Inputs", pos = (200, 20))
self.cb1 = wx.CheckBox(self, -1, label = "A0", pos = (200, 40))
self.cb2 = wx.CheckBox(self, -1, label = "A1", pos = (200, 55))
self.cb3 = wx.CheckBox(self, -1, label = "A2", pos = (200, 70))
self.cb4 = wx.CheckBox(self, -1, label = "A3", pos = (200, 85))
self.textboxSampleTime = wx.TextCtrl(self, -1, "1000", pos=(200, 115), size=(50, -1))
self.buttonSend = wx.Button(self, -1, "Send", pos=(250, 115), size=(50, -1))
self.buttonSend.Bind(wx.EVT_BUTTON, self.OnSend)
self.Bind(wx.EVT_CHECKBOX,self.OnChecked)
labelMinY = wx.StaticText(self,-1, "Min Y", pos = (400,10))
self.textboxMinYAxis = wx.TextCtrl(self,-1,"0",pos = (400,30))
labelMaxY = wx.StaticText(self, -1, "Max Y", pos=(400, 60))
self.textboxMaxYAxis = wx.TextCtrl(self, -1, "1024", pos=(400, 80))
self.buttonRange = wx.Button(self,-1,"Set Y Axis", pos = (400,105))
self.buttonRange.Bind(wx.EVT_BUTTON, self.SetButtonRange)
def SetButtonRange(self,event):
min = self.textboxMinYAxis.GetValue()
max = self.textboxMaxYAxis.GetValue()
print(max)
print(min)
self.graph.changeAxes(min,max)
def OnChecked(self, event):
cb = event.GetEventObject()
print("%s is clicked" % (cb.GetLabel()))
def OnStartClick(self,event):
val = self.togglebuttonStart.GetValue()
if val == True:
self.togglebuttonStart.SetLabel("Stop")
cap = cv2.VideoCapture(0)
font = cv2.FONT_HERSHEY_SCRIPT_COMPLEX
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')
fullb_cascade = cv2.CascadeClassifier('haarcascade_fullbody.xml')
left45_cascade = cv2.CascadeClassifier('haarcascade_profileface.xml')
left90_cascade = cv2.CascadeClassifier('haarcascade_mcs_leftear.xml')
right45_cascade = cv2.CascadeClassifier('haarcascade_profileface.xml')
right90_cascade = cv2.CascadeClassifier('haarcascade_mcs_rightear.xml')
back_cascade = cv2.CascadeClassifier('backcascade.xml')
while 1:
value = self.togglebuttonStart.GetValue()
ret, img = cap.read()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
full_body = fullb_cascade.detectMultiScale(gray, 1.3, 2)
for (fx, fy, fw, fh) in full_body:
cv2.rectangle(img, (fx, fy), (fx + fw, fy + fh), (0, 255, 255), 2)
left_face = left45_cascade.detectMultiScale(gray, 1.3, 5)
for (x2, y2, w2, h2) in left_face:
cv2.rectangle(img, (x2, y2), (x2 + w2, y2 + h2), (255, 0, 0), 2)
roi_gray = gray[y2:y2 + h2, x2:x2 + w2]
roi_color = img[y2:y2 + h2, x2:x2 + w2]
cv2.putText(img, str('left face'), (x2, y2 + h2), font, 1, 255)
flipped = cv2.flip(gray, 1)
right_face = right45_cascade.detectMultiScale(flipped,1.3,5)
for (x3,y3,w3,h3) in right_face:
cv2.rectangle(img,(x3,y3),(x3+w3, y3 + h3),(255,0,0),2)
cv2.putText(img,str('right face'), (x3, y3+h3), font, 1,255)
leftmost_face = left90_cascade.detectMultiScale(gray,1.3,5)
for(x4,y4,w4,h4) in leftmost_face:
cv2.rectangle(img,(x4,y4),(x4+w4, y4+h4),(0,255,255),2)
cv2.putText(img,str('right face'),(x4,y4+h4),font , 1,255)
rightmost_face = right90_cascade.detectMultiScale(gray,1.3,5)
for(x5,y5,w5,h5) in rightmost_face:
cv2.rectangle(img,(x5,y5),(x5+w5, y5+w5), (0,255,255),2)
cv2.putText(img,str('right face'),(x5,y5+h5),font,1,255)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
roi_gray = gray[y:y + h, x:x + w]
roi_color = img[y:y + h, x:x + w]
cv2.putText(img, str('face'), (x, y + h), font, 1, 255)
eyes = eye_cascade.detectMultiScale(roi_gray)
for (ex, ey, ew, eh) in eyes:
cv2.rectangle(roi_color, (ex, ey), (ex + ew, ey + eh), (0, 255, 0), 2)
cv2.imshow('img', img)
k = cv2.waitKey(30) & 0xff
if value == False:
break
cap.release()
cv2.destroyAllWindows()
else:
self.togglebuttonStart.SetLabel("Start")
def OnSend(self, event):
val = self.textboxSampleTime.GetValue()
print(val)
if __name__ == "__main__":
app = wx.App()
frame = Main()
frame.Show()
app.MainLoop()