From a9302f4836809deddaab10d9773bde28e7ec4853 Mon Sep 17 00:00:00 2001 From: Fiber Date: Fri, 18 Oct 2024 19:44:15 +0800 Subject: [PATCH] =?UTF-8?q?gui:=E6=9B=B4=E6=96=B0=E5=89=8D=E7=AB=AF?= =?UTF-8?q?=E6=8C=89=E9=92=AE+=E5=A2=9E=E5=8A=A0=E8=A7=86=E9=A2=91buffer?= =?UTF-8?q?=E5=92=8C=E6=8A=BD=E5=B8=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/esd_bleeding_view_tool/__init__.py | 107 +++++++++++-------------- src/esd_bleeding_view_tool/core.py | 54 ++++++------- 2 files changed, 70 insertions(+), 91 deletions(-) diff --git a/src/esd_bleeding_view_tool/__init__.py b/src/esd_bleeding_view_tool/__init__.py index 301e66e..7876bbf 100644 --- a/src/esd_bleeding_view_tool/__init__.py +++ b/src/esd_bleeding_view_tool/__init__.py @@ -32,52 +32,39 @@ class Ui_MainWindow(object): self.textBrowser.setObjectName(u"textBrowser") self.pushButton_3 = QPushButton(self.centralwidget) self.pushButton_3.setObjectName(u"pushButton_3") - self.pushButton_4 = QPushButton(self.centralwidget) - self.pushButton_4.setObjectName(u"pushButton_4") - self.comboBox = QComboBox(self.centralwidget) - self.comboBox.setObjectName(u"comboBox") + # self.pushButton_4 = QPushButton(self.centralwidget) + # self.pushButton_4.setObjectName(u"pushButton_4") + # self.comboBox = QComboBox(self.centralwidget) + # self.comboBox.setObjectName(u"comboBox") MainWindow.setCentralWidget(self.centralwidget) - self.menubar = QMenuBar(MainWindow) - self.menubar.setObjectName(u"menubar") - self.menu = QMenu(self.menubar) - self.menu.setObjectName(u"menu") - self.menu_2 = QMenu(self.menubar) - self.menu_2.setObjectName(u"menu_2") - MainWindow.setMenuBar(self.menubar) self.statusbar = QStatusBar(MainWindow) self.statusbar.setObjectName(u"statusbar") MainWindow.setStatusBar(self.statusbar) self.set_size() - self.menubar.addAction(self.menu.menuAction()) - self.menubar.addAction(self.menu_2.menuAction()) - self.retranslateUi(MainWindow) QMetaObject.connectSlotsByName(MainWindow) # 自适应界面大小 - def set_size(self, w=800, h=600): + def set_size(self, w=400, h=300): w = w+10 h = h+10 - w_button = 110 - self.resize(w+250, h+100) - self.pushButton.setGeometry(QRect(w+10, 400, w_button, 40)) - self.pushButton_2.setGeometry(QRect(w+10+w_button+10, 400, w_button, 40)) + w_button = 80 + self.resize(w+w_button*2+30, h+100) self.graphicsView.setGeometry(QRect(0, 0, w, h)) - self.textBrowser.setGeometry(QRect(w+10, 30, w_button*2+10, 350)) - self.pushButton_3.setGeometry(QRect(w+10, 560, w_button, 40)) - self.pushButton_4.setGeometry(QRect(w+10+w_button+10, 560, w_button, 40)) - self.comboBox.setGeometry(QRect(w+10+w_button+10, 530, w_button, 30)) - self.menubar.setGeometry(QRect(0, 0, w+230, h+100)) + self.textBrowser.setGeometry(QRect(w+10, 30, w_button*2+10, 200)) + self.pushButton.setGeometry(QRect(w+10, 240, w_button*2+10, 50)) + self.pushButton_2.setGeometry(QRect(w+10, 300, w_button, 50)) + self.pushButton_3.setGeometry(QRect(w+10+w_button+10, 300, w_button, 50)) + # self.pushButton_4.setGeometry(QRect(w+10+w_button+10, 560, w_button, 40)) + # self.comboBox.setGeometry(QRect(w+10+w_button+10, 530, w_button, 30)) def retranslateUi(self, MainWindow): MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"MainWindow", None)) - self.pushButton.setText(QCoreApplication.translate("MainWindow", u"Left", None)) - self.pushButton_2.setText(QCoreApplication.translate("MainWindow", u"Right", None)) - self.pushButton_3.setText(QCoreApplication.translate("MainWindow", u"\u5bfc\u5165\u89c6\u9891", None)) - self.pushButton_4.setText(QCoreApplication.translate("MainWindow", u"\u5bfc\u5165\u6807\u7b7e", None)) - self.menu.setTitle(QCoreApplication.translate("MainWindow", u"menu1", None)) - self.menu_2.setTitle(QCoreApplication.translate("MainWindow", u"menu2", None)) + self.pushButton.setText(QCoreApplication.translate("MainWindow", u"model", None)) + self.pushButton_2.setText(QCoreApplication.translate("MainWindow", u"start", None)) + self.pushButton_3.setText(QCoreApplication.translate("MainWindow", u"pause", None)) + # self.pushButton_4.setText(QCoreApplication.translate("MainWindow", u"no function", None)) # retranslateUi # ui逻辑控制 @@ -86,18 +73,19 @@ class MainWindow(QMainWindow, Ui_MainWindow): super(MainWindow, self).__init__() self.setupUi(self) - self.pushButton.clicked.connect(self.left_frame) - self.pushButton_2.clicked.connect(self.right_frame) - self.pushButton_3.clicked.connect(self.load_video) - self.pushButton_4.clicked.connect(self.load_mark) + self.pushButton.clicked.connect(self.load_model) + self.pushButton_2.clicked.connect(self.start) + self.pushButton_3.clicked.connect(self.pause) + # self.pushButton_4.clicked.connect(self.load_mark) - self.comboBox.currentIndexChanged.connect(self.name_reset) + # self.comboBox.currentIndexChanged.connect(self.name_reset) self.scene = QGraphicsScene() self.graphicsView.setScene(self.scene) self.graphicsView.show() - self.now = 2400 + + self.txt = "" def show_video(self): @@ -118,22 +106,20 @@ class MainWindow(QMainWindow, Ui_MainWindow): self.pix = QPixmap.fromImage(frame) self.scene.addPixmap(self.pix) - def show_text(self): - text = "显示的文字" - self.textBrowser.setText(text) + def show_text(self, text="text to show", clear=0): + if clear > 0 : + self.txt = "" + self.txt += text + self.textBrowser.setText(self.txt) self.textBrowser.show() - def left_frame(self): - if self.now > 0: - self.now -= 1 - self.show_video() - self.show_text() + def start(self): + ## 调用start函数 + self.show_text("started\n") - def right_frame(self): - if self.now < 1000 - 1: - self.now += 1 - self.show_video() - self.show_text() + def pause(self): + ## 调用pause函数 + self.show_text("paused\n") def load_video(self): fname ,_ = QFileDialog.getOpenFileName(self, 'Open Video', '../', 'Video files (*.mp4 *.avi *.mp4 *.m4v *.mkv *.mkv)') @@ -141,20 +127,17 @@ class MainWindow(QMainWindow, Ui_MainWindow): self.show_video() - def load_mark(self): - fname ,_ = QFileDialog.getOpenFileName(self, 'Open Excel Document', '../', 'Video files (*.xls *.xlsx)') - self.mark = Mark(fname) - self.max_mark = self.mark.max_frame() - - self.comboBox.clear() - self.comboBox.addItems(self.mark.sheet_list()) + def load_model(self): + fname ,_ = QFileDialog.getOpenFileName(self, 'Open Checkpoint Document', '../', 'Checkpoint files (*.ckpt *.pt *.pth)') + ##连接模型load文件的函数 + if fname == "": + return + self.show_text("loaded model "+fname+"\n") - self.show_text() - - def name_reset(self): - name = self.comboBox.currentText() - self.mark.change_name(name) - self.show_text() + # def name_reset(self): + # name = self.comboBox.currentText() + # self.mark.change_name(name) + # self.show_text() diff --git a/src/esd_bleeding_view_tool/core.py b/src/esd_bleeding_view_tool/core.py index a0d55af..7e50fd5 100644 --- a/src/esd_bleeding_view_tool/core.py +++ b/src/esd_bleeding_view_tool/core.py @@ -5,29 +5,7 @@ import re import numpy as np -interval = 30 - -def remove_the_blackborder(image): - - img = cv2.medianBlur(image, 7) #中值滤波,去除黑色边际中可能含有的噪声干扰 - b = cv2.threshold(img, 3, 255, cv2.THRESH_BINARY) #调整裁剪效果 - binary_image = b[1] #二值图--具有三通道 - binary_image = cv2.cvtColor(binary_image,cv2.COLOR_BGR2GRAY) - # print(binary_image.shape) #改为单通道 - - edges_y, edges_x = np.where(binary_image==255) ##h, w - bottom = min(edges_y) - top = max(edges_y) - height = top - bottom - - left = min(edges_x) - right = max(edges_x) - height = top - bottom - width = right - left - - res_image = image[bottom:bottom+height, left:left+width] - - return res_image +interval = 30 def convert_video(videoname): capture = cv2.VideoCapture(videoname) @@ -48,7 +26,7 @@ def convert_video(videoname): print('视频打开失败!') class Video: - def __init__(self, video_dir): + def __init__(self, video_dir, buffer_num_max = 3): self.video_dir = video_dir capture = cv2.VideoCapture(video_dir) if capture.isOpened(): @@ -56,18 +34,36 @@ class Video: self.video = capture else: self.video = None - def read(self, frame_num): + self.frame_num = 0 + + #buffer init + self.buffer = [None for _ in range(3)] + self.buffer_num = 0 + self.buffer_num_max = buffer_num_max + + def read(self): ##测试用,从视频文件读取 cap = self.video - cap.set(cv2.CAP_PROP_POS_FRAMES, frame_num) + cap.set(cv2.CAP_PROP_POS_FRAMES, self.frame_num) ret, img=cap.read() - img = self.cut_border(img) if ret: + self.update_buffer(img) + self.frame_num += 1 return img else: return None - def cut_border(self, img): - # img = remove_the_blackborder(img) + + def get_and_skip_frame(self, skip_num=29): #抽帧 + img = self.read() + for _ in range(skip_num): + self.read() return img + + def update_buffer(self, img): #更新buffer + self.buffer[self.buffer_num] = img + self.buffer_num = (self.buffer_num + 1) % self.buffer_num_max + + def get_buffer(self): #获取buffer内容 + return self.buffer class Mark: def __init__(self, mark_dir):