常用的python库-安装与使用

news2025/3/20 3:32:46

常用的python库函数

  • yield关键字
  • openslide库
    • openslide库的安装-linux
    • openslide的使用
    • openslide对象的常用属性
  • cv2库
  • numpy库
  • ASAP库-multiresolutionimageinterface库
    • ASAP库的安装
    • ASAP库的使用
  • concurrent.futures.ThreadPoolExecutor
  • xml.etree.ElementTree库
  • skimage库
  • PIL.Image库 PIL.Image.Image
  • detectron2库
    • 数据增强
    • MaskFormerSemanticDatasetMapper类:
    • MetadataCatalog类常见属性

yield关键字

yield关键字:定义生成器函数。
生成器函数:允许在迭代过程中逐步生成值,而不是一次性返回所有值。
yield语句会暂停函数的执行,并返回一个值给调用者。下一次调用生成器的__next()__方法,函数会从暂停的地方继续执行。
生成器函数:节省内存,按需求生成值,而不是一次性将所有值加载到内存中。

openslide库

openslide库的安装-linux

很多虚拟环境都需要额外装openslide库,所以记录一下过程:

cd /home/liusn/00apps
conda activate 环境名
pip install openslide_bin-4.0.0.5-py3-none-manylinux_2_27_x86_64.whl
pip install openslide-python==1.3.1

在这里插入图片描述

openslide的使用

  1. openslide库是一个读取和操作显微镜图像的python库,支持.svs,.vms和.tiff等格式。
  2. 支持图像金字塔格式:在不同的分辨率下访问图像数据。
  3. 可以从原始图像中提取特定区域,不需要加载整个图像。
  4. 能够访问图像的元数据,如放大倍数、图像尺寸等。
import openslide  
# 打开显微镜图像 
slide = openslide.OpenSlide(wsi_path)  

# 获取特定金字塔层级的图像尺寸 
# level从0开始,0表示最高分辨率 
# w, h表示指定层级的图像宽度和高度 
w, h = slide.level_dimensions[level]  

# 获取level层的下采样比例 
# 下采样比例: 特定层级的像素大小与最高分辨率像素大小的比例关系 
# 如果下采样比例为(2,2), 图像的宽和高都被缩小为原来的1/2 
factor = slide.level_downsamples[level]  
# 从显微镜图像中读取指定区域 
# location: tuple, 左上角坐标; level: 金字塔层级 
# size: (w, h), 要读取的区域大小; 返回一个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  
# 找到数组中满足条件的元组索引 
# condition: bool数组, 返回所有为True的行, 列索引 
X_idx, Y_idx = np.where(condition)  

# 根据条件condition进行数组的元素选择和替换 
# condition为True时, 返回value1, 否则返回value2 inst_map = np.where(condition, value1, value2)  
# 将数组按行的方向堆叠起来 
# tup: 一个列表/元组, 返回一个新数组(总行数, 列数) 
# 总行数 = 所有输入数组的行数之和 np.vstack(tup)  
selected_x[..., 0:1] # ...表示前面所有的维度

ASAP库-multiresolutionimageinterface库

处理金字塔类型的数据结构。处理多分辨率图像的python库,适合医学图像和显微镜图像的分析。支持不同分辨率的访问与操作。

ASAP库的安装

安装ASAP linux(ubuntu18.04-A6000):https://www.freesion.com/article/4489476959/
安装ASAP linux(ubuntu22.04-4x3090)的安装步骤:

  • 在ASAP官网下载最新版: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调用文档见:https://academic.oup.com/gigascience/article/7/6/giy065/5026175

ASAP官网:https://github.com/computationalpathologygroup/ASAP/releases

通过python 访问tif数据:
在这里插入图片描述
将XML注释数据转换为tif图像,假设注释里的多边形坐标是基于图像最高分辨率级别的。
在这里插入图片描述
示例代码:

import multiresolutionimageinterface as mir  

# 创建图像接口 
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左上角的坐标为(0,0), 返回的tile是一个numpy对象 
tile = image.getUCharPatch(0, 0, w, h, 6) 

# 读取一个 300 像素宽、200 像素高的图像块,从level=2 的 (568, 732) XY 坐标开始 
# ds是下采样倍数, 在level=2的坐标乘以ds, 得到level=0的坐标 
tile = image.getUCharPatch(int(568 * ds), int(732 * ds), 300, 200, level)  
# 存储和管理多分辨率图像相关的注释数据 
annotation_list = mir.AnnotationList() 
# 将注释数据转换以xml格式存储 
xml_repository = mir.XmlRepository(annotation_list) 
# 设置or更新xml文件的源路径 xml_repository.setSource(path) 
# 从xml文件加载数据 xml_repository.load() 
# 将注释数据转换为二值掩码 
annotation_mask = mir.AnnotationToMask() 
# 将提供的注释annotation_list转换为二值掩码 
annotation_mask.convert(annotation_list, output_path,image_dimensions, image_spacing)

concurrent.futures.ThreadPoolExecutor

管理线程池并高效地执行多线程任务,可以加快I/O密集型任务的处理速度。通过提交任务来执行并发操作。

from concurrent.futures import ThreadPoolExecutor  

# 创建对象, max_workers指定最大线程数, 如果没有指定, python根据系统的线程数进行调整 
executor = ThreadPoolExecutor(max_workers=3)  

# 使用map()提交多个任务 
executor.map(task, range(5))  

# 关闭线程池 
executor.shutdown(wait=True)

xml.etree.ElementTree库

解析和创建xml文档,用于读取、修改和生成xml。

import xml.etree.ElementTree as ET  

# 从指定文件中读取xml数据, 并解析为一个树结构 ElementTree对象 
tree = ET.parse(annot_path)  

# 获取根元素: xml文档最外层的元素 
root = tree.getroot()

skimage库

import skimage  

# 生成多边形的像素坐标 
# x: 一维数组, 多边形的列坐标; y: 一维数组, 多边形的行坐标 
# shape: 指定输出坐标的图像形状 
# rows, cols: 多边形内部像素的行和列坐标 
# 多边形内部是指,所有的多边形都被填充好了 
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())}")  
# 转换mode mask = mask.convert("P")

detectron2库

数据增强

  1. 允许同时增强多种数据类型,如图像、边界框、掩码。
  2. 允许应用一系列静态声明的增强。
  3. 允许添加自定义新数据类型来增强,如旋转边界框、视频剪辑。
  4. 处理和操纵增强增强应用的operations。
    如何在编写新的数据加载器时使用增强,如何编写新的增强。

MaskFormerSemanticDatasetMapper类:

  1. 从file_name读取image
  2. 将几何变换应用到image和annotation
  3. 查找合适的cropping,将其应用于image和annotation
  4. 把image和annotation变成Tensors

MetadataCatalog类常见属性

  1. stuff_classes:每个stuff类别的名称list,用于语义分割和全景分割。
  2. stuff_colors:每个stuff类别的预定义颜色(0-255),用于可视化。如果没有指定,则使用随机颜色。list[tuple(r, g, b)].
  3. ignore_label:int,gt中带有该类别标签的像素将在评估里被忽略,用于语义和全景分割任务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2296272.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

对接DeepSeek

其实,整个对接过程很简单,就四步,获取key,找到接口文档,接口测试,代码对接。 获取 KEY https://platform.deepseek.com/transactions 直接付款就是了(现在官网暂停充值2025年2月7日&#xff0…

ChatGPT提问技巧:行业热门应用提示词案例-文案写作

ChatGPT 作为强大的 AI 语言模型,已经成为文案写作的得力助手。但要让它写出真正符合你需求的文案,关键在于如何与它“沟通”,也就是如何设计提示词(Prompt)。以下是一些实用的提示词案例,帮助你解锁 ChatG…

分享如何通过Mq、Redis、XxlJob实现算法任务的异步解耦调度

一、背景 1.1 产品简介 基于大模型塔斯,整合传统的多项能力(NLP、OCR、CV等),构建以场景为中心的新型智能文档平台。通过文档审阅,实现结构化、半结构化和非结构化文档的信息获取、处理及审核,同时基于大…

8.flask+websocket

http是短连接,无状态的。 websocket是长连接,有状态的。 flask中使用websocket from flask import Flask, request import asyncio import json import time import websockets from threading import Thread from urllib.parse import urlparse, pars…

【大模型实战】使用Ollama+Chatbox实现本地Deepseek R1模型搭建

下载安装Ollama Ollama官方链接:https://ollama.com/,打开链接后就可以看到大大的下载按钮,如下图: 我选择用Win的安装。将Ollama的安装包下载到本地,如果下载慢可以复制链接到迅雷里面,提高下载速度,如下图: 双击之后,就可以开始安装了,如下图: 默认安装到C盘,…

VMware 虚拟机 ubuntu 20.04 扩容工作硬盘

一、关闭虚拟机 关闭虚拟机参考下图,在vmware 调整磁盘容量 二、借助工具fdisk testubuntu ~ $ df -h Filesystem Size Used Avail Use% Mounted on udev 1.9G 0 1.9G 0% /dev tmpfs 388M 3.1M 385M 1% /run /dev/sda5 …

【漫话机器学习系列】082.岭回归(或脊回归)中的α值(alpha in ridge regression)

岭回归(Ridge Regression)中的 α 值 岭回归(Ridge Regression)是一种 带有 L2​ 正则化 的线性回归方法,用于处理多重共线性(Multicollinearity)问题,提高模型的泛化能力。其中&am…

9 Pydantic复杂数据结构的处理

在构建现代 Web 应用时,我们往往需要处理复杂的输入和输出数据结构。例如,响应数据可能包含嵌套字典、列表、元组,甚至是多个嵌套对象。Pydantic 是一个强大的数据验证和序列化库,可以帮助我们轻松地处理这些复杂的数据结构&#…

Day62_补20250210_图论part6_108冗余连接|109.冗余连接II

Day62_20250210_图论part6_108冗余连接|109.冗余连接II 108冗余连接 【把题意转化为并查集问题】 题目 有一个图,它是一棵树,他是拥有 n 个节点(节点编号1到n)和 n - 1 条边的连通无环无向图(其实就是一个线形图&am…

kafka消费端之消费者协调器和组协调器

文章目录 概述回顾历史老版本获取消费者变更老版本存在的问题 消费者协调器和组协调器新版如何解决老版本问题再均衡过程**第一阶段CFIND COORDINATOR****第二阶段(JOINGROUP)**选举消费组的lcader选举分区分配策略 第三阶段(SYNC GROUP&…

IDEA升级出现问题Failed to prepare an update Temp directory inside installation

IDEA升级出现问题"Failed to prepare an update Temp directory inside installation…" 问题来源: 之前修改了IDEA的默认配置文件路径,然后升级新版本时就无法升级,提示"Failed to prepare an update Temp directory insid…

十款开源的论坛建站工具

以下是十款开源的论坛建站工具,它们各具特色,能够满足不同用户的需求: Discuz!(Crossday Discuz! Board) 特点:基础架构采用web编程组合PHPMySQL,用户可以在不需要任何编程的基础上,…

vue学习6

1. 智慧商城 1. 路由设计配置 单个页面&#xff0c;独立展示的&#xff0c;是一级路由 2.二级路由配置 规则&组件配置导航链接配置路由出口 <template><div id"app"><!--二级路由出口--><router-view></router-view><van-…

线程池以及日志、线程总结

一、线程池以及日志 1、基础线程池写法 主线程在main函数中构建一个线程池&#xff0c;初始化(Init)后开始工作(Start) 此时线程池中每个线程都已经工作起来了&#xff0c;只是任务队列中任务为空&#xff0c;所有线程处于休眠状态(通过线程同步中的条件变量实现&#xff0c…

Vue 响应式渲染 - 过滤应用

Vue 渐进式JavaScript 框架 基于Vue2的学习笔记 - Vue响应式渲染综合 - 过滤应用 目录 过滤应用 引入vue Vue设置 设置页面元素 模糊查询过滤实现 函数表达式实现 总结 过滤应用 综合响应式渲染做一个输入框&#xff0c;用来实现&#xff1b;搜索输入框关键词符合列表。…

【ThreeJS Basics 1-3】Hello ThreeJS,实现第一个场景

文章目录 环境创建一个项目安装依赖基础 Web 页面概念解释编写代码运行项目 环境 我的环境是 node version 22 创建一个项目 首先&#xff0c;新建一个空的文件夹&#xff0c;然后 npm init -y , 此时会快速生成好默认的 package.json 安装依赖 在新建的项目下用 npm 安装依…

深入理解动态代理

为什么需要动态代理 对于代码的增强逻辑我们是清楚具体实现的,一种方式是增强逻辑作为委托类,被其他业务类调用, 这样会有很多重复代码,而且,当需要根据动态参数来决定增强逻辑时,重复代码会更多,逻辑会更不清晰 二,也是动态代理产生的原始需求,解决类爆照问题, 所以…

Cherry Studio之DeepSeek联网/本地,建属于自己的AI助理!

上一篇文章&#xff0c;讲了DeepSeek-R1部署到本地的方法。这一篇文章&#xff0c;我们让DeepSeek再一次升级&#xff0c;通过图形化界面来交互&#xff0c;从而变成我们的AI助理&#xff0c;让DeepSeek R1发挥最大实力&#xff01; 首选需要借助硅基流动的API接口&#xff0c…

IGBT的两级关断

IGBT&#xff08;绝缘栅双极型晶体管&#xff09;的两级关断&#xff08;Two-stage turn-off&#xff09;是一种优化关断过程的方法&#xff0c;主要用于减少关断时的电压过冲和dv/dt&#xff08;电压变化率&#xff09;过高的问题&#xff0c;特别是在大功率应用中&#xff08…

【STM32】ADC

本次实现的是ADC实现数字信号与模拟信号的转化&#xff0c;数字信号时不连续的&#xff0c;模拟信号是连续的。 1.ADC转化的原理 模拟-数字转换技术使用的是逐次逼近法&#xff0c;使用二分比较的方法来确定电压值 当单片机对应的参考电压为3.3v时&#xff0c;0~ 3.3v(模拟信号…