基于华为云 ModelArts 的在线服务应用开发(Requests 模块)

news2025/4/24 5:41:32

基于华为云 ModelArts 的在线服务应用开发(Requests 模块)


一、本节目标

  1. 了解并掌握 Requests 模块的特点与用法
  2. 学会通过 Python+Requests 访问华为云 ModelArts 在线推理服务
  3. 熟悉 JSON 模块在 Python 中的数据序列化与反序列化
  4. 掌握 Python 文件 I/O 的基本操作
  5. 演示一个基于华为云 ModelArts + PyQt 的花卉分类桌面应用案例

二、Requests 模块简介与特点

  • 简介

    • requests 是 Python 第三方库,用于发送 HTTP/HTTPS 请求

    • 安装命令:

      pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple
      
  • 主要特点

    1. 简单易用:人性化 API,几行代码即可完成请求
    2. 支持 HTTPS:自动验证 SSL 证书
    3. 支持 Cookies:自动管理会话状态
    4. 支持文件上传files 参数上传本地文件
    5. 支持会话管理requests.Session() 跨请求保持连接和 Cookie

三、HTTP 协议基础

  • 什么是 HTTP?
    • 超文本传输协议(HTTP)是基于 TCP 的请求–响应协议
    • 典型事务流程:
      1. 客户端(浏览器或脚本)与服务器建立 TCP 连接
      2. 客户端发送 HTTP 请求
      3. 服务器处理请求并返回响应
      4. 连接关闭或复用
  • TCP/IP 七层模型(应用层:HTTP)
  • 常见状态码
    • 2xx 成功:200 OK, 201 Created
    • 3xx 重定向:301 Moved Permanently
    • 4xx 客户端错误:400 Bad Request, 401 Unauthorized, 404 Not Found
    • 5xx 服务器错误:500 Internal Server Error

四、Requests 安装与基本示例

import requests

# 发送 GET 请求
resp = requests.get('https://api.example.com/data')
print(resp.status_code)   # HTTP 状态码
print(resp.text)          # 响应内容(字符串)

# 发送 POST 请求并上传文件
files = {'file': open('test.jpg', 'rb')}
resp = requests.post('https://api.example.com/upload', files=files)
print(resp.status_code, resp.text)
  • 返回属性
    • resp.status_code:整数状态码
    • resp.text:响应体(Unicode 文本)
    • resp.json():直接将响应解析为 Python 对象(如果是 JSON)
    • resp.headers:响应头字典

五、Requests 支持的 HTTP 方法

方法用途
GET获取资源
POST创建资源
PUT更新资源
DELETE删除资源
HEAD获取头部信息
OPTIONS获取支持的 HTTP 方法

六、基于华为云 ModelArts 的在线服务访问

1. 获取 AK/SK
  • 在华为云控制台 → 我的凭证 → 访问密钥,记录 Access Key (AK) 和 Secret Key (SK)
2. 获取在线服务信息
  • 在 ModelArts 控制台 → 推理服务 → 找到已部署服务,复制 推理地址 URL
3. 下载 Python SDK
pip install apig-sdk
4. 编写调用代码
from apig_sdk import signer
import requests, json

# 1) 构造请求签名
request = signer.HttpRequest('POST', url, {'x-sdk-content-sha256': 'UNSIGNED-PAYLOAD'})
sig = signer.Signer()
sig.Key = AK; sig.Secret = SK
sig.Sign(request)

# 2) 发送请求
files = {'images': open('flower.jpg','rb')}
resp = requests.request(
    request.method,
    f"{request.scheme}://{request.host}{request.uri}",
    headers=request.headers,
    files=files
)

# 3) 解析结果
print(resp.status_code)           
result = resp.json()              
print(json.dumps(result, indent=2))
  • 参考文档:华为云推理服务 API 指南

七、JSON 模块简介与使用

  • 什么是 JSON?

    • 一种轻量级的数据交换格式,文本可读性高
  • Python 内置模块 json

    import json
    
    # 序列化:Python → JSON 字符串
    s = json.dumps({'class': 'flower', 'score': 0.92}, ensure_ascii=False)
    
    # 反序列化:JSON 字符串 → Python
    obj = json.loads('{"class":"rose","score":0.87}')
    

八、Python 的文件 I/O 操作

  • 基本函数

    f = open('data.txt', 'r', encoding='utf-8')
    text = f.read()       # 读取全部
    f.close()
    
    with open('data.txt','w',encoding='utf-8') as f:
        f.write('Hello, ModelArts!\n')  # 自动 close
    
  • 常用模式

    模式含义
    'r'只读(默认)
    'w'写入(覆盖)
    'a'追加
    'rb'二进制读
    'wb'二进制写

九、Base64 编码简介

  • 用途

    1. 减少 HTTP 请求数,将小图片直接嵌入 HTML/CSS/JS
    2. 简单“加密”传输(非安全加密)
    3. 适合小图标、背景图
  • Python 示例

    import base64
    
    # 编码
    data = open('flower.jpg','rb').read()
    b64 = base64.b64encode(data).decode('ascii')
    
    # 解码
    raw = base64.b64decode(b64)
    open('out.jpg','wb').write(raw)
    

十、基于华为云 + PyQt 实现花卉分类桌面应用案例

  1. 环境准备

    pip install PyQt5 requests apig-sdk
    
  2. 界面设计

    • 一个按钮:选择本地图片
    • 一个 QLabel:显示加载的图片
    • 一个 QTextEdit:展示分类结果
  3. 工作流程

    1. 点击“打开图片” → 弹出文件对话框 → 读取并显示图片
    2. 将图片通过 Requests 调用 ModelArts 接口 → 解析 JSON
    3. 在结果框中按置信度从高到低显示:类别 + 得分
  4. 核心代码示例

    from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QLabel, QFileDialog, QTextEdit
    from PyQt5.QtGui import QPixmap
    import requests, json
    from apig_sdk import signer
    
    class FlowerApp(QMainWindow):
        def __init__(self):
            super().__init__()
            self.setWindowTitle('花卉分类 Demo')
            self.resize(600,400)
            # … 初始化按钮、图片区、结果区 …
    
        def open_image(self):
            path, _ = QFileDialog.getOpenFileName(self, '选择图片', '', 'Images (*.png *.jpg)')
            pix = QPixmap(path).scaled(300,300)
            self.image_label.setPixmap(pix)
            self.call_inference(path)
    
        def call_inference(self, img_path):
            # 同上节:签名 + requests + resp.json()
            result = resp.json()
            # 排序并显示
            text = '\n'.join(f"{cls}: {score:.2f}" for cls,score in zip(result['detection_classes'], result['detection_scores']))
            self.result_edit.setPlainText(text)
    
    if __name__ == '__main__':
        app = QApplication([])
        win = FlowerApp()
        win.show()
        app.exec_()
    
  5. 运行python flower_app.py,即可体验离线 GUI + 在线推理相结合的完整流程。


温馨提示

  • 调试时可在命令行打印 resp.textresp.status_code,快速定位签名或网络错误
  • PyQt 界面可按需扩充:增加进度条、错误提示、模型选择等
  • 在生产环境中,注意对 AK/SK 做妥善管理,不要硬编码在脚本中

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

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

相关文章

AI-Sphere-Butler之如何使用Llama factory LoRA微调Qwen2-1.5B/3B专属管家大模型

环境: AI-Sphere-Butler WSL2 英伟达4070ti 12G Win10 Ubuntu22.04 Qwen2.-1.5B/3B Llama factory llama.cpp 问题描述: AI-Sphere-Butler之如何使用Llama factory LoRA微调Qwen2-1.5B/3B管家大模型 解决方案: 一、准备数据集我这…

协同推荐算法实现的智能商品推荐系统 - [基于springboot +vue]

🛍️ 智能商品推荐系统 - 基于springboot vue 🚀 项目亮点 欢迎来到未来的购物体验!我们的智能商品推荐系统就像您的私人购物顾问,它能读懂您的心思,了解您的喜好,为您精心挑选最适合的商品。想象一下&am…

Jenkins的地位和作用

所处位置 Jenkins 是一款开源的自动化服务器,广泛应用于软件开发和测试流程中,主要用于实现持续集成(CI)和持续部署(CD)。它在开发和测试中的位置和作用可以从以下几个方面来理解: 1. 在开发和测…

【集合】底层原理实现及各集合之间的区别

文章目录 集合2.1 介绍一下集合2.2 集合遍历的方法2.3 线程安全的集合2.4 数组和集合的区别2.5 ArrayList和LinkedList的区别2.6 ArrayList底层原理2.7 LinkedList底层原理2.8 CopyOnWriteArrayList底层原理2.9 HashSet底层原理2.10 HashMap底层原理2.11 HashTable底层原理2.12…

srp batch

参考网址: Unity MaterialPropertyBlock 正确用法(解决无法合批等问题)_unity_define_instanced_prop的变量无法srp合批-CSDN博客 URP | 基础CG和HLSL区别 - 哔哩哔哩 (bilibili.com) 【直播回放】Unity 批处理/GPU Instancing/SRP Batche…

【Linux运维涉及的基础命令与排查方法大全】

文章目录 前言1、计算机网络常用端口2、Kali Linux中常用的命令3、Kali Linux工具的介绍4、Ubuntu没有网络连接解决方法5、获取路由6、数据库端口 前言 以下介绍计算机常见的端口已经对应的网络协议,Linux中常用命令,以及平时运维中使用的排查网络故障的…

Webview+Python:用HTML打造跨平台桌面应用的创新方案

目录 一、技术原理与优势分析 1.1 架构原理 1.2 核心优势 二、开发环境搭建 2.1 安装依赖 2.2 验证安装 三、核心功能开发 3.1 基础窗口管理 3.2 HTML↔Python通信 JavaScript调用Python Python调用JavaScript 四、高级功能实现 4.1 系统级集成 4.2 多窗口管理 五…

克服储能领域的数据处理瓶颈及AI拓展

对于储能研究人员来说,日常工作中经常围绕着一项核心但有时令人沮丧的任务:处理实验数据。从电池循环仪的嗡嗡声到包含电压和电流读数的大量电子表格,研究人员的大量时间都花在了提取有意义的见解上。长期以来,该领域一直受到对专…

包含物体obj与相机camera的 代数几何代码解释

反余弦函数的值域在 [0, pi] 斜体样式 cam_pose self._cameras[hand_realsense].camera.get_model_matrix() # cam2world# 物体到相机的向量 obj_tcp_vec cam_pose[:3, 3] - self.obj_pose.p dist np.linalg.norm(obj_tcp_vec) # 物体位姿的旋转矩阵 obj_rot_mat self.ob…

mybatis实现增删改查1

文章目录 19.MyBatis查询单行数据MapperScan 结果映射配置核心文件Results自定义映射到实体的关系 多行数据查询-完整过程插入数据配置mybatis 控制台日志 更新数据删除数据小结通过id复用结果映射模板xml处理结果映射 19.MyBatis 数据库访问 MyBatis,MyBatis-Plus…

Git,本地上传项目到github

一、Git的安装和下载 https://git-scm.com/ 进入官网,选择合适的版本下载 二、Github仓库创建 点击右上角New新建一个即可 三、本地项目上传 1、进入 要上传的项目目录,右键,选择Git Bash Here,进入终端Git 2、初始化临时仓库…

基于flask+vue框架的灯饰安装维修系统u49cf(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表 项目功能:用户,工单人员,服务项目,订单记录,服务记录,评价记录 开题报告内容 基于 FlaskVue 框架的灯饰安装维修系统开题报告 一、选题背景与意义 (一)选题背景 随着城市化进程的加速与居民生活品质的显著提升&#xf…

【算法】BFS-解决FloodFill问题

目录 FloodFill问题 图像渲染 岛屿数量 岛屿的最大面积 被围绕的区域 FloodFill问题 FloodFill就是洪水灌溉的意思,假设有下面的一块田地,负数代表是凹地,正数代表是凸地,数字的大小表示凹或者凸的程度。现在下一场大雨&…

GIS开发笔记(10)基于osgearth实现二三维地图的一键指北功能

一、实现效果 二、实现原理 获取视图及地图操作器,通过地图操作器来重新设置视点,以俯仰角 (0.0)和偏航角 (-90.0)来设置。 osgEarth::Util::Viewpoint(…) 这里创建了一个新的 Viewpoint 对象,表示一个特定的视角。构造函数的参数是: 第一个参数:是视角名称。 后面的 6 个…

window上 elasticsearch v9.0 与 jmeter5.6.3版本 冲突,造成es 启动失败

[2025-04-22T11:00:22,508][ERROR][o.e.b.Elasticsearch ] [AIRUY] fatal exception while booting Elasticsearchjava.nio.file.NoSuchFileException: D:\Program Files\apache-jmeter-5.6.3\lib\logkit-2.0.jar 解决方案: 降低 es安装版本 ,选择…

【C++初阶】第15课—模版进阶

文章目录 1. 模版参数2. 模版的特化2.1 概念2.2 函数模版特化2.3 类模板特化2.3.1 全特化2.3.2 偏特化 3. 模版的分离和编译4. 总结 1. 模版参数 模版参数分为类型形参和非类型参数之前我们写过的大量代码,都是用模版定义类的参数类型,跟在class和typena…

黑阈免激活版:智能管理后台,优化手机性能

在使用安卓手机的过程中,许多用户会遇到手机卡顿、电池续航不足等问题。这些问题通常是由于后台运行的应用程序过多,占用大量系统资源导致的。今天,我们要介绍的 黑阈免激活版,就是这样一款由南京简域网络科技工作室开发的手机辅助…

Mujoco robosuite 机器人模型

import ctypes import os# 获取当前脚本所在的目录 script_dir os.path.dirname(os.path.abspath(__file__))# 构建库文件的相对路径 lib_relative_path os.path.join(dynamic_models, UR5e, Jb.so)# 拼接成完整的路径 lib_path os.path.join(script_dir, lib_relative_path…

K8s:概念、特点、核心组件与简单应用

一、引言 在当今云计算和容器技术蓬勃发展的时代,Kubernetes(简称 K8s)已成为容器编排领域的事实标准。它为管理容器化应用提供了高效、可靠的解决方案,极大地简化了应用的部署、扩展和运维过程。无论是小型初创公司还是大型企业…

STM32的定时器输出PWM时,死区时间(DTR)如何计算

在 STM32F429(以及所有 STM32F4 “高级定时器”)中,死区时间由 TIMx_BDTR 寄存器的 8 位 “Dead‑Time Generator” 字段 DTG[7:0] 来配置。其计算分三步: 计算死区时钟周期 tDTS TIM1 时钟源为 APB2 定时器时钟(PCL…