コード例 #1
0
ファイル: PyDWMG.py プロジェクト: CodeArc13/PyDWMG
    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)

        # INIT STUFF
        app.aboutToQuit.connect(self.quit_app)
        try:
            with open("zone_info.csv") as f:
                zone_csv = csv.reader(f)
                next(zone_csv)  # Skip first line
                self.zones = [Zone(zone_info) for zone_info in zone_csv]
        except FileNotFoundError:
            print("zone_info.csv not found, quitting!")
            sys.exit(1)

        self.title = "Dude, Where's My Guild???"
        self.setWindowTitle(self.title)
        self.setWindowIcon(QIcon(os.path.join("icons", "DWMG.png")))
        outer_layout = QVBoxLayout()
        tool_layout = QHBoxLayout()
        map_layout = QVBoxLayout()
        data_layout = QVBoxLayout()
        button_layout = QVBoxLayout()

        # WINDOW VARIABLES, could be used for persistance between sessions
        self.on_top = False
        self.opacity = 1

        # TOOL BAR
        self.button_log_folder = QPushButton()
        self.button_log_folder.setIcon(QApplication.style().standardIcon(
            QStyle.SP_DialogOpenButton))
        self.button_log_folder.setToolTip("Select EQ or log folder")
        self.button_log_folder.pressed.connect(self.select_eqlog_dir)
        self.button_on_top = QPushButton()
        self.button_on_top.setIcon(
            QIcon(os.path.join("icons", "NotAlwaysOnTop.png")))
        self.button_on_top.setToolTip("Always on top")
        self.button_on_top.pressed.connect(self.always_on_top)

        # SET WINDOW OPACITY AND SETUP SLIDER
        self.setWindowOpacity(self.opacity)
        self.opacity_slider = QSlider(Qt.Horizontal)
        self.opacity_slider.setMinimum(20)
        self.opacity_slider.setMaximum(100)
        self.opacity_slider.setTickInterval(1)
        self.opacity_slider.setValue(self.opacity * 100)
        self.opacity_slider.setToolTip("Window transparency")
        self.opacity_slider.valueChanged.connect(self.opacity_changed)

        # MAP LABEL
        INITIAL_MAP = "Map_eastcommons.jpg"
        self.label_map = QLabel()
        pixmap = QPixmap(os.path.join(os.getcwd(), "maps", INITIAL_MAP))
        self.label_map.setPixmap(pixmap)
        self.label_map.resize(pixmap.width(), pixmap.height())
        self.resize(pixmap.width(), pixmap.height())

        # BOTTOM TESTING LABELS
        label_zone = QLabel("Zone:")
        self.label_currentzone = QLabel("")
        label_loc = QLabel("Location:")
        self.label_currentloc = QLabel("")
        label_prevloc = QLabel("Previous Location:")
        self.label_prevloc = QLabel("")
        button_quit = QPushButton("Quit")
        button_quit.pressed.connect(self.quit_app)

        # LAYOUT SETUP
        tool_layout.addWidget(self.button_log_folder, 0, Qt.AlignLeft)
        tool_layout.addWidget(self.button_on_top, 1, Qt.AlignLeft)
        tool_layout.addWidget(self.opacity_slider, 16, Qt.AlignLeft)
        map_layout.addWidget(self.label_map)
        data_layout.addStretch()
        data_layout.addWidget(label_zone)
        data_layout.addWidget(self.label_currentzone)
        data_layout.addWidget(label_loc)
        data_layout.addWidget(self.label_currentloc)
        data_layout.addWidget(label_prevloc)
        data_layout.addWidget(self.label_prevloc)
        button_layout.addWidget(button_quit)

        outer_layout.addLayout(tool_layout)
        outer_layout.addLayout(map_layout)
        outer_layout.addLayout(data_layout)
        outer_layout.addLayout(button_layout)

        w = QWidget()
        w.setLayout(outer_layout)

        self.setCentralWidget(w)

        self.setMaximumSize(outer_layout.geometry().width(),
                            outer_layout.geometry().height())

        self.show()

        self.threadpool = QThreadPool()
        print("Multithreading with maximum %d threads" %
              self.threadpool.maxThreadCount())

        self.get_eqlog_dir()
        try:
            self.start_logscanner(self.eqlog_dir)
        except AttributeError:
            print(
                "Error: No eq log dir defined, unable to start log scanner thread"
            )
コード例 #2
0
ファイル: ImageViewer.py プロジェクト: wangsdchn/ImageViewer
class ImageViewer(QWidget):
    def __init__(self):
        super().__init__()
        self.scale = 1.0
        self.image = None
        self.bMousePress = False
        self.bMouseDouble = False
        self.bDrawRect = False
        self.pressPos = None
        self.releasePos = None
        self.rectList = []
        self.imageCount = [0]*100
        self.imageVec = []
        self.imageVecIter = 0
        self.bCtrlPress = False
        self.x1 = self.y1 = self.x2 = self.y2 = 0
        self.initUI()
    def initUI(self):
        self.readImgBtn = QPushButton('SelectImage')
        self.readImgBtn.setMaximumSize(500,30)
        self.imgPath = QLineEdit()
        self.savePathBtn = QPushButton(('SelectPath'))
        self.savePath = QLineEdit()
        
        self.TopLayout = QHBoxLayout()
        self.TopLayout.addWidget(self.readImgBtn)
        self.TopLayout.addWidget(self.imgPath)
        self.TopLayout.addWidget(self.savePathBtn)
        self.TopLayout.addWidget(self.savePath)
        
        self.showImgLabel = QLabel('image')        
        self.scrollArea = QScrollArea()
        self.scrollArea.setWidget(self.showImgLabel)
        self.scrollArea.setAlignment(Qt.AlignCenter)
        self.scrollArea.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        self.scrollArea.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        
        self.MidLayout = QVBoxLayout()
        self.MidLayout.addWidget(self.scrollArea)
        self.MidLayout.setSizeConstraint(QLayout.SetFixedSize)
        
        self.nextBtn = QPushButton('Next')
        self.lastBtn = QPushButton('Last')
        self.combox_label = QComboBox()
        self.combox_label.addItem('0')
        self.combox_label.addItem('1')
        #self.combox_label.addItem('2')
        self.saveImgBtn = QPushButton(('SaveImage'))
        
        self.BottomLayout = QHBoxLayout()
        self.BottomLayout.addWidget(self.lastBtn)
        self.BottomLayout.addWidget(self.nextBtn)
        self.BottomLayout.addWidget(self.combox_label)
        self.BottomLayout.addWidget(self.saveImgBtn)
        
        self.mainLayout = QGridLayout(self)
        self.mainLayout.addLayout(self.TopLayout,0,0)
        self.mainLayout.addLayout(self.MidLayout,1,0)
        self.mainLayout.addLayout(self.BottomLayout,2,0)
        self.mainLayout.setSpacing(6)
        self.resize(640,480)
        self.readImgBtn.clicked.connect(self.openAnImage)
        self.saveImgBtn.clicked.connect(self.saveRoiImage)
        self.nextBtn.clicked.connect(self.nextImage)
        self.lastBtn.clicked.connect(self.LastImage)
        self.savePathBtn.clicked.connect(self.openAFolder)

    def keyPressEvent(self,event):
        if event.key() == Qt.Key_Control:
            self.bCtrlPress = True
    def keyReleaseEvent(self,event):
        self.bCtrlPress = False
    def wheelEvent(self,event):
        if not self.bCtrlPress:
            return
        self.rectList.clear()
        x = self.showImgLabel.geometry().x() + self.MidLayout.geometry().x()
        y = self.showImgLabel.geometry().y() + self.MidLayout.geometry().y()
        w,h = self.showImgLabel.geometry().width(),self.showImgLabel.geometry().height()
        qrect = QRect(QPoint(x,y),QSize(w,h))
        if qrect.contains(event.pos()):
            delta = event.angleDelta()
            numDegress = delta.y()/8
            if numDegress > 0:
                self.scale *= 1.2
            else:
                self.scale /= 1.2
            self.showImage()
    def mouseMoveEvent(self,event):
        if self.bDrawRect:
            self.releasePos = event.pos()
            self.showImage()
        if not self.bMousePress:
            return
        curPt = event.pos()
        disX = self.pressPos.x() - curPt.x()
        disY = self.pressPos.y() - curPt.y()
        self.scrollArea.verticalScrollBar().setValue(self.scrollArea.verticalScrollBar().value() + disY)
        self.scrollArea.horizontalScrollBar().setValue(self.scrollArea.horizontalScrollBar().value() + disX)        
        self.pressPos = curPt
    def mousePressEvent(self,event):
        x = self.showImgLabel.geometry().x() + self.MidLayout.geometry().x()
        y = self.showImgLabel.geometry().y() + self.MidLayout.geometry().y()
        w,h = self.showImgLabel.geometry().width(),self.showImgLabel.geometry().height()
        qrect = QRect(QPoint(x,y),QSize(w,h))
        if qrect.contains(event.pos()) and Qt.RightButton == event.buttons():
            self.bMousePress = True
            self.bDrawRect = False
            self.pressPos = event.pos()
        elif qrect.contains(event.pos()) and Qt.LeftButton == event.button():
            self.bDrawRect = True
            self.bMousePress = False
            self.pressPos = event.pos()
        else:
            self.bMousePress = False
            self.bDrawRect = False
    def mouseDoubleClickEvent(self,event):
        x3 = event.x() - self.MidLayout.geometry().x() - self.showImgLabel.pos().x()
        y3 = event.y() - self.MidLayout.geometry().y() - self.showImgLabel.pos().y()
        for i in range(len(self.rectList)):
            label,x1,y1,x2,y2 = self.rectList[i]
            if x1<x3<x2 and y1<y3<y2:
                del self.rectList[i]
                break
        h,w,c = self.image.shape
        scaleMat = cv2.resize(self.image,(int(self.scale*w),int(self.scale*h)),interpolation = cv2.INTER_AREA)
        for i in range(len(self.rectList)):
            label,x1,y1,x2,y2 = self.rectList[i]
            cv2.rectangle(scaleMat,(x1,y1),(x2,y2),(0,255,0),2)
            cv2.putText(scaleMat,label,(x1,y1),cv2.FONT_HERSHEY_SIMPLEX,1,(255,0,0),1)
        h,w,c = scaleMat.shape
        bytesPerLine = c * w
        self.qimage=QImage(scaleMat.data,w,h,bytesPerLine,QImage.Format_RGB888)
        self.showImgLabel.resize(self.qimage.size())
        self.showImgLabel.setPixmap(QPixmap.fromImage(self.qimage))
    def mouseReleaseEvent(self,event):
        if self.bDrawRect:
            self.pressPos = QPoint(0,0)
            self.bMousePress = False
            self.bDrawRect = False
            label = self.combox_label.currentText()
            if self.x1 < self.x2 - 5 and self.y1 < self.y2 - 5:
                self.rectList.append([label,self.x1,self.y1,self.x2,self.y2])
            #print(self.x1,self.y1,self.x2,self.y2)
    def showImage(self):
        name = self.imageVec[self.imageVecIter]
        n = name.rfind('/')
        name = name[n+1:]
        h,w,c = self.image.shape
        cv2.putText(self.image,name,(10,25),cv2.FONT_HERSHEY_SIMPLEX,1,(255,0,0),1)
        self.scaleMat = cv2.resize(self.image,(int(self.scale*w),int(self.scale*h)),interpolation = cv2.INTER_AREA)
        
        for i in range(len(self.rectList)):
            label,x1,y1,x2,y2 = self.rectList[i]
            cv2.rectangle(self.scaleMat,(x1,y1),(x2,y2),(0,255,0),2)
            cv2.putText(self.scaleMat,label,(x1,y1),cv2.FONT_HERSHEY_SIMPLEX,1,(255,0,0),1)
        if self.bDrawRect:
            self.x1 = self.pressPos.x() - self.MidLayout.geometry().x() - self.showImgLabel.pos().x()
            self.y1 = self.pressPos.y() - self.MidLayout.geometry().y() - self.showImgLabel.pos().y()
            self.x2 = self.releasePos.x() - self.MidLayout.geometry().x() - self.showImgLabel.pos().x()
            self.y2 = self.releasePos.y() - self.MidLayout.geometry().y() - self.showImgLabel.pos().y()
            #print(self.x1,self.y1,self.x2,self.y2)
            if self.x1 < self.x2 and self.y1 < self.y2:
                cv2.rectangle(self.scaleMat,(self.x1,self.y1),(self.x2,self.y2),(0,255,0),2)
                label = self.combox_label.currentText()
                cv2.putText(self.scaleMat,label,(self.x1,self.y1),cv2.FONT_HERSHEY_SIMPLEX,1,(255,0,0),1)
        h,w,c = self.scaleMat.shape
        bytesPerLine = c * w
        self.qimage=QImage(self.scaleMat.data,w,h,bytesPerLine,QImage.Format_RGB888)
        self.showImgLabel.resize(self.qimage.size())
        self.showImgLabel.setPixmap(QPixmap.fromImage(self.qimage))
        
    def readImage(self,path=''):
        #self.image=cv2.imread(path)
        self.image = cv2.imdecode(np.fromfile(path,dtype=np.uint8),-1)
        if self.image.all():
            return
        cv2.cvtColor(self.image,cv2.COLOR_BGR2RGB,self.image)
        self.showImage()
    def saveRoiImage(self):
        if len(self.imageVec)==0:
            return
        h,w,c = self.image.shape     #去除框边缘
        scaleMat = cv2.resize(self.image,(int(self.scale*w),int(self.scale*h)),interpolation = cv2.INTER_AREA)
        cv2.cvtColor(scaleMat,cv2.COLOR_RGB2BGR,scaleMat)
        for i in range(len(self.rectList)):
            label,x1,y1,x2,y2 = self.rectList[i]
            roi = scaleMat[x1:x2,y1:y2]
            name = self.savePath.text() + label + '/' + '%.2d_%.4d.jpg'%(int(label),self.imageCount[int(label)])
            print(label,name)
            cv2.imencode('.jpg',roi)[1].tofile(name)
            self.imageCount[int(label)] += 1
            #bbox = self.imageVec[self.imageVecIter] + ' ' + label + ' ' + str(x1) + ' ' + str(x2) + ' ' + str(y1) + ' ' + str(y2) + '\n'
            #f = open('train.txt','a')
            #f.write(bbox)
            #f.close()
    def openAFolder(self):
        path = QFileDialog.getExistingDirectory(self,'Select A Folder','D:/src')
        if path == '':
            return
        path += '/'
        self.savePath.setText(path)
        
        filelist = os.listdir(path)
        count = [0] * 100
        self.imageCount = [0] * 100
        for i in range(len(filelist)):
            if '.' in filelist[i]:
                print(filelist[i])
                continue
            else:
                filelist1 = os.listdir(path+'filelist[i]')
                for j in range(len(filelist1)):
                    if filelist[1][-4:] != 'jpg':
                        continue
                    label = int(filelist[i][0:2])
                    count[label] = int(filelist[i][3:7])
                    if self.imageCount[label] <= count[label]:
                        self.imageCount[label] = count[label] + 1
    def openAnImage(self):
        self.imageVecIter = 0
        self.imageVec.clear()
        self.rectList.clear()
        file = QFileDialog.getOpenFileName(self,'Select An Image','D:/src','bmp files(*.bmp);;png files(*.png);;jpg files(*.jpg *jpeg)')
        if file == '':
            return
        n = file[0].rfind('/')
        path = file[0][:n]
        path += '/'
        self.imgPath.setText(path)
        n = file[0].rfind('.')
        imgtype = file[0][n+1:]
        filelist = os.listdir(path)
        k = 0
        for i in range(len(filelist)):
            if filelist[i][-3:] != imgtype:
                continue
            else:
                self.imageVec.append(path + filelist[i])
                k += 1
                if path + filelist[i] == file[0]:
                    self.imageVecIter = k - 1
        if len(self.imageVec) > 0:
            self.readImage(self.imageVec[self.imageVecIter])
    def nextImage(self):
        if len(self.imageVec)==0:
            return
        if self.imageVecIter == len(self.imageVec)-1:
            return
        else:
            self.imageVecIter += 1
        self.rectList.clear()
        self.readImage(self.imageVec[self.imageVecIter])
    def LastImage(self):
        if len(self.imageVec)==0:
            return
        if self.imageVecIter == 0:
            return
        else:
            self.imageVecIter -= 1
        self.rectList.clear()
        self.readImage(self.imageVec[self.imageVecIter])
    """