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

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


一、本节目标

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

二、Requests 模块简介与特点

  • 简介

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

    • 安装命令:

      powershell 复制代码
      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 安装与基本示例

python 复制代码
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
python 复制代码
pip install apig-sdk
4. 编写调用代码
python 复制代码
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

    python 复制代码
    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 操作

  • 基本函数

    python 复制代码
    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 示例

    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. 环境准备

    bash 复制代码
    pip install PyQt5 requests apig-sdk
  2. 界面设计

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

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

    python 复制代码
    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 做妥善管理,不要硬编码在脚本中
相关推荐
阿川20157 小时前
云智融合普惠大模型AI,政务服务重构数智化路径
人工智能·华为云·政务·deepseek
华为云PaaS服务小智2 天前
《重塑AI应用架构》系列: Serverless与MCP融合创新,构建AI应用全新智能中枢
人工智能·架构·serverless·华为云
Hy行者勇哥2 天前
如何理解华为云的鉴权机制
物联网·华为云
Hy行者勇哥3 天前
从华为云物联网设备影子抽取数据显示开发过程演练
java·struts·华为云
Hy行者勇哥5 天前
用华为云应用程序抽取华为云物联网的数据有哪几种方式?
物联网·华为云
Hy行者勇哥5 天前
华为云获取IAM用户Token的方式及适用分析
华为云
Hy行者勇哥5 天前
形象理解华为云物联网iotDA开发流程
物联网·华为云
laimaxgg10 天前
Docker华为云创建私人镜像仓库
运维·服务器·docker·容器·华为云
終不似少年遊*21 天前
操作系统、虚拟化技术与云原生及云原生AI简述
docker·ai·云原生·容器·华为云·云计算·k8s