python庫安裝與使用示例詳解
yield關(guān)鍵字
yield關(guān)鍵字:定義生成器函數(shù)。
生成器函數(shù):允許在迭代過程中逐步生成值,而不是一次性返回所有值。
yield語句會暫停函數(shù)的執(zhí)行,并返回一個值給調(diào)用者。下一次調(diào)用生成器的__next()__方法,函數(shù)會從暫停的地方繼續(xù)執(zhí)行。
生成器函數(shù):節(jié)省內(nèi)存,按需求生成值,而不是一次性將所有值加載到內(nèi)存中。
openslide庫
openslide庫的安裝-linux
很多虛擬環(huán)境都需要額外裝openslide庫,所以記錄一下過程:
cd /home/liusn/00apps conda activate 環(huán)境名 pip install openslide_bin-4.0.0.5-py3-none-manylinux_2_27_x86_64.whl pip install openslide-python==1.3.1
openslide的使用
- openslide庫是一個讀取和操作顯微鏡圖像的python庫,支持.svs,.vms和.tiff等格式。
- 支持圖像金字塔格式:在不同的分辨率下訪問圖像數(shù)據(jù)。
- 可以從原始圖像中提取特定區(qū)域,不需要加載整個圖像。
- 能夠訪問圖像的元數(shù)據(jù),如放大倍數(shù)、圖像尺寸等。
import openslide # 打開顯微鏡圖像 slide = openslide.OpenSlide(wsi_path) # 獲取特定金字塔層級的圖像尺寸 # level從0開始,0表示最高分辨率 # w, h表示指定層級的圖像寬度和高度 w, h = slide.level_dimensions[level] # 獲取level層的下采樣比例 # 下采樣比例: 特定層級的像素大小與最高分辨率像素大小的比例關(guān)系 # 如果下采樣比例為(2,2), 圖像的寬和高都被縮小為原來的1/2 factor = slide.level_downsamples[level] # 從顯微鏡圖像中讀取指定區(qū)域 # location: tuple, 左上角坐標(biāo); level: 金字塔層級 # size: (w, h), 要讀取的區(qū)域大小; 返回一個PIL對象 image = slide.read_region(location, level, size)
openslide對象的常用屬性
self.level_downsamples[level]
:獲取level層的下采樣比例,相對于最高分辨率而言。self.level_dimension[level]
:level層的圖像尺寸。
cv2庫
import cv2 # 在圖像上繪制多邊形 # img: 要在其上繪制的圖像; pts: 一個包含多邊形頂點的ndarray; # color: 填充的顏色, (255)表示白色 cv2.fillPoly(img, pts, color) # 在圖像上繪制文本 # img: 要繪制文本的圖像; text: 要繪制的文本字符串 cv2.putText(img, text)
numpy庫
import numpy as np # 找到數(shù)組中滿足條件的元組索引 # condition: bool數(shù)組, 返回所有為True的行, 列索引 X_idx, Y_idx = np.where(condition) # 根據(jù)條件condition進行數(shù)組的元素選擇和替換 # condition為True時, 返回value1, 否則返回value2 inst_map = np.where(condition, value1, value2) # 將數(shù)組按行的方向堆疊起來 # tup: 一個列表/元組, 返回一個新數(shù)組(總行數(shù), 列數(shù)) # 總行數(shù) = 所有輸入數(shù)組的行數(shù)之和 np.vstack(tup) selected_x[..., 0:1] # ...表示前面所有的維度
ASAP庫-multiresolutionimageinterface庫
處理金字塔類型的數(shù)據(jù)結(jié)構(gòu)。處理多分辨率圖像的python庫,適合醫(yī)學(xué)圖像和顯微鏡圖像的分析。支持不同分辨率的訪問與操作。
ASAP庫的安裝
安裝ASAP linux(ubuntu18.04-A6000):https://www.freesion.com/article/4489476959/
安裝ASAP linux(ubuntu22.04-4x3090)的安裝步驟:
- 在ASAP官網(wǎng)下載最新版:ASAP 2.2,適配ubuntu2204。
- 安裝ASAP的依賴包:用sudo apt-get install 命令。apt-get install是用于命令行操作的軟件包管理工具,該命令是安裝軟件包。
- 離線安裝ASAP的安裝包:dpkg -i ASAP-2.2-Ubuntu2204.deb ,手動安裝本地的deb文件。
- 看ASAP安裝的位置:dpkg -L asap 。
- 把ASAP放入PYTHONPATH,然后可以import了。
PYTHONPATH="/opt/ASAP/bin":"${PYTHONPATH}" export PYTHONPATH
ASAP庫的使用
ASAP庫是一個C++寫的軟件,所以不能讀源碼。少量的python調(diào)用文檔見:https://academic.oup.com/gigascience/article/7/6/giy065/5026175
ASAP官網(wǎng):https://github.com/computationalpathologygroup/ASAP/releases
通過python 訪問tif數(shù)據(jù):
將XML注釋數(shù)據(jù)轉(zhuǎn)換為tif圖像,假設(shè)注釋里的多邊形坐標(biāo)是基于圖像最高分辨率級別的。
示例代碼:
import multiresolutionimageinterface as mir # 創(chuàng)建圖像接口 reader = mir.MultiResolutionImageReader() # 打開和加載多分辨率圖像文件 mr_image = reader.open(path) # 獲取level 6的圖像尺寸 level=2 w, h = mr_image.getLevelDimensions(level) ds = mr_image.getLevelDownsample(level) # 從level 6獲取一個patch, patch左上角的坐標(biāo)為(0,0), 返回的tile是一個numpy對象 tile = image.getUCharPatch(0, 0, w, h, 6) # 讀取一個 300 像素寬、200 像素高的圖像塊,從level=2 的 (568, 732) XY 坐標(biāo)開始 # ds是下采樣倍數(shù), 在level=2的坐標(biāo)乘以ds, 得到level=0的坐標(biāo) tile = image.getUCharPatch(int(568 * ds), int(732 * ds), 300, 200, level) # 存儲和管理多分辨率圖像相關(guān)的注釋數(shù)據(jù) annotation_list = mir.AnnotationList() # 將注釋數(shù)據(jù)轉(zhuǎn)換以xml格式存儲 xml_repository = mir.XmlRepository(annotation_list) # 設(shè)置or更新xml文件的源路徑 xml_repository.setSource(path) # 從xml文件加載數(shù)據(jù) xml_repository.load() # 將注釋數(shù)據(jù)轉(zhuǎn)換為二值掩碼 annotation_mask = mir.AnnotationToMask() # 將提供的注釋annotation_list轉(zhuǎn)換為二值掩碼 annotation_mask.convert(annotation_list, output_path,image_dimensions, image_spacing)
concurrent.futures.ThreadPoolExecutor
管理線程池并高效地執(zhí)行多線程任務(wù),可以加快I/O密集型任務(wù)的處理速度。通過提交任務(wù)來執(zhí)行并發(fā)操作。
from concurrent.futures import ThreadPoolExecutor # 創(chuàng)建對象, max_workers指定最大線程數(shù), 如果沒有指定, python根據(jù)系統(tǒng)的線程數(shù)進行調(diào)整 executor = ThreadPoolExecutor(max_workers=3) # 使用map()提交多個任務(wù) executor.map(task, range(5)) # 關(guān)閉線程池 executor.shutdown(wait=True)
xml.etree.ElementTree庫
解析和創(chuàng)建xml文檔,用于讀取、修改和生成xml。
import xml.etree.ElementTree as ET # 從指定文件中讀取xml數(shù)據(jù), 并解析為一個樹結(jié)構(gòu) ElementTree對象 tree = ET.parse(annot_path) # 獲取根元素: xml文檔最外層的元素 root = tree.getroot()
skimage庫
import skimage # 生成多邊形的像素坐標(biāo) # x: 一維數(shù)組, 多邊形的列坐標(biāo); y: 一維數(shù)組, 多邊形的行坐標(biāo) # shape: 指定輸出坐標(biāo)的圖像形狀 # rows, cols: 多邊形內(nèi)部像素的行和列坐標(biāo) # 多邊形內(nèi)部是指,所有的多邊形都被填充好了 rows, cols = skimage.draw.polygon(x, y, shape)
PIL.Image庫 PIL.Image.Image
from PIL import Image image = Image.open(path) # 查看image的mode和channel nums print(f"Image mode: {image.mode}") print(f"Number of channels: {len(image.getbands())}") # 轉(zhuǎn)換mode mask = mask.convert("P")
detectron2庫
數(shù)據(jù)增強
- 允許同時增強多種數(shù)據(jù)類型,如圖像、邊界框、掩碼。
- 允許應(yīng)用一系列靜態(tài)聲明的增強。
- 允許添加自定義新數(shù)據(jù)類型來增強,如旋轉(zhuǎn)邊界框、視頻剪輯。
- 處理和操縱增強增強應(yīng)用的operations。
如何在編寫新的數(shù)據(jù)加載器時使用增強,如何編寫新的增強。
MaskFormerSemanticDatasetMapper類:
- 從file_name讀取image
- 將幾何變換應(yīng)用到image和annotation
- 查找合適的cropping,將其應(yīng)用于image和annotation
- 把image和annotation變成Tensors
MetadataCatalog類常見屬性
- 從file_name讀取image
- 將幾何變換應(yīng)用到image和annotation
- 查找合適的cropping,將其應(yīng)用于image和annotation
- 把image和annotation變成Tensors
faiss庫-聚類
Faiss庫的使用:
- faiss索引包括:IndexFlatL2(小規(guī)模數(shù)據(jù)集)、IndexIVFFlat(大規(guī)模數(shù)據(jù)集)、IndexHNSW(高維數(shù)據(jù))。
- 查詢相似度 D, I = index.search(features, k)。對每個樣本,查詢與其他樣本的相似度,D是距離矩陣,I是索引矩陣,返回每個樣本的前k個最近鄰。
到此這篇關(guān)于python庫-安裝與使用的文章就介紹到這了,更多相關(guān)python庫安裝與使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實現(xiàn)的單向循環(huán)鏈表功能示例
這篇文章主要介紹了Python實現(xiàn)的單向循環(huán)鏈表功能,簡單描述了單向循環(huán)鏈表的概念、原理并結(jié)合實例形式分析了Python定義與使用單向循環(huán)鏈表的相關(guān)操作技巧,需要的朋友可以參考下2017-11-11python實現(xiàn)人機對戰(zhàn)的井字棋游戲
這篇文章主要為大家詳細(xì)介紹了python實現(xiàn)人機對戰(zhàn)的井字棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-04-04Python調(diào)用ctypes使用C函數(shù)printf的方法
這篇文章主要介紹了Python調(diào)用ctypes使用C函數(shù)printf,需要的朋友可以參考下2017-08-08python實現(xiàn)顏色空間轉(zhuǎn)換程序(Tkinter)
這篇文章主要介紹了基于Tkinter利用python實現(xiàn)顏色空間轉(zhuǎn)換程序,感興趣的小伙伴們可以參考一下2015-12-12解決pycharm 遠(yuǎn)程調(diào)試 上傳 helpers 卡住的問題
今天小編就為大家分享一篇解決pycharm 遠(yuǎn)程調(diào)試 上傳 helpers 卡住的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-06-06