如何修改Replicate Point-E API请求输出为json_file格式?
Unity调用Replicate Point-E API无法获取json格式点云数据
- 需求:通过Unity调用Replicate的Point-E API,传入文本提示生成点云数据(后续要导入Unity转为模型),需要获取包含点云坐标与颜色的
json_file格式输出,不需要无用的animation格式GIF动画。 - 当前问题:已成功发起API请求,但返回结果始终只有GIF格式。尝试在初始请求和后续回调请求中设置
output和output_type请求头为json_file,无效果。 - 排查情况:查阅Replicate官方HTTP文档,未找到修改输出格式的相关说明;文档提到响应可包含多个输出,但等待后仍仅收到一个输出;Replicate网站的API界面显示
output_type默认为animation,但无法通过网站设置满足批量/动态调用需求,需通过API参数修改。 - 已尝试联系Replicate官方两次,未收到回复。
以下是使用的Unity调用脚本:
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Networking; public class Prompt { public string prompt; } public class PostResponse { public string completed_at; public string created_at; public string error; public string id; public Prompt input; public string logs; public string metrics; public Output[] output; public string started_at; public string status; public string version; } public class Output { public string output; } public class PointEResponse { public string status; public string[] output; } public class ReplicateAPI : MonoBehaviour { private string API_ENDPOINT = "https://api.replicate.com/v1/predictions"; private string REPLICATE_API_TOKEN = "r8_DhOE6C7LuA7edPvLh7Io0ukwbmXCLEY450vc3"; private void Start() { StartCoroutine(Predict()); } IEnumerator Predict() { string requestData = "{\"version\": \"1a4da7adf0bc84cd786c1df41c02db3097d899f5c159f5fd5814a11117bdf02b\", \"input\": {\"prompt\": \"big funny colourful sofa\"}}"; UnityWebRequest request = UnityWebRequest.Put(API_ENDPOINT, requestData); request.method = "POST"; request.SetRequestHeader("Authorization", "Token " + REPLICATE_API_TOKEN); request.SetRequestHeader("Content-Type", "application/json"); request.SetRequestHeader("output", "json_file"); yield return request.SendWebRequest(); if (request.result == UnityWebRequest.Result.ConnectionError || request.result == UnityWebRequest.Result.ProtocolError) { Debug.LogError("Error " + request.responseCode + ": " + request.error); } else { Debug.Log(request.downloadHandler.text); PostResponse response = JsonUtility.FromJson<PostResponse>(request.downloadHandler.text); StartCoroutine(GetResult(response.id)); } } IEnumerator GetResult(string id) { yield return new WaitForSeconds(5); UnityWebRequest request = UnityWebRequest.Get(API_ENDPOINT + "/" + id); request.SetRequestHeader("Authorization", "Token " + REPLICATE_API_TOKEN); request.SetRequestHeader("Content-Type", "application/json"); request.SetRequestHeader("output", "json_file"); PointEResponse pointEResponse = new PointEResponse(); yield return request.SendWebRequest(); if (request.result == UnityWebRequest.Result.ConnectionError || request.result == UnityWebRequest.Result.ProtocolError) { Debug.LogError("Error " + request.responseCode + ": " + request.error); yield break; } else { pointEResponse = JsonUtility.FromJson<PointEResponse>(request.downloadHandler.text); Debug.Log(request.downloadHandler.text); } if (pointEResponse.status != "succeeded" || pointEResponse.output.Length == 0) StartCoroutine(GetResult(id)); else { print("We got something! " + pointEResponse.output[0]); } } }
注:脚本补充了缺失的
PointEResponse类定义,修正了请求数据末尾多余的闭合括号。
内容的提问来源于stack exchange,提问作者Mashimaro7
相关产品推荐
相关产品推荐

