def show_processed_vedio(self): """显示detected视频以及违法信息""" #违章表格初始化 with open(PATH.run_a_red_lightpath(), 'r', encoding='UTF-8') as fp: data = [] data = fp.readlines() if '\n' in data: data.remove('\n') row_lenth = len(data) self.ui.label_roadinfo.setPixmap(QPixmap(PATH.infomation_path())) self.ui.label_roadinfo.setScaledContents(True) self.model = QStandardItemModel() #存储任意结构数据 self.model.setHorizontalHeaderLabels(['车牌号码', '违章类型']) self.ui.tableView.horizontalHeader().setSectionResizeMode( QHeaderView.Stretch) for row in range(row_lenth): plate_number, ilegal_type = data[row].split(' ') ilegal_type = ilegal_type.replace('\n', '') i = QStandardItem(plate_number) j = QStandardItem(ilegal_type) self.model.setItem(row, 0, i) self.model.setItem(row, 1, j) self.ui.tableView.setModel(self.model) # 创建视频显示线程 if self.specialroad is not True: self.Vedioplayname = self.video_outname self.th1 = threading.Thread(target=self.Display) self.th1.start()
def delet_info(self): """删除展示车辆的违法信息""" box = QMessageBox.warning(self.wnd, "提示", "确定删除该车辆的违法信息?", QMessageBox.Yes | QMessageBox.No) if box == QMessageBox.No: return else: try: del_name_path = self.imgnames_list.pop(self.current_img_index) del_name = del_name_path[0:7] if PATH.bool_alltimes is True: os.remove(self.imgpaths[self.current_img_index]) _ = self.imgpaths[self.current_img_index].split("\\") txtpath = PATH.Road_ROOTpath() + _[4] + "\\illegal_car_info.txt" else: os.remove(PATH.run_a_red_light_img_path() + del_name_path) txtpath = PATH.run_a_red_lightpath() with open(txtpath, 'r', encoding='UTF-8') as fp: lines = fp.readlines() for i in range(len(lines)): if del_name in lines[i]: lines[i] = '' fp.close() with open(txtpath, 'w', encoding='UTF-8') as fp: fp.writelines(lines) box = QMessageBox.warning(self.wnd, "提示", "删除成功!", QMessageBox.Yes) except: box = QMessageBox.warning(self.wnd, "提示", "删除错误", QMessageBox.Yes) self.current_img_index = 0 self.display_info()
def Open(self): """打开视频原文件按钮响应函数""" self.fileName, self.fileType = QFileDialog.getOpenFileName( self.mainWnd, 'Choose file', '', '*.avi') if self.fileName is None or '.avi' not in self.fileName: return elif 'out' not in self.fileName: VedioDate = time.ctime(os.path.getctime(self.fileName)) VedioDate = VedioDate.replace(' ', "_").replace(':', '_').replace('__', '_') PATH.setValue('CVedioDate', VedioDate) self.ui.label_date_text.setText(PATH.get_VedioDate()) self.video_outname = PATH.run_a_red_light_vedio_path() #刷新信息显示 self.ui.label_roadinfo.setText(" 车流量信息展示区域") self.model = QStandardItemModel() #存储任意结构数据 self.model.setHorizontalHeaderLabels(['车牌号码', '违章类型']) self.ui.tableView.horizontalHeader().setSectionResizeMode( QHeaderView.Stretch) self.ui.tableView.setModel(self.model) # 创建视频显示线程 self.Vedioplayname = self.fileName th = threading.Thread(target=self.Display) th.start()
def get_roadinfo(self): """确定路口和时间段之后的操作""" if self.ui.chooseRoad.currentIndex() == -1: dig = QMessageBox.information(self, "提示", "未选择路口", QMessageBox.Yes) return self.ChosedTime = self.ui.choose_time.currentText() self.mainWnd.ui.label_road_text.setText(self.ChosedRoad) if self.ChosedTime == "所有时间" and self.ChosedRoad != "所有路口": PATH.setValue('RoadName', self.ChosedRoad) PATH.setValue('CVedioDate', self.ChosedTime) PATH.bool_alltimes = True else: PATH.bool_alltimes = False try: PATH.setValue('RoadName', self.ChosedRoad) PATH.setValue('CVedioDate', self.ChosedTime) Vedio_OutFileName = PATH.detect_result_path + self.ChosedRoad + '\\' + self.ChosedTime + "\\" + "Vedio_out.avi" self.mainWnd.Vedioplayname = Vedio_OutFileName self.mainWnd.specialroad = True self.show_processed_info.emit() except: dig = QMessageBox.warning(self, "警告", "未找到目标视频文件", QMessageBox.Yes) self.mainWnd.ui.label_date_text.setText(self.ChosedTime) self.mainWnd.ui.Open.setEnabled(True) self.mainWnd.ui.Button_imgout.setEnabled(True) self.mainWnd.ui.Button_infoout.setEnabled(True)
def __init__(self, mainWnd): QDialog.__init__(self) self.ui = Ui_SetRoad_dialog() self.ui.setupUi(self) self.mainWnd = mainWnd self.ui.Box_Existed_Roads.addItems(PATH.get_allroads()) self.ui.Box_Existed_Roads.setCurrentIndex(-1) self.ui.pushButton_ok.clicked.connect(self.set_road)
def __init__(self, mainWnd): QDialog.__init__(self) self.ui = Ui_Dialog_chooseRoad() self.ui.setupUi(self) self.ui.chooseRoad.addItems(PATH.get_allroads()) self.ui.chooseRoad.currentIndexChanged.connect(self.set_roadinfo) self.ui.pushButton_ok.clicked.connect(self.get_roadinfo) self.mainWnd = mainWnd self.ui.chooseRoad.setCurrentIndex(-1)
def img_init(self): """初始化img列表""" if PATH.bool_alltimes is True: self.imgpaths = [] self.imgs_dict = PATH.get_road_imgspaths(PATH.get_roadname()) for img_info in self.imgs_dict.keys(): Road, Date, img = img_info.split(':') self.imgnames_list.append(img) self.imgpaths.append(self.imgs_dict[img_info]) else: self.imgnames_list = list(os.listdir(PATH.run_a_red_light_img_path())) if len(self.imgnames_list) != 0: self.display_info() self.ui.before.setEnabled(True) self.ui.delete_info.setEnabled(True) self.ui.ChangeButton.setEnabled(True) else: box = QMessageBox.warning(self.wnd, "提示", "库存为空", QMessageBox.Yes)
def Open(self): """打开视频原文件按钮响应函数""" self.fileName, self.fileType = QFileDialog.getOpenFileName( self.mainWnd, 'Choose file', '', '*.avi') if self.fileName is None or '.avi' not in self.fileName: return elif 'out' not in self.fileName: VedioDate = time.ctime(os.path.getctime(self.fileName)) VedioDate = VedioDate.replace(' ', "_").replace(':', '_').replace('__', '_') PATH.setValue('CVedioDate', VedioDate) self.ui.label_date_text.setText(PATH.get_VedioDate()) self.video_outname = PATH.run_a_red_light_vedio_path() # 创建视频显示线程 self.Vedioplayname = self.fileName th = threading.Thread(target=self.Display) th.start()
def set_road(self): """路口设置对话框响应函数""" self.mainWnd.ui.Open.setEnabled(True) self.mainWnd.ui.Button_imgout.setEnabled(True) self.mainWnd.ui.Button_infoout.setEnabled(True) if self.ui.Text_NewRoad.toPlainText( ) is '' and self.ui.Box_Existed_Roads.currentIndex() is not -1: PATH.setValue('RoadName', self.ui.Box_Existed_Roads.currentText()) self.mainWnd.ui.label_road_text.setText( self.ui.Box_Existed_Roads.currentText()) elif self.ui.Text_NewRoad.toPlainText() is not '': PATH.setValue('RoadName', self.ui.Text_NewRoad.toPlainText()) self.mainWnd.ui.label_road_text.setText( self.ui.Text_NewRoad.toPlainText()) else: dig = QMessageBox.warning(self, "警告", "当前未设置路口!", QMessageBox.Yes) return dig = QMessageBox.information(self, "提示", "路口设置成功", QMessageBox.Yes) self.mainWnd.ui.Open.setEnabled(True) self.mainWnd.ui.Button_imgout.setEnabled(True) self.mainWnd.ui.Button_infoout.setEnabled(True)
def display_info(self): """展示违法信息""" try: n, m = self.imgnames_list[self.current_img_index].split('_') m = str(m).replace('.jpg', '') self.ui.plate_number.setText(n) self.ui.illegal_type.setText(m) if PATH.bool_alltimes is True: Date = self.date_allroads_list[self.current_img_index] RoadName = PATH.get_roadname() self.current_img_dirpath = PATH.detect_result_path + RoadName + "\\" + Date + "\\illegal_imgs\\" self.ui.label_Road_Belong.setText(RoadName) self.ui.label_Time_Belong.setText(Date) self.ui.label.setPixmap(QPixmap(self.imgpaths[self.current_img_index])) else: self.current_img_dirpath = PATH.run_a_red_light_img_path() self.ui.label_Road_Belong.setText(PATH.get_roadname()) self.ui.label_Time_Belong.setText(PATH.get_VedioDate()) self.ui.label.setPixmap(QPixmap(PATH.run_a_red_light_img_path() + self.imgnames_list[self.current_img_index])) self.ui.label.setScaledContents(True) except: box = QMessageBox.warning(self.wnd, "提示", "库存为空", QMessageBox.Yes)
def set_roadinfo(self): """搜索对应路口文件夹的违法记录""" self.ChosedRoad = self.ui.chooseRoad.currentText() if self.ui.chooseRoad.currentIndex() == -1: pass else: self.ui.choose_time.clear() VedioList = PATH.get_chosed_roadinfo(self.ChosedRoad) if len(VedioList) == 0: dig = QMessageBox.information(self, "提示", "当前路口没有处理视频!", QMessageBox.Yes) else: self.ui.choose_time.addItem('所有时间') self.ui.choose_time.addItems(VedioList)
def Api_button(self): """检测API接口""" try: print(self.fileName) print(self.video_outname) PATH.cheackFolders() self.Pos_list = self.mainWnd.pos_list self.worker = Worker(self.fileName, self.video_outname, self.Pos_list) self.worker.finished.connect(self.thread.quit) self.thread.started.connect(self.worker.work) self.worker.show_processed_vedio.connect(self.show_processed_vedio) self.stopEvent.set() print("正在关原视频") sleep(1) self.ui.DisplayLabel.setText(" " * 30 + "正在检测视频,请勿退出系统") print("Qthread开始") self.worker.moveToThread(self.thread) self.thread.start() except: dig = QMessageBox.warning(self.mainWnd, "警告", "错误操作!可选择再次打开程序", QMessageBox.Yes)
def out(self): choic_item = self.ui.comboBox.currentText() dirpath = '' if PATH.bool_alltimes == True: #若为所有时间 crutime = gmtime() VedioDate = str(crutime.tm_year) + "所有时间" else: #若为特定时间段 try: time = PATH.get_VedioDate() print(time) timelist = time.split('_') VedioDate = timelist[6] + '_' + timelist[2] + '_' + timelist[3] except: crutime = gmtime() VedioDate = str(crutime.tm_year) + "_" + str( crutime.tm_mon) + "_" + str(crutime.tm_mday) with open(PATH.run_a_red_lightpath(), 'r', encoding='UTF-8') as fp: data = [] data_dict = {} data = fp.readlines() if '\n' in data: data.remove('\n') data_row = len(data) for i in range(data_row): plate_number, ilegal_type = data[i].split(' ') ilegal_type = ilegal_type.replace('\n', '') data_dict[plate_number] = ilegal_type if choic_item == 'Excel文件': dirpath = QFileDialog.getSaveFileName( self.wnd, '选择保存路径', PATH.DeskTop_path + PATH.get_roadname() + "_" + VedioDate + '.xlsx', 'xlsx(*.xlsx)') if dirpath[0] != '': row, col = 1, 0 workbook = xlsxwriter.Workbook(dirpath[0]) worksheet = workbook.add_worksheet('违法记录') title = ['车牌号码', '违法类型'] worksheet.write(0, 0, title[0]) worksheet.write(0, 1, title[1]) for key in data_dict: worksheet.write(row, col, key) worksheet.write(row, col + 1, data_dict[key]) row = row + 1 workbook.close() else: return #退出窗口 self.ui.Quit.click() elif choic_item == 'Txt文件': dirpath = QFileDialog.getSaveFileName( self.wnd, '选择保存路径', PATH.DeskTop_path + PATH.get_roadname() + "_" + VedioDate + '.txt', 'Text Files(*.txt)') if dirpath[0] != '': with open(dirpath[0], 'w', newline='', encoding='UTF-8') as txt_file: title = ['车牌号码 ', '违法类型\n'] txt_file.writelines(title) txt_file.writelines(data) else: return #退出窗口 self.ui.Quit.click() try: os.system(dirpath[0]) except: box = QMessageBox.information(self.wnd, "提示", "创建文件失败", QMessageBox.Yes)