基于华为云 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 请求

    • 安装命令:

      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 signerclass 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.mzph.cn/news/902881.shtml

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

相关文章

python pymysql如何保证数据库更新成功

python pymysql如何保证数据库更新成功 在使用Python的PyMySQL库与MySQL数据库交互时,确保数据库更新操作成功执行,可以通过以下几种方式: 使用execute()和commit() 当执行一个更新(UPDATE)、插入(INSERT)或删除(DELETE)操作时,你需要调用execute()方法来执行SQL语句…

【数据可视化-30】Netflix电影和电视节目数据集可视化分析

🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…

【深度强化学习 DRL 快速实践】逆向强化学习算法 (IRL)

Inverse Reinforcement Learning (IRL) 详解 什么是 Inverse Reinforcement Learning? 在传统的强化学习 (Reinforcement Learning, RL) 中,奖励函数是已知的,智能体的任务是学习一个策略来最大化奖励 而在逆向强化学习 (Inverse Reinforc…

入侵检测系统(IDS)与入侵防御系统(IPS):功能对比与部署实践

入侵检测系统(IDS)与入侵防御系统(IPS):功能对比与部署实践 在网络安全防御体系中,入侵检测系统(Intrusion Detection System, IDS)与入侵防御系统(Intrusion Preventio…

P12167 [蓝桥杯 2025 省 C/Python A] 倒水

P12167 [蓝桥杯 2025 省 C/Python A] 倒水 题目描述 小蓝有 n n n 个装了水的瓶子,从左到右摆放,第 i i i 个瓶子里装有 a i a_i ai​ 单位的水。为了美观,小蓝将水循环染成了 k k k 种颜色,也就是说,第 i i i …

短视频矩阵系统可视化剪辑功能开发,支持OEM

在短视频营销与内容创作竞争日益激烈的当下,矩阵系统中的可视化剪辑功能成为提升内容产出效率与质量的关键模块。它以直观的操作界面和强大的编辑能力,帮助创作者快速将创意转化为优质视频。本文将结合实际开发经验,从需求分析、技术选型到核…

制作一款打飞机游戏22:表格导出

编辑器功能扩展 今天,我想让编辑器能够处理一个数组,这是编辑器将要编辑的东西,它只编辑数组。这些区域在后续的不同版本的编辑器中会有不同的含义,但现在我想创建一个模板,能够加载一个二维数组,并将二维…

AI数据分析的利器:解锁BI工具的无限潜力

在数字化浪潮席卷全球的今天,数据已成为企业最宝贵的资产之一。如何高效、准确地分析这些数据,挖掘其中的价值,成为企业决策的关键。AI数据分析,作为新时代的数据分析利器,正逐渐改变着企业的决策方式。而BI&#xff0…

【每天一个知识点】IPv4(互联网协议版本4)和IPv6(互联网协议版本6)

IPv4(互联网协议版本4)和IPv6(互联网协议版本6)是用于在互联网上标识和定位设备的两种主要协议。它们的主要区别在于地址空间、结构、以及一些附加功能。以下是两者的对比: 1. 地址长度 IPv4: 地址长度为32位&#xf…

numpy.random.normal与numpy.random.randn的区别与联系

先说结论: numpy.random.normal 对应的是 正态分布,numpy.random.randn 对应的是标准正态分布,所以 numpy.random.randn 是 numpy.random.normal 的一个特例。 1. numpy.random.normal 从正态(高斯)分布中抽取随机样…

基于 EFISH-SBC-RK3588 的无人机智能巡检终端方案‌

一、硬件架构设计‌ ‌核心算力平台(EFISH-SBC-RK3588)‌ ‌异构计算能力‌:搭载 8 核 ARM 架构(4Cortex-A762.4GHz 4Cortex-A551.8GHz),集成 6 TOPS NPU 与 Mali-G610 GPU,支持多传感器数据并…

软测面经(私)

测试流程 分析需求——>制定测试计划——>设计测试用例——>执行测试——>编写测试报告 黑盒测试 等价类划分、边界值分析法、猜错法、随机数法、因果图。 白盒测试 代码检查法、程序变异、静态结构分析法、静态质量度量法、符号测试法、逻辑覆盖法、域测试、…

那些年踩过的坑之Arrays.asList

一、前言 熟悉开发的兄弟都知道,在写新增和删除功能的时候,大多数时候会写成批量的,原因也很简单,批量既支持单个也支持多个对象的操作,事情也是发生在这个批量方法的调用上,下面我简单说一下这个事情。 二…

通过VIN车辆识别代码查询_精准版API,获取车辆精准参数

通过17位VIN码的精准匹配,帮助用户快速获取车辆的品牌、型号、出厂日期、排量、外观、车辆型号等详细参数。这一API广泛应用于二手车交易、车辆租赁、配件采购和车辆维修等领域,为用户提供一个高效、准确的解决方案。 代码示例 返回格式:js…

Virtuoso ADE采用Spectre仿真中出现MOS管最小长宽比满足要求依然报错的情况解决方法

在ADE仿真中错误问题如下: ERROR (CMI-2440): "xxx.scs" 46338: I2.M1: The length, width, or area of the instance does not fit the given lmax-lmin, wmax-wmin, or areamax-areamin range for any model in the I2.M3.nch_hvt group. The channel w…

LeetCode hot 100—最长有效括号

题目 给你一个只包含 ( 和 ) 的字符串,找出最长有效(格式正确且连续)括号子串的长度。 示例 示例 1: 输入:s "(()" 输出:2 解释:最长有效括号子串是 "()"示例 2&#xf…

Vue3集成sass

安装依赖 pnpm add -D sass-embedded配置全局变量 新建文件 src/styles/variables.scss配置Vite 修改 vite.config.ts variables.scss $base-color: bluevite.config.ts // https://vite.dev/config/ export default defineConfig({plugins: [vue(),],resolve: {alias: {:…

【力扣题目分享】栈专题(C++)

目录 关于栈的题目: 1. 最小栈: 思路: 实现代码(最终): 2. 栈的压入、弹出序列: 思路: 实现代码: 3. 逆波兰表达式求值: 思路: 实现代码: 深入了解…

Office 2019 (含Visio+Project)官方IOS 下载

Microsoft Office 2019 是微软公司推出的一款办公软件套装, 主要包括Word、Excel、PowerPoint、Outlook、Visio、Access、Publisher、OneDrive for Business 和Skype for Business等组件。 这些组件适用于Windows和MacOS平台,支持多种语言&#xff0c…

遥测终端机,推动灌区流量监测向数据驱动跃迁

灌区范围那么大,每一滴水怎么流都关系到粮食够不够吃,还有生态能不能平衡。过去靠人工巡查、测量,就像拿着算盘想算明白大数据,根本满足不了现在水利管理的高要求。遥测终端机一出现,就像给灌区流量监测安上了智能感知…