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 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 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 __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 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 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 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 _negTextFieldEvent(self): hAsString = self.negHTextField.text() sAsString = self.negSTextField.text() vAsString = self.negVTextField.text() if len(hAsString) > 0 and len(sAsString) > 0 and len(vAsString) > 0: h = max(min(int(hAsString),179),0) s = max(min(int(sAsString),255),0) v = max(min(int(vAsString),255),0) CfgService.setIntList(CfgKey.GREENSCREEN_MIN_HSV_CV2_COLOR,[h,s,v])
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 __init__(self): try: self.conn = cups.Connection() self.printers = self.conn.getPrinters() cups.setUser(getpass.getuser()) except: print("Drucker konnte nicht intitialisiert werden.") self.printers = {} CfgService.set(CfgKey.PRINTER_IS_ACTIVE, False)
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 updateGreenscreenColor(self): averageGreenscreenQColor = CfgService.getColor( CfgKey.GREENSCREEN_AVERAGE_HSV_GUI_COLOR) averageGreenscreenCv2ColorText = CfgService.getIntList( CfgKey.GREENSCREEN_AVERAGE_HSV_CV2_COLOR) self.averageColorLabel.setText(str(averageGreenscreenCv2ColorText)) self.averageColorLabel.setStyleSheet( "background-color:rgb(" + str(averageGreenscreenQColor.getRgb()[0]) + "," + str(averageGreenscreenQColor.getRgb()[1]) + "," + str(averageGreenscreenQColor.getRgb()[2]) + ")")
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 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 executeBefore(self): posToleranceValues = CfgService.getIntList(CfgKey.GREENSCREEN_MAX_HSV_CV2_COLOR) self.posHTextField.setText(str(posToleranceValues[0])) self.posSTextField.setText(str(posToleranceValues[1])) self.posVTextField.setText(str(posToleranceValues[2])) negToleranceValues = CfgService.getIntList(CfgKey.GREENSCREEN_MIN_HSV_CV2_COLOR) self.negHTextField.setText(str(negToleranceValues[0])) self.negSTextField.setText(str(negToleranceValues[1])) self.negVTextField.setText(str(negToleranceValues[2])) self.minMaxStore = [negToleranceValues,posToleranceValues] background = GreenscreenBackgroundService(self.globalVariable).getBlackBackgroundAsHsv(CfgService.get(CfgKey.PI_CAMERA_VIDEO_RESOLUTION)) self.videoThread = CameraService.initialAndStartVideo(QSize(self.windowSize.width()/2,self.windowSize.height()/2),self.globalVariable,self.setVideoStreamToLabel,background,self.setHsvPixelToLabel)
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 executeBefore(self): if not CfgService.get(CfgKey.GREENSCREEN_IS_ACTIVE): self.nextPageEvent() else: self.currentBackgroundImageIndex = 0 self._navigationBackgroundButtonStatus() self._setBrackgroundPreview() self._updateTitle()
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 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 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 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')