Пример #1
0
class HisImage():
    def __init__(self, fdname, finame):
        self.fdname = fdname
        self.finame = finame
        self.webparent = r'/Test2/'
        self.im = ops.OpenSlide(self.fdname + self.finame + '.ndpi')
        self.root = self.ExtractRoot()

        self.an_num = self.root.__len__()
        self.mysite = Piwigo(url='http://qmul.piwigo.com/')
        self.login = self.Login()
        self.webimlist = self.mysite.images(self.mysite.plan.keys()[0])
        self.webfdlist = self.mysite.plan
        self.update = self.CheckMysite()  #Update or

    def __del__(self):
        self.Logout()

    def Logout(self):
        self.mysite.logout()

    def Login(self):
        return self.mysite.login(username="******", password="******")

    def CheckMysite(self):
        if self.webfdlist.has_key(self.webparent + self.finame):
            return True
        else:
            self.mysite.mkdir(self.webparent + self.finame)
            return False

    def ExtractRoot(self):
        with open(self.fdname + self.finame + '.ndpi.ndpa') as f:
            tree = ElementTree.parse(f)
        return tree.getroot()

    def ConvertXY(self, ax, by):
        xmpp = float(self.im.properties['openslide.mpp-x'])
        xoff = float(self.im.properties['hamamatsu.XOffsetFromSlideCentre'])
        ympp = float(self.im.properties['openslide.mpp-y'])
        yoff = float(self.im.properties['hamamatsu.YOffsetFromSlideCentre'])
        ld = self.im.dimensions
        nax = int((ax - xoff) / (xmpp * 1000.0) + ld[0] / 2.0)
        nby = int((by - yoff) / (ympp * 1000.0) + ld[1] / 2.0)
        return nax, nby

    def Upload(self, imgname):
        fdpath = self.webparent + self.finame + r'/' + imgname[-1].upper()
        if self.webfdlist.has_key(fdpath) == False:
            self.mysite.mkdir(fdpath)
        try:
            self.mysite.upload(imgname + '.png', fdpath)
        except Exception as e:
            print imgname
            print e
            self.mysite.upload(imgname + '.png', fdpath)

        os.remove(imgname + '.png')

    def NameAnnotation(self, index):
        if self.root[index][0].text != None and self.root[index][
                0].text != 'roi':
            name = 'ID-' + self.root[index].attrib['id'] + '-' + self.root[
                index][0].text
        elif self.root[index][0].text == 'roi' or self.root[index][
                0].text == 'ROI':
            name = 'ID-' + self.root[index].attrib['id'] + '-' + 'R'
        else:
            name = 'ID-' + self.root[index].attrib['id'] + '-' + 'O'
        return name

    def AnnotationDots(self, index):
        if self.root[index][-1][-1].tag == 'pointlist':
            tplist = self.root[index][-1][-1]
        elif self.root[index][-1][-1].tag == 'specialtype' and self.root[
                index][-1][-3].tag == 'pointlist':
            tplist = self.root[index][-1][-3]
        else:
            return np.array([])
        Plist1 = []
        for i in range(tplist.__len__()):
            Plist1.append(
                self.ConvertXY(int(tplist[i][0].text), int(tplist[i][1].text)))
        return np.array(Plist1)

    def LocateROI(self):
        ROIlist = []
        for index in range(self.root.__len__()):
            if self.root[index][0].text == 'roi' or self.root[index][
                    0].text == 'ROI':
                ROIlist.append([index, self.AnnotationDots(index)])
        return ROIlist

    def ExtractImage(self, index):
        name = self.NameAnnotation(index)
        pl_arr = self.AnnotationDots(index)
        pl_arr = np.vstack((pl_arr, pl_arr[0]))
        xi = pl_arr[:, 0].min()
        xa = pl_arr[:, 0].max()
        yi = pl_arr[:, 1].min()
        ya = pl_arr[:, 1].max()
        if (xa - xi) * (ya - yi) > 1000 * 1000:
            level = 2
        else:
            level = 0
        tmpim = self.im.read_region(
            (xi - 100, yi - 100), level,
            ((xa - xi + 200) / 2**level, (ya - yi + 200) / 2**level))
        fig, ax = plt.subplots()
        ax.imshow(tmpim)
        ax.axis('image')
        ax.axis('off')
        ax.plot((pl_arr[:, 0] - xi + 100.0) / 2**level,
                (pl_arr[:, 1] - yi + 100.0) / 2**level,
                'y-',
                linewidth=3)
        #plt.savefig(name,dpi=fig.dpi )
        self.SaveFigureAsImage(name,
                               fig=fig,
                               orig_size=(np.array(tmpim).shape[0],
                                          np.array(tmpim).shape[1]))
        plt.close(fig)
        return name

    def ExtractandUpload(self, index):
        #ROIlist = LocateROI()
        #if self.root[index][0].text == 'roi' or self.root[index][0].text == 'ROI' :
        name = self.ExtractImage(index)
        self.Upload(name)

    def ExtractandUploadAll(self):
        #ROIlist = LocateROI()
        print 'uploading started'
        for index in range(self.root.__len__()):
            #if self.root[index][0].text == 'roi' or self.root[index][0].text == 'ROI' :
            #continue
            name = self.ExtractImage(index)
            self.Upload(name)
            print index + 'Uploaded'

    def ExtractandUpload_bak(self):
        for index in range(self.root.__len__()):
            #for index in range(2):
            name = self.NameAnnotation(index)
            pl_arr = self.AnnotationDots(index)

            xi = pl_arr[:, 0].min()
            xa = pl_arr[:, 0].max()
            yi = pl_arr[:, 1].min()
            ya = pl_arr[:, 1].max()
            tmpim = self.im.read_region((xi - 100, yi - 100), 0,
                                        (xa - xi + 200, ya - yi + 200))

            fig, ax = plt.subplots()
            ax.imshow(tmpim)
            ax.axis('image')
            ax.axis('off')
            ax.plot(pl_arr[:, 0] - xi + 100,
                    pl_arr[:, 1] - yi + 100,
                    'y-',
                    linewidth=3)
            #plt.savefig(name,dpi=fig.dpi )
            self.SaveFigureAsImage(name,
                                   fig=fig,
                                   orig_size=(np.array(tmpim).shape[0],
                                              np.array(tmpim).shape[1]))
            plt.close(fig)
            del (pl_arr)
            del (tmpim)
            self.Upload(name)

        self.Logout()

    def SaveFigureAsImage(self, fileName, fig=None, **kwargs):
        ''' Save a Matplotlib figure as an image without borders or frames.
           Args:
                fileName (str): String that ends in .png etc.
     
                fig (Matplotlib figure instance): figure you want to save as the image
            Keyword Args:
                orig_size (tuple): width, height of the original image used to maintain 
                aspect ratio.
        '''
        fig_size = fig.get_size_inches()
        w, h = fig_size[0], fig_size[1]
        fig.patch.set_alpha(0)
        if kwargs.has_key('orig_size'):  # Aspect ratio scaling if required
            w, h = kwargs['orig_size']
            w2, h2 = fig_size[0], fig_size[1]
            fig.set_size_inches([(w2 / w) * w, (w2 / w) * h])
            fig.set_dpi((w2 / w) * fig.get_dpi())
        a = fig.gca()
        a.set_frame_on(False)
        a.set_xticks([])
        a.set_yticks([])
        plt.axis('off')
        plt.xlim(0, h)
        plt.ylim(w, 0)
        fig.savefig(fileName,
                    transparent=True,
                    bbox_inches='tight',
                    pad_inches=0)
Пример #2
0
class HistUpload():
    """
    finame : category name 
    """
    def __init__(self, webparent=u'LYMPH_NODE_METASTASES_V2 / '):
        self.mysite = Piwigo(url='http://qmul.piwigo.com/')
        self.mysite.login(username="******", password="******")
        self.webfdlist = self.mysite.plan
        self.webparent = webparent  # u'LYMPH_NODE_METASTASES_V2 / '  ## " " space is necessary

    def __del__(self):
        self.mysite.logout()

    def Upload(self, image_path, subfolder=None, name=None, comment=None):
        """
        if multi-layer subfolder : 'Test / Test_v1 / Test_v2'
        """
        if subfolder is not None:
            if self.webfdlist.has_key(self.webparent + subfolder) == False:
                self.mysite.mkdir(self.webparent + subfolder)

        fdpath = self.webparent + subfolder
        try:
            if name is not None:
                self.mysite.upload(image_path,
                                   fdpath,
                                   name=name,
                                   comment=comment)
            else:
                self.mysite.upload(image_path, fdpath, comment=comment)
        except Exception as e:
            print e
            if name is not None:
                self.mysite.upload(image_path,
                                   fdpath,
                                   name=name,
                                   comment=comment)
            else:
                self.mysite.upload(image_path, fdpath, comment=comment)

        os.remove(image_path)

    def Check_exist(self, image_path, subfolder=None, name=None, comment=None):
        fdpath = self.webparent + subfolder
        tname = image_path.split('/')[-1].split(
            '.')[0] if name is None else name
        if self.webfdlist.has_key(fdpath):
            #int(webimlist['paging']['count'])/500
            #--todo
            webimlist = self.mysite.pwg.categories.getImages(
                cat_id=self.mysite.plan[fdpath], per_page=1000)
            for webim in webimlist['images']:
                #existID.append([int(webim['name'].split('-')[1]),webim['id']])
                if webim['name'] == tname:
                    return webim['id']
        return False

    def Delete(self, image_path, subfolder=None, name=None, comment=None):
        tid = Check_exist(image_path, subfolder, name, comment)
        self.mysite.pwg.images.delete(image_id=tid,
                                      pwg_token=test_histo.mysite.token)

    def Logout(self):
        self.mysite.logout()
Пример #3
0
class BasicTestCase(unittest.TestCase):
    """
        Class for Basic Test for piwigotools
    """
    def setUp(self):
        self.url = "http://mygallery.piwigo.com/"
        self.usertest = 'USERTEST'
        self.passwordtest = 'xxxxxx'
        self.piwigo = Piwigo(self.url)

    def test_basic(self):
        self.assertTrue(self.piwigo.pwg.getVersion())

    def test_checkLogin(self):
        self.assertTrue(self.piwigo.login(self.usertest, self.passwordtest))
        self.assertTrue(self.piwigo.logout())
        self.assertRaises(LoginException, self.piwigo.mkdir)
        self.assertRaises(LoginException, self.piwigo.makedirs)
        self.assertRaises(LoginException, self.piwigo.upload)

    def test_createCategory(self):
        self.piwigo.login(self.usertest, self.passwordtest)
        self.assertTrue(self.piwigo.mkdir('level'))
        self.assertTrue(self.piwigo.mkdir('level / sublevel'))
        self.assertTrue(self.piwigo.makedirs('level2 / sublevel2'))
        self.piwigo.removedirs('level2')
        self.piwigo.removedirs('level')
        self.piwigo.logout()

    def test_checkpath(self):
        self.piwigo.login(self.usertest, self.passwordtest)
        self.piwigo.mkdir('level')
        self.assertTrue(self.piwigo.iscategory('level'))
        self.assertTrue(self.piwigo.iscategory('level /'))
        self.piwigo.removedirs('level')
        self.piwigo.logout()

    def test_removeCategory(self):
        self.piwigo.login(self.usertest, self.passwordtest)
        self.piwigo.makedirs('level2 / sublevel2')
        self.assertTrue(self.piwigo.removedirs('level2'))
        self.assertFalse(self.piwigo.iscategory('level2'))
        self.piwigo.logout()

    def test_uploadImage(self):
        self.piwigo.login(self.usertest, self.passwordtest)
        self.piwigo.mkdir('level')
        img = os.path.join(os.path.dirname(os.path.abspath(__file__)),
                           'samplepiwigotools.jpg')
        id = self.piwigo.upload(image=img, path="level")
        self.assertTrue(id)
        self.assertTrue(self.piwigo.isimage('level / samplepiwigotools.jpg'))
        self.piwigo.pwg.images.delete(image_id=id, pwg_token=self.piwigo.token)
        self.piwigo.removedirs('level')
        self.piwigo.logout()

    def test_removeImage(self):
        self.piwigo.login(self.usertest, self.passwordtest)
        self.piwigo.mkdir('level')
        img = os.path.join(os.path.dirname(os.path.abspath(__file__)),
                           'samplepiwigotools.jpg')
        id = self.piwigo.upload(image=img, path="level")
        self.assertTrue(self.piwigo.remove('level / samplepiwigotools.jpg'))
        self.assertFalse(self.piwigo.isimage('level / samplepiwigotools.jpg'))
        self.piwigo.removedirs('level')
        self.piwigo.logout()

    def test_sublevel(self):
        self.piwigo.login(self.usertest, self.passwordtest)
        self.piwigo.makedirs('level2 / sublevel2')
        self.assertTrue(len(self.piwigo.sublevels('level2')))
        self.piwigo.removedirs('level2')
        self.piwigo.logout()

    def test_downloadImage(self):
        self.piwigo.login(self.usertest, self.passwordtest)
        self.piwigo.mkdir('level')
        img = os.path.join(os.path.dirname(os.path.abspath(__file__)),
                           'samplepiwigotools.jpg')
        id = self.piwigo.upload(image=img, path="level")
        imgdst = os.path.join(os.path.dirname(os.path.abspath(__file__)),
                              'download.jpg')
        self.assertTrue(
            self.piwigo.download("level / samplepiwigotools.jpg", imgdst))
        os.remove(imgdst)
        self.piwigo.remove('level / samplepiwigotools.jpg')
        self.piwigo.removedirs('level')
        self.piwigo.logout()
Пример #4
0
class BasicTestCase(unittest.TestCase):
    """
        Class for Basic Test for piwigotools
    """
    def setUp(self):
        self.url = "http://mygallery.piwigo.com/"
        self.usertest = 'USERTEST'
        self.passwordtest = 'xxxxxx'
        self.piwigo = Piwigo(self.url)

    def test_basic(self):
        self.assertTrue(self.piwigo.pwg.getVersion())
    
    def test_checkLogin(self):
        self.assertTrue(self.piwigo.login(self.usertest, self.passwordtest))
        self.assertTrue(self.piwigo.logout())
        self.assertRaises(LoginException, self.piwigo.mkdir)
        self.assertRaises(LoginException, self.piwigo.makedirs)
        self.assertRaises(LoginException, self.piwigo.upload)

    def test_createCategory(self):
        self.piwigo.login(self.usertest, self.passwordtest)
        self.assertTrue(self.piwigo.mkdir('level'))
        self.assertTrue(self.piwigo.mkdir('level / sublevel'))
        self.assertTrue(self.piwigo.makedirs('level2 / sublevel2'))
        self.piwigo.removedirs('level2')
        self.piwigo.removedirs('level')
        self.piwigo.logout()

    def test_checkpath(self):
        self.piwigo.login(self.usertest, self.passwordtest)
        self.piwigo.mkdir('level')
        self.assertTrue(self.piwigo.iscategory('level'))
        self.assertTrue(self.piwigo.iscategory('level /'))
        self.piwigo.removedirs('level')
        self.piwigo.logout()

    def test_removeCategory(self):
        self.piwigo.login(self.usertest, self.passwordtest)
        self.piwigo.makedirs('level2 / sublevel2')
        self.assertTrue(self.piwigo.removedirs('level2'))
        self.assertFalse(self.piwigo.iscategory('level2'))
        self.piwigo.logout()

    def test_uploadImage(self):
        self.piwigo.login(self.usertest, self.passwordtest)
        self.piwigo.mkdir('level')
        img = os.path.join(os.path.dirname(os.path.abspath(__file__)),'samplepiwigotools.jpg')
        id = self.piwigo.upload(image=img, path="level")
        self.assertTrue(id)
        self.assertTrue(self.piwigo.isimage('level / samplepiwigotools.jpg'))
        self.piwigo.pwg.images.delete(image_id=id, pwg_token=self.piwigo.token)
        self.piwigo.removedirs('level')
        self.piwigo.logout()

    def test_removeImage(self):
        self.piwigo.login(self.usertest, self.passwordtest)
        self.piwigo.mkdir('level')
        img = os.path.join(os.path.dirname(os.path.abspath(__file__)),'samplepiwigotools.jpg')
        id = self.piwigo.upload(image=img, path="level")
        self.assertTrue(self.piwigo.remove('level / samplepiwigotools.jpg'))
        self.assertFalse(self.piwigo.isimage('level / samplepiwigotools.jpg'))
        self.piwigo.removedirs('level')
        self.piwigo.logout()

    def test_sublevel(self):
        self.piwigo.login(self.usertest, self.passwordtest)
        self.piwigo.makedirs('level2 / sublevel2')
        self.assertTrue(len(self.piwigo.sublevels('level2')))
        self.piwigo.removedirs('level2')
        self.piwigo.logout()

    def test_downloadImage(self):
        self.piwigo.login(self.usertest, self.passwordtest)
        self.piwigo.mkdir('level')
        img = os.path.join(os.path.dirname(os.path.abspath(__file__)),'samplepiwigotools.jpg')
        id = self.piwigo.upload(image=img, path="level")
        imgdst = os.path.join(os.path.dirname(os.path.abspath(__file__)),'download.jpg')
        self.assertTrue(self.piwigo.download("level / samplepiwigotools.jpg",imgdst))
        os.remove(imgdst)
        self.piwigo.remove('level / samplepiwigotools.jpg')
        self.piwigo.removedirs('level')
        self.piwigo.logout()
Пример #5
0
class HistUpload():
    def __init__(self,hist):
        self.mysite = Piwigo(url='http://qmul.piwigo.com/')
        self.mysite.login(username="******", password="******")       
        self.webfdlist = self.mysite.plan     
        self.webparent = u'CRLM_V2 / '  ## " " space is necessary
        self.hist = hist
        self.finame = hist.finame
        if self.webfdlist.has_key(self.webparent+self.finame) == False:
            self.mysite.mkdir(self.webparent+self.finame)
            
    def __del__(self):
        self.mysite.logout()
        
    def Upload(self,imgname):
        if imgname == None:
            pass
        else:
            fdpath = self.webparent+self.finame+u' / '+imgname[-1].upper()
            self.webfdlist = self.mysite.plan
            if self.webfdlist.has_key(fdpath) == False:
                self.mysite.mkdir(fdpath)
            try:
                self.mysite.upload(tfprefix+imgname+'.png',fdpath)     
            except Exception as e:
                print imgname
                print e
                self.mysite.upload(tfprefix+imgname+'.png',fdpath)
            
            os.remove(tfprefix+imgname+'.png')
    
    def ExistID(self):
        existID = []
        for cat in Abr_list:
            fdpath =  self.webparent+self.finame+u' / '+cat
            if self.webfdlist.has_key(fdpath):
                webimlist = self.mysite.pwg.categories.getImages(cat_id=self.mysite.plan[fdpath],per_page = 1000)
                for webim in webimlist['images']:
                    existID.append([int(webim['name'].split('-')[1]),webim['id']])
        existID.sort()
        return existID
    def Update(self):
        existID = self.ExistID()
        webindex = 0
        localindex =0
        while(localindex<self.hist.root.__len__()):
        #for index in range(hist.root.__len__()):
            tmpid = int(self.hist.root[localindex].attrib['id'])
            if existID==[]:
                self.Upload(self.hist.ExtractImage(localindex))
                localindex +=1
                print localindex,' Uploaded'
            elif tmpid>existID[-1][0] or webindex>existID.__len__():
                self.Upload(self.hist.ExtractImage(localindex))
                localindex +=1
                print localindex,' Uploaded'
            elif tmpid>existID[webindex][0]:
                self.mysite.pwg.images.delete(image_id=existID[webindex][1],pwg_token = self.mysite.token)
                webindex +=1
                print 'ID-',webindex,'Deleted'
            elif tmpid == existID[webindex][0]:
                webindex +=1
                localindex+=1
            else:
                self.Upload(self.hist.ExtractImage(localindex))
                localindex +=1
                print localindex,' Uploaded'
                
            
    def Logout(self):
        self.mysite.logout()