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)
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()
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()
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()
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()