当前位置: 首页 > news >正文

算法模型部署后_python脚本API测试指南-记录3

API 测试指南

服务运行后,可以通过以下方式测试:

Curl:

curl -X POST -F "file=@./test_dataset/surface/surface57.png" http://<服务器IP>:9000/api/v1/predict

Python 脚本: (参考 svm_request测试.py)

import requestsurl = 'http://<服务器IP>:9000/api/v1/predict'
file_path = './test_dataset/surface/surface57.png' # 使用实际路径try:with open(file_path, 'rb') as f:files = {'file': f}response = requests.post(url, files=files)response.raise_for_status() # 检查请求是否成功print(response.json())
except FileNotFoundError:print(f"Error: File not found at {file_path}")
except requests.exceptions.RequestException as e:print(f"Error during request: {e}")

使用 Python 脚本 (通过命令行参数传递图像路径):

您还可以使用项目提供的 svm_request_dynamic.pysvm_request_simplified.py 脚本来测试 API。这些脚本允许您通过命令行参数直接指定图像文件的路径。

  1. 使用 svm_request_dynamic.py (输出详细JSON):
    此脚本会发送图像到 API 并打印完整的 JSON 响应。

    python svm_request_dynamic.py <你的图像路径>
    

    例如:

    python svm_request_dynamic.py ./test_dataset/corona/corona111.png
    

    或者使用绝对路径:

    python svm_request_dynamic.py /path/to/your/image.png
    

测试效果:
在这里插入图片描述

  1. 使用 svm_request_simplified.py (输出简化结果):
    此脚本会发送图像到 API 并仅打印预测的类别和置信度。

    python svm_request_simplified.py <你的图像路径>
    

    例如:

    python svm_request_simplified.py ./test_dataset/surface/surface57.png
    

    或者使用绝对路径:

    python svm_request_simplified.py /path/to/your/other_image.jpg
    

测试效果:
在这里插入图片描述

注意:

  • 请将 <你的图像路径> 替换为实际的图像文件路径。
  • 确保 API 服务 (svm_fastapi.py) 正在运行。
  • 如果脚本与 API 服务不在同一台机器上,请修改脚本中的 url 变量,将其中的 127.0.0.1localhost 替换为 API 服务器的实际 IP 地址。

完整代码如下:
svm_request_dynamic.py

import requests
import os
import sysurl = 'http://127.0.0.1:9000/api/v1/predict'  # 替换为实际的API地址def send_request(image_path):if not os.path.isabs(image_path):# 如果不是绝对路径,则假定它是相对于当前工作目录的路径file_path = os.path.abspath(image_path) # 获取绝对路径else:file_path = image_pathtry:with open(file_path, 'rb') as f:files = {'file': f}print(f"正在发送图像 '{file_path}' 到 {url}...")response = requests.post(url, files=files)response.raise_for_status()  # 如果请求失败 (状态码 4xx or 5xx),则抛出HTTPError异常print("请求成功,响应内容:")print(response.json())except FileNotFoundError:print(f"错误:文件未找到,请检查路径 '{file_path}' 是否正确。")except requests.exceptions.ConnectionError:print(f"错误:无法连接到服务器 {url}。请确保API服务正在运行并且地址正确。")except requests.exceptions.HTTPError as http_err:print(f"HTTP错误:{http_err} - {response.status_code}")try:print(f"服务器响应:{response.json()}")except ValueError:print(f"服务器响应 (非JSON):{response.text}")except requests.exceptions.RequestException as e:print(f"请求过程中发生错误:{e}")except Exception as e:print(f"发生未知错误:{e}")print("-"*50) # 分隔每次请求的输出if __name__ == "__main__":if len(sys.argv) < 2:print("错误:请提供图像文件的路径作为命令行参数。")print("用法: python svm_request_dynamic.py <图像路径>")sys.exit(1)image_file_path = sys.argv[1]send_request(image_file_path)

svm_request_simplified.py:

import requests
import os
import sysurl = 'http://127.0.0.1:9000/api/v1/predict'  # 替换为实际的API地址def send_request(image_path):if not os.path.isabs(image_path):# 如果不是绝对路径,则假定它是相对于当前工作目录的路径file_path = os.path.abspath(image_path) # 获取绝对路径else:file_path = image_pathtry:with open(file_path, 'rb') as f:files = {'file': f}response = requests.post(url, files=files)response.raise_for_status()  # 如果请求失败 (状态码 4xx or 5xx),则抛出HTTPError异常data = response.json()print(data.get('predicted_category'))print(data.get('predicted_probability'))except FileNotFoundError:print(f"错误:文件未找到,请检查路径 '{file_path}' 是否正确。")except requests.exceptions.ConnectionError:print(f"错误:无法连接到服务器 {url}。请确保API服务正在运行并且地址正确。")except requests.exceptions.HTTPError as http_err:print(f"HTTP错误:{http_err} - {response.status_code}")try:print(f"服务器响应:{response.json()}")except ValueError:print(f"服务器响应 (非JSON):{response.text}")except requests.exceptions.RequestException as e:print(f"请求过程中发生错误:{e}")except Exception as e:print(f"发生未知错误:{e}")if __name__ == "__main__":if len(sys.argv) < 2:print("错误:请提供图像文件的路径作为命令行参数。")print("用法: python svm_request_simplified.py <图像路径>")sys.exit(1)image_file_path = sys.argv[1]send_request(image_file_path)
http://www.xdnf.cn/news/401005.html

相关文章:

  • PyTorch实战(4)——卷积神经网络(Convolutional Neural Network, CNN)详解
  • SVN 中文路径访问报错(权限已正确分配)
  • Java项目层级介绍 java 层级 层次
  • Termius ssh连接服务器 vim打开的文件无法复制问题
  • Java中的​​策略模式​​和​​模板方法模式
  • 想实现一个基于MCP的pptx生成系统架构图【初版实现】
  • Java-Arrays工具类:基础到进阶的数组操作全面指南
  • 14B检索能力超过Google Search,阿里ZeroSearch通过RL激发LLM检索推理能力~
  • MFC listctrl修改背景颜色
  • 【文心智能体】使用文心一言来给智能体设计一段稳定调用工作流的提示词
  • 解决LangChain4j报错HTTP/1.1 header parser received no bytes
  • 精益数据分析(56/126):创业阶段的划分与精益数据分析实践
  • ElasticSearch聚合操作案例
  • Oracle adg环境下调整redo日志组以及standby日志组大小
  • CSDN博客粘贴图片失败如何解决
  • 佰力博科技与您探讨阻抗谱测量的基本原理和测量方法
  • 【言语】刷题2
  • Qt5.14.2 链接 MySQL 8.4 遇到的问题
  • 第三方软件测评中心分享:软件功能测试类型和测试工具
  • 动手学深度学习12.4.硬件-笔记练习(PyTorch)
  • # 实时英文 OCR 文字识别:从摄像头到 PyQt5 界面的实现
  • python 的 ​uv、pip​ 和 ​conda​ 对比和技术选型
  • 安卓玩机工具-----安卓机型一款很好用的数据备份恢复软件 支持云端备份
  • C#中SetProperty方法使用
  • Qt进阶开发:QTcpServer的的详解
  • 对抗进行性核上性麻痹,健康护理筑牢生活防线
  • Golang 应用的 CI/CD 与 K8S 自动化部署全流程指南
  • 深度拆解!MES如何重构生产计划与排产调度全流程?
  • 【软件工程】软件缺陷 基于组合的优化方法
  • 获取高德地图JS API的安全密钥和Key的方法