ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Kornia 依赖精简:`get_sample_images` 与 `ONNXLoader` 全面迁移至标准库 `urllib` 的迁移指南

Kornia 依赖精简:`get_sample_images` 与 `ONNXLoader` 全面迁移至标准库 `urllib` 的迁移指南 计算机视觉深度学习人工智能图像处理【免费下载链接】kornia 空间人工智能的几何计算机视觉库项目地址https://gitcode.com/kornia/kornia点击查看免费下载本文基于 changelog.d/migration-069.fixed.md 的迁移记录完整解析 Kornia 中kornia.io.get_sample_images与kornia.onnx.ONNXLoader.list_operators/list_models三项接口从第三方requests依赖迁移到 Python 标准库urllib的变更细节。读者将掌握这些接口的新依赖前提、变更后的异常类型对照表、以及如何在现有代码中平滑迁移避免因异常捕获类型失效导致的程序崩溃。一、变更背景requests从来不是 Kornia 的安装依赖此次变更的根源是一个长期存在的隐性问题pip install kornia的依赖列表中从未包含requests。然而Kornia 的部分功能样本图片下载、Hugging Face 模型仓库列表查询在早期实现中直接使用了requests发起 HTTP 请求。这意味着在干净环境中用户安装 Kornia 后调用这些接口会直接抛出ModuleNotFoundError: No module named requests即便能工作也往往是因为用户的运行环境中恰好通过其他库如torchvision、huggingface_hub间接安装了requests属于碰巧可用的脆弱状态。从源码检索可以看到当前仓库中 kornia/io/sample.py 与 kornia/onnx/utils.py、kornia/onnx/download.py 均已不再出现import requests取而代之的是from urllib.request import urlopen、import urllib.error、urllib.request.urlretrieve等标准库调用。同时仓库根目录的 pyproject.toml 中也不存在requests依赖声明。迁移核心结论Kornia 的这组接口现在只依赖 Python 标准库任何安装了 Python 与 Kornia 的环境都能直接使用无需再担心第三方 HTTP 库的缺失问题。二、变更一kornia.io.get_sample_images改用urllib.request.urlopen2.1 接口定位与源码实现get_sample_images是 Kornia 提供的样例图像加载工具用于从一组预定义 URL 下载并加载示例图片返回可供后续几何变换、特征提取等管线直接使用的张量。其权威实现位于 kornia/io/sample.py并对外暴露为kornia.io.get_sample_images。旧版kornia.utils.get_sample_images已标记为弃用仅作为转发壳存在见 kornia/utils/init.py并会发出DeprecationWarning提示改用kornia.io版本。2.2 函数签名与参数说明def get_sample_images( resize: Optional[Tuple[int, int]] None, paths: List[str] _IMAGE_URLS, download: bool True, cache_dir: Optional[str] None, as_list: Optional[bool] None, divisible_factor: Optional[int] None, **kwargs: Any, ) - Union[torch.Tensor, List[torch.Tensor]]:参数类型默认值说明resizeOptional[Tuple[int, int]]None目标尺寸(height, width)为None时保持原图尺寸pathsList[str]内置 6 个示例图片 URL可以是 URL也可以是本地文件路径downloadboolTrue缓存缺失时是否下载False且缓存缺失时仅记录错误日志cache_dirOptional[str].kornia_hub/images下载文件的本地缓存目录as_listOptional[bool]None为None时若指定了resize则输出堆叠张量否则输出列表divisible_factorOptional[int]None不为None时将图像缩放到该因子的最近倍数**kwargsAny—透传给kornia.geometry.resize的额外参数内置示例图片 URL 定义在 kornia/io/sample.py包括panda.jpg、simba.png、girona.png、baby_giraffe.png、persistencia_memoria.jpg、delorean.png六个资源。2.3 urllib 核心调用链变更后下载逻辑集中在模块内的download_image辅助函数kornia/io/sample.pydef download_image(url: str, save_to: str) - None: with urlopen(url, timeout30) as resp: # noqa: S310 im Image.open(io.BytesIO(resp.read())) im.save(save_to)关键点使用urllib.request.urlopen替代requests.get并显式设置timeout30防止网络悬挂响应内容经io.BytesIO包装后交给 PILImage.open解码再落盘到缓存目录只有以http开头的paths才会走下载分支本地路径直接交给kornia.io.load_image加载。get_sample_images主流程kornia/io/sample.py会先创建缓存目录逐路径判断URL 且缓存缺失且downloadTrue时下载URL 且缓存缺失且downloadFalse时记录logging.error提示随后load_image加载、按需resize/resize_to_be_divisible最后按as_list与resize的组合决定返回单个堆叠张量还是张量列表。2.4 典型用法示例import kornia # 默认下载全部示例图返回列表未指定 resize images kornia.io.get_sample_images() # 统一缩放到 (256, 256)返回形状为 (B, 3, 256, 256) 的堆叠张量 batch kornia.io.get_sample_images(resize(256, 256)) # 禁用下载仅当 .kornia_hub/images 下已有缓存时才可成功加载 cached kornia.io.get_sample_images(downloadFalse) # 自定义缓存目录 指定单个本地图片路径 img kornia.io.get_sample_images( paths[/path/to/local.png], cache_dir/tmp/kornia_cache )三、变更二ONNXLoader.list_operators与list_models改用urllib查询 Hugging Face 仓库3.1 接口定位ONNXLoader是 Kornia ONNX 工具链的模型加载器kornia/onnx/utils.py负责管理 ONNX 模型的本地缓存、从 Hugging Face 下载以及加载。其中list_operators()与list_models()分别列出 Hugging Face 仓库operators/与models/目录下的全部资源路径供用户确认可用的算子与模型清单。3.2 底层实现_fetch_repo_contents两个列表接口的核心都委托给静态方法_fetch_repo_contentskornia/onnx/utils.pystaticmethod def _fetch_repo_contents(folder: str) - list[dict[str, Any]]: url fhttps://huggingface.co/api/models/kornia/ONNX_models/tree/main/{folder} try: with urlopen(url, timeout10) as response: return json.loads(response.read()) except urllib.error.HTTPError as e: raise ValueError(fFailed to fetch repository contents: {e.code}) from e迁移后的关键变化请求从requests.get(url)变为urllib.request.urlopen(url, timeout10)同样设置了连接超时使用 Hugging Face 公开 API 的 JSON 响应无需任何额外的 HTTP 客户端依赖保持不变的异常契约当 Hugging Face 仓库列表请求返回 404HTTP 错误时仍然抛出ValueError附带错误码信息这与迁移前通过requests实现时的行为一致对应 changelog 中 A 404 from the Hugging Face listing still raises the sameValueError 的说明。列表接口本身kornia/onnx/utils.py仅从仓库内容中提取file[path]并借助pprint.pp打印classmethod def list_operators(cls) - None: repo_contents cls._fetch_repo_contents(operators) operators [file[path] for file in repo_contents] pprint.pp(operators) classmethod def list_models(cls) - None: repo_contents cls._fetch_repo_contents(models) models [file[path] for file in repo_contents] pprint.pp(models)3.3 相关的下载路径也已标准库化与ONNXLoader配套的缓存下载器CachedDownloaderkornia/onnx/download.py同样完成了迁移urllib.request.urlretrieve替代了requests的流式下载并在HTTPError时抛出携带 URL 信息的ValueError本地缓存命中时直接返回不会重复下载。ONNXLoader.load_modelkornia/onnx/utils.py支持hf://model_name、http(s)://URL 与本地路径三种来源权重文件.onnx_data也可一并缓存。四、异常类型变更对照迁移前 vs 迁移后这是本次迁移对调用方影响最大的部分。changelog 明确列出了三类失败场景的异常变化所有异常仍属于OSError的子类失败场景迁移前异常迁移后异常示例图片 URL 返回 404PIL.UnidentifiedImageErrorurllib.error.HTTPError目标主机不可达DNS / 连接失败requests.exceptions.ConnectionErrorurllib.error.URLErrorHugging Face 仓库列表list_operators/list_models返回 404ValueErrorValueError保持不变见 kornia/onnx/utils.py4.1 异常变化的原因分析404 →HTTPError迁移前下载流程会先把响应交给 PIL 解码404 页面不是合法图像从而在 PIL 解码阶段抛出UnidentifiedImageError迁移后urlopen在拿到非 2xx 响应时直接抛出urllib.error.HTTPErrorPIL 根本不会参与解码因此异常类型前移了。连接失败 →URLErrorurllib将 DNS 解析失败、连接被拒、超时等网络层错误统一封装为urllib.error.URLError其reason属性保留底层OSError细节取代了requests的ConnectionError家族。4.2 迁移建议更新异常捕获代码如果你的代码此前捕获了requests.exceptions.ConnectionError或PIL.UnidentifiedImageError迁移后这些except分支将不再命中。推荐改为捕获公共基类OSError或显式捕获新的urllib异常import urllib.error try: images kornia.io.get_sample_images() except urllib.error.HTTPError as e: print(f资源不存在HTTP {e.code}) except urllib.error.URLError as e: print(f网络错误: {e.reason})同时注意所有新异常均为OSError子类如果代码只关心下载失败而不区分具体原因直接except OSError即可覆盖全部场景这也是迁移文档建议的稳健写法。五、仓库中的验证证据测试与弃用通告5.1 测试用例tests/onnx/test_utils.py 通过mock.patch模拟_fetch_repo_contents验证list_operators/list_models的输出行为并在 tests/onnx/test_utils.py 中直接构造urllib.error.HTTPError(url, 404, ...)作为urlopen的副作用断言_fetch_repo_contents会将其转换为ValueError正是 changelog 中404 仍抛出相同ValueError的测试佐证tests/utils/test_deprecated.py 验证旧版kornia.utils.get_sample_images会发出指向kornia.io的DeprecationWarningkornia/io/sample.py 中的注释明确记录了该函数在 0.8.3 从kornia.utils.sample移除后作为公共 API 恢复的历史与本次依赖迁移一并构成了该接口的演进脉络。5.2 弃用 API 状态旧入口kornia.utils.get_sample_images仍保留但已弃用见 kornia/utils/init.py迁移后的所有新行为包括新的异常类型均以kornia.io.get_sample_images为准。建议所有新代码直接使用新入口。六、迁移清单与总结依赖层面无需任何操作。此次变更反而消除了对非声明依赖requests的隐式依赖pip install kornia之后即可直接使用上述接口。API 层面get_sample_images的签名与返回值语义不变list_operators/list_models的输出格式不变仍是打印资源路径列表。异常层面这是唯一需要修改调用方代码的点——将requests.exceptions.ConnectionError捕获改为urllib.error.URLError将PIL.UnidentifiedImageError针对 404 场景改为urllib.error.HTTPError或统一使用OSError兜底Hugging Face 列表接口的ValueError契约保持不变无需改动。综上本次迁移是一次典型的隐性依赖显性修复Kornia 通过将网络请求收敛到 Python 标准库既消除了运行时缺包风险又让异常语义更贴近 HTTP 层真实状态。对于依赖这些接口的应用程序与示例代码只需按上表的异常映射做一次小幅调整即可平滑升级。赞分享计算机视觉深度学习人工智能图像处理【免费下载链接】kornia 空间人工智能的几何计算机视觉库项目地址https://gitcode.com/kornia/kornia点击查看免费下载相关推荐Kornia 网络下载层去 requests 化get_sample_images 与 ONNXLoader 全面迁移至标准库 urllibKornia 网络下载层去 requests 化 get_sample_images 与 ONNXLoader 全面迁移至标准库 urllib 导读 本文以计算机视觉人工智能深度学习图像处理从 Next.js 迁移到 Nue面向全栈应用的 Web 标准迁移指南从 Next.js 迁移到 Nue面向全栈应用的 Web 标准迁移指南 本篇技术指南以 Nue 官方迁移文档为主体结合仓库源码与模板完整讲解如何将一套基于Web框架前端后端前端构建SSRAngular Material V9 HammerJS 迁移完全指南移除手势依赖与 GestureConfig 迁移方案Angular Material V9 HammerJS 迁移完全指南移除手势依赖与 GestureConfig 迁移方案 Angular Material前端UI组件设计系统上一篇如何快速搭建极简风格博客Fexo主题完整指南下一篇如何优雅地实现微信公众号RSS订阅wewe-rss的5步解决方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表