def __init__(self, parent=None): super(LayerDataProvider, self).__init__(parent) self._blobs = [] self._availableModes = ["Blobs", "Params"] self._mode = self._availableModes[0] self._model = None self._network = None self._layer = "" self._image = "" self._backend = CaffeBackend() self._normalize = False # self._backend.setNetwork("/home/hannes/ownCloud/Studium/Deep_Learning/proto/5_chars_memory_data.caffeproto") self._backend.setNetwork("/home/hannes/ownCloud/Studium/Deep_Learning/proto/5_chars.caffeproto") self._backend.setModel("/home/hannes/ownCloud/Studium/Deep_Learning/models/5_chars.caffemodel") self._layer = self._backend.layerNames(self._mode)[0] self.updateBlobs() self.layerChanged.connect(self.updateBlobs) self.imageChanged.connect(self.updateBlobs) self.modeChanged.connect(self.updateBlobs) self.normalizeChanged.connect(self.updateBlobs)
class LayerDataProvider(QObject): # Signals and Slots # availableModesChanged = pyqtSignal() modeChanged = pyqtSignal() layerChanged = pyqtSignal() imageChanged = pyqtSignal() availableLayersChanged = pyqtSignal() blobsChanged = pyqtSignal() normalizeChanged = pyqtSignal() @pyqtSlot() def updateBlobs(self): # TODO exception handling if self._mode == "Blobs": try: self.getPredictions() except: pass elif self._mode == "Params": try: self.getParams() except: pass else: return self.blobsChanged.emit() def getPredictions(self): imagepath = QUrl(self._image).toString(QUrl.RemoveScheme) if not os.path.isfile(imagepath): print("error: invalid image: {}".format(imagepath)) return # print("updating...") self._blobs[:] = [] for blob in self._backend.predictions(imagepath, self._layer, self.normalize): self._blobs.append(BlobData(blobdata=QByteArray(blob))) def getParams(self): self._blobs[:] = [] for blob in self._backend.params(self._layer, self.normalize): self._blobs.append(BlobData(blobdata=QByteArray(blob))) # Properties # @pyqtProperty("QVariant", notify=availableModesChanged) def modes(self): return QVariant(self._availableModes) @pyqtProperty("QString", notify=modeChanged) def mode(self): return self._mode @mode.write def mode(self, mode): self._mode = mode self.availableLayersChanged.emit() self.modeChanged.emit() @pyqtProperty("QString", notify=layerChanged) def layer(self): return self._layer @layer.write def layer(self, name): self._layer = name self.layerChanged.emit() @pyqtProperty("QString") def network(self): return self._network @network.write def network(self, net): self._network = net self._backend.setNetwork(net) @pyqtProperty("QString") def model(self): return self._model @model.write def model(self, model): self._model = model self._backend.setModel(model) @pyqtProperty("QUrl", notify=imageChanged) def image(self): return self._model @image.write def image(self, img): self._image = img self.imageChanged.emit() @pyqtProperty(QVariant, notify=availableLayersChanged) def availableLayers(self): return QVariant(self._backend.layerNames(self._mode)) @pyqtProperty(QVariant, notify=blobsChanged) def blobs(self): return QVariant(self._blobs) @pyqtProperty(bool, notify=normalizeChanged) def normalize(self): return self._normalize @normalize.write def normalize(self, n): self._normalize = n self.normalizeChanged.emit() def __init__(self, parent=None): super(LayerDataProvider, self).__init__(parent) self._blobs = [] self._availableModes = ["Blobs", "Params"] self._mode = self._availableModes[0] self._model = None self._network = None self._layer = "" self._image = "" self._backend = CaffeBackend() self._normalize = False # self._backend.setNetwork("/home/hannes/ownCloud/Studium/Deep_Learning/proto/5_chars_memory_data.caffeproto") self._backend.setNetwork("/home/hannes/ownCloud/Studium/Deep_Learning/proto/5_chars.caffeproto") self._backend.setModel("/home/hannes/ownCloud/Studium/Deep_Learning/models/5_chars.caffemodel") self._layer = self._backend.layerNames(self._mode)[0] self.updateBlobs() self.layerChanged.connect(self.updateBlobs) self.imageChanged.connect(self.updateBlobs) self.modeChanged.connect(self.updateBlobs) self.normalizeChanged.connect(self.updateBlobs)