LiuJuan20260223Zimage Gradio API封装Python requests调用LiuJuan生成服务示例1. 引言如果你已经通过Xinference部署了LiuJuan20260223Zimage文生图模型并且熟悉了在Gradio Web界面里点点鼠标就能生成图片的操作那么恭喜你你已经迈出了第一步。但作为一名开发者你可能会想能不能不打开浏览器直接用代码来调用这个服务能不能把它集成到我自己的应用里实现批量生成或者自动化流程答案是肯定的。Gradio不仅提供了一个友好的Web界面它还暴露了一个标准的HTTP API接口。这意味着我们可以用任何支持HTTP请求的工具比如Python的requests库来与它交互。今天我们就来聊聊如何绕过Web界面直接通过Python代码来调用你的LiuJuan图片生成服务实现更灵活、更自动化的应用集成。2. 准备工作理解Gradio的API接口在开始写代码之前我们需要先搞清楚Gradio服务对外提供了哪些接口。当你启动一个Gradio应用时它默认会开启两个关键的端点Web界面地址通常是http://你的服务器地址:7860/。这是我们手动操作的地方。API接口地址通常是http://你的服务器地址:7860/api/predict/。这是我们用代码进行通信的入口。我们的目标就是向这个/api/predict/接口发送一个结构化的请求然后接收它返回的图片数据。这个请求需要包含模型生成图片所需的所有参数比如我们最关心的“提示词”。3. 核心步骤使用Python requests调用API假设你的LiuJuan模型服务已经成功运行在http://localhost:7860。下面我们分步拆解如何用Python的requests库来完成调用。3.1 安装必要的库首先确保你的Python环境里安装了requests库。如果没有可以通过pip安装pip install requests3.2 构建请求数据Gradio的API期望接收一个JSON格式的请求体。这个JSON里是一个列表列表中的每个元素对应你Gradio界面里一个输入组件的内容。对于我们的文生图模型通常第一个输入框就是“提示词”。因此我们的请求数据看起来应该是这样的import json # 这是我们要发送给API的数据 payload { data: [LiuJuan] # 注意这里是一个列表里面放提示词字符串 }“data”字段的值是一个列表[“LiuJuan”]。这里的“LiuJuan”就是触发模型生成特定风格图片的提示词。你可以根据需要替换成任何描述性文字。3.3 发送POST请求并获取响应接下来我们使用requests库向API地址发送一个POST请求并将上面的数据以JSON格式传递过去。import requests # 定义API的地址 api_url http://localhost:7860/api/predict/ # 设置请求头告诉服务器我们发送的是JSON数据 headers { Content-Type: application/json } # 发送POST请求 response requests.post(api_url, headersheaders, datajson.dumps(payload)) # 检查请求是否成功 if response.status_code 200: print(API调用成功) result response.json() # 处理结果... else: print(f请求失败状态码{response.status_code}) print(response.text)3.4 解析和处理返回的图片如果请求成功状态码为200response.json()会返回一个字典。对于Gradio的图像输出返回的数据通常是一个列表里面包含图片的Base64编码字符串或者一个包含文件路径等信息的字典。一个典型的、包含Base64图片数据的响应结构可能如下{ data: [ data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg ], is_generating: false, duration: 3.1415926, average_duration: 3.1415926 }我们需要从“data”列表中提取出Base64字符串去掉前面的data:image/png;base64,头然后将其解码并保存为图片文件。import base64 import re if response.status_code 200: result response.json() # 假设返回的数据格式如上所述 image_data result.get(data, [])[0] # 使用正则表达式提取纯Base64部分 base64_str re.sub(r^data:image/.;base64,, , image_data) # 将Base64字符串解码为二进制图片数据 image_bytes base64.b64decode(base64_str) # 将图片数据保存到文件 with open(generated_liujuan.png, wb) as f: f.write(image_bytes) print(图片已成功保存为 generated_liujuan.png)3.5 完整代码示例将以上步骤整合我们得到一个完整的、可运行的脚本import requests import json import base64 import re def generate_liujuan_image(prompt, api_urlhttp://localhost:7860/api/predict/, output_pathoutput.png): 调用Gradio API生成LiuJuan风格图片 参数: prompt (str): 生成图片的提示词。 api_url (str): Gradio API的地址。 output_path (str): 生成图片的保存路径。 # 1. 构建请求数据 payload { data: [prompt] } headers { Content-Type: application/json } try: # 2. 发送请求 print(f正在生成图片提示词: {prompt}...) response requests.post(api_url, headersheaders, datajson.dumps(payload), timeout60) # 设置超时时间 # 3. 检查响应 if response.status_code 200: result response.json() # 4. 处理返回的图片数据 # 注意实际响应结构可能因Gradio版本或自定义而略有不同这里是一个通用处理逻辑 if data in result and len(result[data]) 0: image_data result[data][0] # 提取Base64编码 if isinstance(image_data, str) and image_data.startswith(data:image): base64_str re.sub(r^data:image/.;base64,, , image_data) elif isinstance(image_data, dict) and path in image_data: # 如果返回的是文件路径本地部署时可能这里需要另一种处理方式 # 例如直接读取文件或通过其他方式获取 print(f图片已生成在服务器路径: {image_data[path]}) # 此处简化处理实际可能需要从服务器获取文件 return {status: success, message: f图片生成成功路径: {image_data[path]}} else: # 如果返回的就是纯Base64字符串不带前缀 base64_str image_data # 解码并保存 image_bytes base64.b64decode(base64_str) with open(output_path, wb) as f: f.write(image_bytes) print(f✅ 图片已成功保存至: {output_path}) return {status: success, path: output_path} else: print(❌ API返回的数据格式不符合预期。) print(f完整响应: {result}) return {status: error, message: Unexpected API response format.} else: print(f❌ API请求失败状态码: {response.status_code}) print(f错误信息: {response.text}) return {status: error, message: fAPI request failed with status {response.status_code}} except requests.exceptions.Timeout: print(❌ 请求超时模型生成可能耗时较长或服务未响应。) return {status: error, message: Request timeout.} except requests.exceptions.ConnectionError: print(f❌ 无法连接到API服务请检查地址 {api_url} 是否正确以及服务是否已启动。) return {status: error, message: Connection error.} except Exception as e: print(f❌ 发生未知错误: {e}) return {status: error, message: str(e)} # 使用示例 if __name__ __main__: # 替换成你的提示词 my_prompt LiuJuan # 调用函数生成图片 result generate_liujuan_image(promptmy_prompt, output_pathmy_liujuan_image.png)4. 进阶技巧与问题排查掌握了基础调用后我们可以看看如何用得更好以及遇到问题怎么办。4.1 传递更多生成参数基础的文生图模型通常不止有提示词一个参数。在Gradio的Web界面里你可能还能调整采样步数、图片尺寸等。通过API调用时如何传递这些参数呢关键在于你的请求数据列表“data”中的元素顺序必须严格对应Gradio界面中所有输入组件的顺序。假设你的界面有三个输入框提示词、负向提示词、采样步数那么请求数据就应该是payload { data: [LiuJuan, low quality, blurry, 20] # 提示词负向提示词步数 }你需要查看Gradio应用的源码或界面确定所有输入组件的顺序才能构建正确的请求。4.2 处理不同的响应格式正如前面代码中提到的Gradio返回的图片数据格式可能有几种情况带data:image/...;base64,前缀的完整Base64字符串。一个包含“path”键的字典指向服务器上的临时文件。纯Base64字符串。我们的示例代码尝试处理了前两种情况。最可靠的方法是先调用一次API打印出完整的response.json()结果观察其结构然后调整你的解析逻辑。4.3 常见问题排查连接失败检查api_url地址和端口号是否正确确认Xinference和Gradio服务是否正在运行可以运行cat /root/workspace/xinference.log查看日志。404错误确认API路径是否为/api/predict/。有些Gradio应用可能自定义了API路由。返回数据为空或格式错误检查请求的“data”列表格式是否正确元素顺序是否与界面输入组件匹配。使用print(response.json())查看原始返回调整解析代码。生成速度慢首次生成或复杂提示词可能需要较长时间。在requests.post()中设置合理的timeout参数如60秒以上。5. 总结通过将Gradio的Web API与Python的requests库结合我们成功实现了对LiuJuan20260223Zimage文生图服务的程序化调用。这为我们打开了自动化集成的大门你可以批量生成写个循环用不同的提示词批量生成一系列图片。集成到应用将图片生成功能作为后端服务为你的Web应用或桌面应用提供能力。构建工作流将图片生成作为数据处理流水线中的一个环节例如先分析文本再根据分析结果生成配图。核心步骤就是三步构建正确的JSON请求体、向/api/predict/发送POST请求、解析返回的Base64图片数据并保存。虽然过程中可能会遇到响应格式或参数顺序的小挑战但只要通过打印调试信息仔细观察这些问题都能迎刃而解。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。