Esempio n. 1
0
    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)
Esempio n. 2
0
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)