def getPrinterStatus(self): printer = self._findPrinterByString( CfgService.get(CfgKey.PRINTER_SELECTED)) # Toner alle: marker-supply-empty-error # Fach vergessen einzufügen: input-tray-missing # Papier fehlt: media-empty-error if CfgService.get(CfgKey.PRINTER_IS_ACTIVE) and printer != None: printerStates = self.conn.getPrinterAttributes( printer)["printer-state-reasons"] errorMessages = [] for printerState in printerStates: if str(printerState).find("input-tray-missing") >= 0: errorMessages.append(textValue[ TextKey.PRINT_SERVICE_MISSING_PAPER_CONTAINER]) elif str(printerState).find("media-empty-error") >= 0: errorMessages.append( textValue[TextKey.PRINT_SERVICE_EMPTY_PAPER]) elif str(printerState).find("marker-supply-empty-error") >= 0: errorMessages.append( textValue[TextKey.PRINT_SERVICE_EMPTY_INK]) elif str(printerState).find("error") >= 0: errorMessages.append( textValue[TextKey.PRINT_SERVICE_ERROR]) if len(errorMessages) > 0: errorMessages.append( textValue[TextKey.PRINT_SERVICE_ERROR_INSTRUCTION]) return " | ".join(errorMessages) else: return textValue[TextKey.PRINT_SERVICE_PRINTER_READY] else: return textValue[ TextKey.PRINT_SERVICE_PRINTER_NOT_EXIST] + " | " + textValue[ TextKey.PRINT_SERVICE_ERROR_INSTRUCTION]
def saveWifiPicture(self): qrCodeValue = 'WIFI:S:{};T:{};P:{};;'.format( self.wifiSSIDValue.text(), self.wifiProtocolValue.text(), self.wifiPasswordValue.text()) qr_code = qrcode.make(qrCodeValue) img = Image.new("RGB", (qr_code.pixel_size, qr_code.pixel_size), "white") img.paste(qr_code, (0, 0)) fontSize = 20 myFont = ImageFont.truetype(CfgService.get(CfgKey.WIFI_QR_CODE_FONT), fontSize) title = ImageDraw.Draw(img) title.text( (10, 10), textValue[TextKey.QR_CODE_WIFI_NAME] + self.wifiSSIDValue.text(), font=myFont, fill=(0, 0, 0)) password = ImageDraw.Draw(img) password.text((10, qr_code.pixel_size - 10 - fontSize), textValue[TextKey.QR_CODE_WIFI_PASSWORD] + self.wifiPasswordValue.text(), font=myFont, fill=(0, 0, 0)) img.save(self.mainSaveDirLabel.text() + "/" + CfgService.get(CfgKey.WIFI_PICTURE_NAME))
def __getBackgroundPicturePath(self): directories = os.listdir( CfgService.get(CfgKey.PAGE_TITLEPICTURE_BUTTON_IMAGE_FOLDER)) numberPictures = len(directories) pictureIndex = random.randint(0, numberPictures - 1) return CfgService.get(CfgKey.PAGE_TITLEPICTURE_BUTTON_IMAGE_FOLDER ) + "/" + directories[pictureIndex]
def getTempPicturePath(): folder = os.path.join(ShottedPictureService._getSaveFolder(), CfgService.get(CfgKey.RAW_PICTURE_SUB_DIR)) FileFolderService.createFolderIfNotExist(folder) relativPath = os.path.join( folder, "temp" + CfgService.get(CfgKey.PICTURE_FORMAT)) return FileFolderService.getAbsoltPath(relativPath)
def run(self): resolution = CfgService.get(CfgKey.PI_CAMERA_VIDEO_RESOLUTION) camera = PiCamera() camera.resolution = resolution camera.framerate = CfgService.get(CfgKey.PI_CAMERA_VIDEO_FPS) rawCapture = PiRGBArray(camera, size=resolution) time.sleep(0.1) for frame in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True): if (self.run == False): break frameArray = frame.array self.updatePixel(frame.array) if not self.background is None: frameArray = GreenscreenReplaceBackgroundService( self.globalVariable).replaceBackground( frameArray, self.background) rgbImage = cv2.cvtColor(frameArray, cv2.COLOR_BGR2RGB) h, w, ch = rgbImage.shape bytesPerLine = ch * w convertToQtFormat = QImage(rgbImage.data, w, h, bytesPerLine, QImage.Format_RGB888) p = convertToQtFormat.scaled(self.img_dimensions.width(), self.img_dimensions.height(), Qt.KeepAspectRatio) self.changePixmap.emit(p) rawCapture.truncate(0) camera.close() cv2.destroyAllWindows()
def indexPage(): dbResults = ServerDbSevice.getPictureNames() picturePageUrl = [] if CfgService.get(CfgKey.SERVER_INDEX_PAGE_SHOW_ALL_PICTURES): for dbResult in dbResults: picturePageUrl.append(CfgService.get(CfgKey.SERVER_DOWNLOAD_PICTURE_PAGE)+"/"+dbResult) return render_template('index/index.html',len = len(picturePageUrl), picturePageUrl = picturePageUrl)
def getRandomPicture(self): directories = os.listdir( CfgService.get(CfgKey.PAGE_CAPTUREPHOTO_LAST_IMAGE_FOLDER)) numberPictures = len(directories) pictureIndex = random.randint(0, numberPictures - 1) return QPixmap( CfgService.get(CfgKey.PAGE_CAPTUREPHOTO_LAST_IMAGE_FOLDER) + "/" + directories[pictureIndex])
def showPrinterButtonIfActivated(self): printerIsActiv = CfgService.get(CfgKey.PRINTER_IS_ACTIVE) if not printerIsActiv: self.printButton.setDisabled(True) self.printButton.setStyleSheet( "qproperty-icon: url(" + CfgService.get( CfgKey.PAGE_PICTUREEDIT_PRINT_BUTTON_DISABLED_ICON_DIR) + ");")
def setStartButtonStyle(self): styling = "border-image : url(" + self.__getBackgroundPicturePath( ) + ");" if CfgService.get(CfgKey.PAGE_TITLEPICTURE_BACKGROUND_IMAGE) != None: styling += " background-color: transparent;" else: styling += "background-color: " + CfgService.get( CfgKey.PAGE_TITLEPICTURE_BUTTON_BACKGROUND_COLOR) + ";" self.startButton.setStyleSheet(styling)
def getCounterImage(self, number: int): directories = os.listdir( CfgService.get(CfgKey.PAGE_CAMERAPREVIEW_COUNDOWN_IMAGE_FOLDER)) for file in directories: if file.endswith(str(number) + ".png"): return QPixmap( CfgService.get( CfgKey.PAGE_CAMERAPREVIEW_COUNDOWN_IMAGE_FOLDER) + "/" + file) return None
def _loadBackgroundImages(self,picturePath,isCustom:bool,rotateAngle:int=0): videoBackground = self._cutPicture(picturePath,CfgService.get(CfgKey.PI_CAMERA_VIDEO_RESOLUTION),rotateAngle) pictureBackground = self._cutPicture(picturePath,CfgService.get(CfgKey.PI_CAMERA_PHOTO_RESOLUTION),rotateAngle) previewPath = self._savePreview(pictureBackground,picturePath,isCustom) return {GreenscreenBackgroundService.PICTURE_PATH_KEY:picturePath, GreenscreenBackgroundService.PICTURE_PREVIEW_PATH_KEY:previewPath, GreenscreenBackgroundService.VIDEO_KEY:videoBackground, GreenscreenBackgroundService.PICTURE_KEY:pictureBackground, GreenscreenBackgroundService.IS_CUSTOM:isCustom, GreenscreenBackgroundService.ROTATE_ANGLE:rotateAngle}
def deleteLoadingGifFolder(self): self.disableAllButtons() FileFolderService.removeIfExist( CfgService.get(CfgKey.PAGE_CAPTUREPHOTO_LOADING_GIF_FOLDER)) FileFolderService.removeIfExist( CfgService.get( CfgKey. PAGE_SYSTEMPICTUREMANAGER_LOADINGGIFS_PICTURE_SOURCE_SUCCESS_DOWNLOAD )) self.enableAllButtons() self.loadingGifDeleteButton.setText( textValue[TextKey.PAGE_SYSTEMPICTUREMANAGER_SUCCESSFULL])
def downloadPicturePage(pictureName): ids = ServerDbSevice.getPictureUrlIds(pictureName) if not ids: abort(404) else: printerService = PrinterService() pictureData = [] allowedPrinting = printerService.printingPosible() and CfgService.get(CfgKey.PRINTER_IS_ACTIVE) and CfgService.get(CfgKey.PRINTER_IS_ACTIVE_WEB) and not printerService.hasTooManyPrintingOrderWeb(pictureName) for id in ids: printUrl = CfgService.get(CfgKey.SERVER_PRINT_PICTURE_PAGE)+"/"+pictureName+"/"+id pictureData.append([CfgService.get(CfgKey.SERVER_DOWNLOAD_PICTURE)+"/"+id,printUrl,allowedPrinting]) return render_template('picture/download.html',name=pictureName, len = len(pictureData), pictureData = pictureData)
def deleteFunnyPictureFolder(self): self.disableAllButtons() FileFolderService.removeIfExist( CfgService.get(CfgKey.PAGE_CAPTUREPHOTO_LAST_IMAGE_FOLDER)) FileFolderService.removeIfExist( CfgService.get( CfgKey. PAGE_SYSTEMPICTUREMANAGER_FUNNY_PICTURE_SOURCE_SUCCESS_DOWNLOAD )) self.enableAllButtons() self.funnyDeleteButton.setText( textValue[TextKey.PAGE_SYSTEMPICTUREMANAGER_SUCCESSFULL])
def activateGreenscreen(self): if self.greenscreenDisabledButton.isChecked(): CfgService.set(CfgKey.GREENSCREEN_IS_ACTIVE, True) self.greenscreenDisabledButton.setText( textValue[TextKey.PAGE_CONFIG_AKTIVATE]) self.greenscreenDisabledButton.setChecked( CfgService.get(CfgKey.GREENSCREEN_IS_ACTIVE)) else: CfgService.set(CfgKey.GREENSCREEN_IS_ACTIVE, False) self.greenscreenDisabledButton.setText( textValue[TextKey.PAGE_CONFIG_INAKTIVATE]) self.greenscreenDisabledButton.setChecked( CfgService.get(CfgKey.GREENSCREEN_IS_ACTIVE))
def activatePrinterWeb(self): if self.printerDisabledWebButton.isChecked(): CfgService.set(CfgKey.PRINTER_IS_ACTIVE_WEB, True) self.printerDisabledWebButton.setText( textValue[TextKey.PAGE_CONFIG_AKTIVATE]) self.printerDisabledWebButton.setChecked( CfgService.get(CfgKey.PRINTER_IS_ACTIVE_WEB)) else: CfgService.set(CfgKey.PRINTER_IS_ACTIVE_WEB, False) self.printerDisabledWebButton.setText( textValue[TextKey.PAGE_CONFIG_INAKTIVATE]) self.printerDisabledWebButton.setChecked( CfgService.get(CfgKey.PRINTER_IS_ACTIVE_WEB))
def getRandomGif(self): directories = os.listdir( CfgService.get(CfgKey.PAGE_CAPTUREPHOTO_LOADING_GIF_FOLDER)) numberPictures = len(directories) pictureIndex = random.randint(0, numberPictures - 1) gif = QMovie( CfgService.get(CfgKey.PAGE_CAPTUREPHOTO_LOADING_GIF_FOLDER) + "/" + directories[pictureIndex]) gifSize = gif.scaledSize() gifScaleFactor = self.windowSize.height() / gifSize.height() gif.setScaledSize( QSize(gifSize.width() * gifScaleFactor, gifSize.height() * gifScaleFactor)) return gif
def getRandomPictureUris(): if not CfgService.get(CfgKey.DIASHOW_CLIENT_IS_ACTIVE): return base64.b64encode("".encode('utf-8')) numberOfPictures = ServerDbSevice.getNumberUsedPictures() if numberOfPictures <= CfgService.get(CfgKey.SERVER_GETPICTUREURLIDS_THRASHOLD): return base64.b64encode("".encode('utf-8')) pictureUrlIds = ServerDbSevice.getRendomPictureUrlIds(CfgService.get(CfgKey.SERVER_GETPICTUREURLIDS_NUMBER)) pictureUrlsAsString = "" for urlId in pictureUrlIds: url = "http://"+CfgService.get(CfgKey.SERVER_IP)+":"+CfgService.get(CfgKey.SERVER_PORT)+CfgService.get(CfgKey.SERVER_DOWNLOAD_PICTURE)+"/"+urlId pictureUrlsAsString += url +";" return base64.b64encode(pictureUrlsAsString.encode('utf-8'))
def _savePicture(targetFolder, fileName): sourceFile = ShottedPictureService.getTempPicturePath() targetPath = os.path.join( targetFolder, fileName + CfgService.get(CfgKey.PICTURE_FORMAT)) unicTargetPath = ShottedPictureService._getUnicFileName(targetPath) FileFolderService.moveFile(sourceFile, unicTargetPath) return FileFolderService.getAbsoltPath(unicTargetPath)
def _getPictureButtonsSize(self): piCameraResolution = CfgService.get(CfgKey.PI_CAMERA_PHOTO_RESOLUTION) height = self.getContentHeightWithNavigationButtonAndTitle() cameraHeight = piCameraResolution[1] camerawidth = piCameraResolution[0] width = height * camerawidth / cameraHeight return QSize(width, height)
def replaceBackground(self, frame, background=None): if background is None: background = GreenscreenBackgroundService( self.globalVariable).getBackgroundAsHsv( GreenscreenBackgroundService.PICTURE_KEY, CfgService.get(CfgKey.PI_CAMERA_PHOTO_RESOLUTION)) return self._replaceBackgroud(frame, background)
def _scannImageForProperties(self, image): self.greenscreenColorRangeService.scanImage(image) hueDiverence = self.greenscreenColorRangeService.getMaxHSV( )[0] - self.greenscreenColorRangeService.getMinHSV()[0] self._setHint(hueDiverence > CfgService.get( CfgKey.GREENSCREEN_MAX_COLOR_RANGE_HINT)) self._setColorLabelText(self.minColorLabel, self.greenscreenColorRangeService.getMinHSV(), "Min:") self._updateMonitoringLabel( self.minColorLabel, self.greenscreenColorRangeService.getMinQColor()) self._setColorLabelText(self.maxColorLabel, self.greenscreenColorRangeService.getMaxHSV(), "Max:") self._updateMonitoringLabel( self.maxColorLabel, self.greenscreenColorRangeService.getMaxQColor()) self._setColorLabelText( self.averageColorLabel, self.greenscreenColorRangeService.getAverageHSV(), "Ø:") self._updateMonitoringLabel( self.averageColorLabel, self.greenscreenColorRangeService.getAverageQColor())
def updateUiPrintingPossible(self): if not self.printerService.printingPosible(): CfgService.set(CfgKey.PRINTER_IS_ACTIVE, False) self.printerDisabledButton.setText( textValue[TextKey.PAGE_CONFIG_INAKTIVATE]) self.printerDisabledButton.setChecked( CfgService.get(CfgKey.PRINTER_IS_ACTIVE)) self.printerDisabledButton.setDisabled(True)
def __init__(self, pages: AllPages, windowSize: QSize): super().__init__(pages, windowSize) vbox = QVBoxLayout() vbox.setContentsMargins(0, 0, 0, 0) self.setLayout(vbox) if CfgService.get(CfgKey.PAGE_TITLEPICTURE_BACKGROUND_IMAGE) != None: self.setStyleSheet( "background-image: url('" + CfgService.get(CfgKey.PAGE_TITLEPICTURE_BACKGROUND_IMAGE) + "');") #Startbutton self.startButton = QPushButton() self.startButton.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) self.startButton.clicked.connect(self.nextPageEvent) vbox.addWidget(self.startButton)
def executeBefore(self): if not CfgService.get(CfgKey.GREENSCREEN_IS_ACTIVE): self.nextPageEvent() else: self.currentBackgroundImageIndex = 0 self._navigationBackgroundButtonStatus() self._setBrackgroundPreview() self._updateTitle()
def getPrintStatusHint(pictureName): printerService = PrinterService() if printerService.isStatusInPrintWeb(pictureName): return textValue[TextKey.WEB_PRINT_STATUS_IN_PRINTING] else: if printerService.hasTooManyPrintingOrderWeb(pictureName): return textValue[TextKey.WEB_PRINT_STATUS_NO_MORE_COPY] else: return textValue[TextKey.WEB_PRINT_STATUS_READY] % CfgService.get(CfgKey.PRINTER_MAX_PRINTING_ORDER)
def updateGreenscreenActive(self): isGreenscreenActivate = CfgService.get(CfgKey.GREENSCREEN_IS_ACTIVE) self.greenscreenDisabledButton.setChecked(isGreenscreenActivate) if isGreenscreenActivate: self.greenscreenDisabledButton.setText( textValue[TextKey.PAGE_CONFIG_AKTIVATE]) else: self.greenscreenDisabledButton.setText( textValue[TextKey.PAGE_CONFIG_INAKTIVATE])
def updateFunnyPictures(self): self.disableAllButtons() urls = FileFolderService.readFile( CfgService.get( CfgKey.PAGE_SYSTEMPICTUREMANAGER_FUNNY_PICTURE_SOURCE)) if (len(urls) > 0): self.thread = PictureDownloadThread( urls, CfgService.get(CfgKey.PAGE_CAPTUREPHOTO_LAST_IMAGE_FOLDER), CfgService.get( CfgKey. PAGE_SYSTEMPICTUREMANAGER_FUNNY_PICTURE_SOURCE_SUCCESS_DOWNLOAD )) self.thread._signal.connect(self.signal_accept) self.thread.start() else: self.enableAllButtons() self.funnyUpdateButton.setText( textValue[TextKey.PAGE_SYSTEMPICTUREMANAGER_SUCCESSFULL])
def downloadPicture(urlId): picturePathAndName = ServerDbSevice.getPicturePathAndName(urlId) if not picturePathAndName: abort(404) else : imageAsByte = FileFolderService.readImage(picturePathAndName[1]) return send_file(io.BytesIO(imageAsByte), as_attachment=True, attachment_filename=CfgService.get(CfgKey.PROJECTNAME)+"_"+picturePathAndName[0]+'.png', mimetype='image/png')
def _savePreview(self,image,sourcePath:str,isCustom:bool): fileName = FileFolderService.getFileName(sourcePath) if isCustom: fileName = CfgService.get(CfgKey.GREENSCREEN_CUSTOM_BACKGROUND_PREVIEW_FILENAME)+fileName filePath = os.path.join(GreenscreenBackgroundService.getCustomBackgroundPath(), fileName) else: filePath = os.path.join(self._getTempPath(), fileName) windowSize = self.globalVariable.getWindowSize() preview = image.resize((windowSize.width(),windowSize.height())) preview.save(filePath) return filePath