forked from PulseFocusPlatform/PulseFocusPlatform
281 lines
9.3 KiB
Python
281 lines
9.3 KiB
Python
|
import random
|
||
|
import string
|
||
|
# from typing_extensions import ParamSpecArgs
|
||
|
from PyQt5.QtWidgets import *
|
||
|
from SSS_win import Ui_MainWindow
|
||
|
from PyQt5 import QtCore, QtGui, QtWidgets
|
||
|
from PyQt5.QtCore import Qt
|
||
|
|
||
|
import sys, os
|
||
|
|
||
|
import math
|
||
|
import time
|
||
|
import threading
|
||
|
import numpy as np
|
||
|
|
||
|
# 使用matplotlib绘图
|
||
|
import matplotlib
|
||
|
matplotlib.use("Qt5Agg") # 声明使用QT5
|
||
|
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
|
||
|
from matplotlib.backends.backend_qt5 import NavigationToolbar2QT as NavigationToolbar
|
||
|
from matplotlib.figure import Figure
|
||
|
import matplotlib.pyplot as plt
|
||
|
|
||
|
import cv2
|
||
|
import threading
|
||
|
import sys
|
||
|
global path1
|
||
|
import inspect
|
||
|
import ctypes
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
class mywindow(QtWidgets.QMainWindow, Ui_MainWindow):
|
||
|
def __init__(self):
|
||
|
super(mywindow, self).__init__()
|
||
|
self.setupUi(self)
|
||
|
|
||
|
self.stopEvent = threading.Event()
|
||
|
self.stopEvent.clear()
|
||
|
# self.setWindowFlags(Qt.FramelessWindowHint)
|
||
|
|
||
|
def exit(self):
|
||
|
self.close()
|
||
|
|
||
|
def press_shibie(self):
|
||
|
try:
|
||
|
if self.model_name == 'PPYOLO-BOT':
|
||
|
self.model_path = './inference_model/ppyolov2_r50vd_dcn_voc'
|
||
|
elif self.model_name == 'RCNN':
|
||
|
self.model_path = '.\\inference_model\\faster_rcnn'
|
||
|
#elif self.model_name == 'YOLOV3':
|
||
|
#self.model_path = '.\\inference_model\\yolov3'
|
||
|
except:
|
||
|
self.model_path = './inference_model/ppyolov2_r50vd_dcn_voc'
|
||
|
if self.Video_fname != None :
|
||
|
self.video_image_path = './video_output/'+self.Video_fname.split('/')[-1].split('.')[0]
|
||
|
th4 = threading.Thread(target=self.video_yuce)
|
||
|
th4.start()
|
||
|
th3 = threading.Thread(target=self.Images_Display)
|
||
|
th3.start()
|
||
|
else:
|
||
|
th5 = threading.Thread(target=self.Image_yuce)
|
||
|
th5.start()
|
||
|
|
||
|
|
||
|
def video_yuce(self):
|
||
|
print('cd {}'.format(self.path1))
|
||
|
print(
|
||
|
'python deploy/python/infer.py --model_dir={} --video_file={} --use_gpu=True'.format(self.model_path, self.Video_fname))
|
||
|
os.system('cd {}'.format(self.path1))
|
||
|
os.system(
|
||
|
'python deploy/python/infer.py --model_dir={} --image_dir={} --output_dir=./video_output/{} --threshold=0.3 --use_gpu=True'.format(
|
||
|
self.model_path,'./linshicunfang' ,self.Video_fname.split('/')[-1].split('.')[0]))
|
||
|
# print(self.path1+'video_output/'+self.Video_fname.split('/')[-1])
|
||
|
# self.cap = cv2.VideoCapture(
|
||
|
# self.path1+'video_output/'+self.Video_fname.split('/')[-1])
|
||
|
# self.framRate = self.cap.get(cv2.CAP_PROP_FPS)
|
||
|
|
||
|
# th = threading.Thread(target=self.Display)
|
||
|
# th.start()
|
||
|
|
||
|
def Images_Display(self):
|
||
|
img_list=[]
|
||
|
img_number=9
|
||
|
while 1:
|
||
|
try:
|
||
|
files=os.listdir(self.video_image_path)
|
||
|
for imgFile in files:
|
||
|
if int(imgFile.strip('.jpg').split('_')[0])==int(img_number):
|
||
|
print(imgFile)
|
||
|
self.label_movie.setPixmap(QtGui.QPixmap(
|
||
|
self.video_image_path+'/'+imgFile))
|
||
|
img_number += 10
|
||
|
flv = 0
|
||
|
gx = 0
|
||
|
mbw = 0
|
||
|
object = 0
|
||
|
print([int(i) for i in imgFile.strip('.jpg').split('_')[1:]])
|
||
|
for i in [int(i) for i in imgFile.strip('.jpg').split('_')[1:]]:
|
||
|
i = int(i)
|
||
|
if i == 0:
|
||
|
flv+=1
|
||
|
if i == 1:
|
||
|
gx+=1
|
||
|
if i == 2:
|
||
|
mbw+=1
|
||
|
if i == 3:
|
||
|
object+=1
|
||
|
if flv>=1 or gx>=1 or mbw>=1 or object>=1:
|
||
|
print(flv,gx,mbw)
|
||
|
self.flv.setText(str(flv))
|
||
|
self.gx.setText(str(gx))
|
||
|
self.mbw.setText(str(mbw))
|
||
|
self.label_object.setText(str(object))
|
||
|
time.sleep(0.5)
|
||
|
img_list.append(imgFile)
|
||
|
#print("8"*100)
|
||
|
if len(img_list) == len(os.listdir('./linshicunfang')):
|
||
|
for i in os.listdir('./linshicunfang'):
|
||
|
os.remove('./linshicunfang/'+i)
|
||
|
print('1'*100)
|
||
|
break
|
||
|
|
||
|
except Exception as e:
|
||
|
pass
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
# files=os.listdir(self.video_image_path)
|
||
|
# print(type(files))
|
||
|
# files=self.Sorted(files)
|
||
|
# print(files)
|
||
|
# for xmlFile in files:
|
||
|
# print(xmlFile)
|
||
|
# self.label_movie.setPixmap(QtGui.QPixmap(
|
||
|
# self.video_image_path+'/'+xmlFile))
|
||
|
# time.sleep(0.5)
|
||
|
|
||
|
def Sorted(self,files):
|
||
|
files=[int(i.split('.')[0]) for i in files]
|
||
|
files.sort()
|
||
|
files=[str(i)+'.jpg' for i in files]
|
||
|
return files
|
||
|
|
||
|
|
||
|
def Image_yuce(self):
|
||
|
print('cd {}'.format(self.path1))
|
||
|
print(
|
||
|
'python deploy/python/infer.py --model_dir={} --image_file={} --use_gpu=True'.format(self.model_path, self.Img_fname))
|
||
|
os.system('cd {}'.format(self.path1))
|
||
|
os.system(
|
||
|
'python deploy/python/infer.py --model_dir={} --image_file={} --output_dir=./output --threshold=0.3 --use_gpu=True --cpu_threads=4'.format(
|
||
|
self.model_path, self.Img_fname))
|
||
|
print(self.path1+'output/'+self.Img_fname.split('/')[-1])
|
||
|
files=os.listdir(self.path1+'output/')
|
||
|
for i in files:
|
||
|
if i.strip('.jpg').split('_')[0]+'.jpg'==self.Img_fname.split('/')[-1]:
|
||
|
self.label_movie.setPixmap(QtGui.QPixmap(
|
||
|
self.path1+'output/'+i))
|
||
|
flv = 0
|
||
|
gx = 0
|
||
|
mbw = 0
|
||
|
object = 0
|
||
|
for x in [int(m) for m in i.strip('.jpg').split('_')[1:]]:
|
||
|
x = int(x)
|
||
|
if x == 0:
|
||
|
flv+=1
|
||
|
if x == 1:
|
||
|
gx+=1
|
||
|
if x == 2:
|
||
|
mbw+=1
|
||
|
if x == 3:
|
||
|
object+=1
|
||
|
if flv>=1 or gx>=1 or mbw>=1 or object>=1:
|
||
|
print(flv,gx,mbw)
|
||
|
self.flv.setText(str(flv))
|
||
|
self.gx.setText(str(gx))
|
||
|
self.mbw.setText(str(mbw))
|
||
|
self.label_object.setText(str(object))
|
||
|
break
|
||
|
sys.exit(0)
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
def press_xunlian(self):
|
||
|
print('3')
|
||
|
|
||
|
def Close(self):
|
||
|
self.stopEvent.set()
|
||
|
|
||
|
|
||
|
def Display(self):
|
||
|
while self.cap.isOpened():
|
||
|
success, frame = self.cap.read()
|
||
|
frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)
|
||
|
img = QtGui.QImage(frame.data,frame.shape[1],frame.shape[0], QtGui.QImage.Format_RGB888)
|
||
|
self.label_movie.setPixmap(QtGui.QPixmap.fromImage(img))
|
||
|
self.label_movie.setScaledContents(True)
|
||
|
|
||
|
cv2.waitKey(int(1000/self.framRate))
|
||
|
|
||
|
if True == self.stopEvent.is_set():
|
||
|
self.stopEvent.clear()
|
||
|
self.label_movie.clear()
|
||
|
break
|
||
|
|
||
|
def Split(self):
|
||
|
img_id = 0
|
||
|
while (1):
|
||
|
success, frame = self.cap2.read()
|
||
|
img_outpath = './linshicunfang/'+str(img_id)+'.jpg'
|
||
|
img_id += 1
|
||
|
if not img_id % 10:
|
||
|
cv2.imwrite(img_outpath, frame)
|
||
|
if img_id == self.frame_count:
|
||
|
break
|
||
|
frame_count = self.cap.get(cv2.CAP_PROP_FRAME_COUNT)
|
||
|
|
||
|
|
||
|
def press_movie(self):
|
||
|
print('4')
|
||
|
self.path1 = os.path.abspath(__file__)
|
||
|
self.path1 = self.path1.strip('main.py')
|
||
|
print(self.path1)
|
||
|
self.Video_fname, self.fileType = QFileDialog.getOpenFileName(self,"选择文件",os.getcwd(),"All Files (*);;MP4 Files (*.mp4)")
|
||
|
self.cap = cv2.VideoCapture(self.Video_fname)
|
||
|
self.cap2 = cv2.VideoCapture(self.Video_fname)
|
||
|
self.framRate = self.cap.get(cv2.CAP_PROP_FPS)
|
||
|
self.frame_count = self.cap.get(cv2.CAP_PROP_FRAME_COUNT)
|
||
|
th2 = threading.Thread(target=self.Split)
|
||
|
th2.start()
|
||
|
# self.th = threading.Thread(target=self.Display)
|
||
|
# self.th.start()
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
def import_pic(self):
|
||
|
self.Video_fname = None
|
||
|
# 打开图像读取对话框
|
||
|
self.path1 = os.path.abspath(__file__)
|
||
|
self.path1 = self.path1.strip('main.py')
|
||
|
print(self.path1)
|
||
|
|
||
|
# 打开图像读取对话框
|
||
|
self.Img_fname, _ = QFileDialog.getOpenFileName(self, '打开照片', '.', '图像文件(*.jpg *.png)')
|
||
|
self.label_movie.setPixmap(QtGui.QPixmap(self.Img_fname))
|
||
|
pass
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
print('1')
|
||
|
|
||
|
|
||
|
|
||
|
def gpu_use(self,index):
|
||
|
self.gpu = self.comboBox_GPU.itemText(index)
|
||
|
print(self.gpu)
|
||
|
|
||
|
|
||
|
def moxingxuanze(self,index):
|
||
|
self.model_name = self.comboBox_sbsuanfa.itemText(index)
|
||
|
pass
|
||
|
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
QApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
|
||
|
app = QApplication(sys.argv)
|
||
|
window = mywindow()
|
||
|
# window.showMaximized()
|
||
|
window.show()
|
||
|
sys.exit(app.exec_())
|