Forge Reality Capture:指定的照片场景 ID 不存在

Posted

技术标签:

【中文标题】Forge Reality Capture:指定的照片场景 ID 不存在【英文标题】:Forge Reality Capture: Specified photoscene ID doesn't exist 【发布时间】:2020-08-11 02:26:40 【问题描述】:

我正在使用 python 将一些 .jpg 图像上传到我创建的照片场景,但我不断收到此错误。

'Usage': '0.48637413978577', 'Resource': '/file', 'Error': 'code': '19', 'msg': "Specified Photoscene ID doesn't exist in the database"

这是我的代码,photoscene 创建效果很好,我获取了photoscene id 并将其复制为字符串以将其存储为“sceneId”


formData = 'Content-Type': 'multipart/form-data', 'Authorization': 'Bearer eyXXXX'

sceneId = "l5w----etc-etc------qQ"

# This bit is so I can use tkinter to choose my images
application_window = tk.Tk()
application_window.withdraw()
answer = filedialog.askopenfilenames(parent=application_window,
                                    initialdir=os.getcwd(),
                                    title="Please select one or more files:",
                                    filetypes=[("Image files", ".jpg .jpeg")])
if answer != "":
    files = 
        "photosceneid":(None, sceneId),
        "type":(None, "image")
    
    n=-1
    for a in answer:
        n = n+1
        a = a.replace("/", "//")
        files["file[x]".format(x=n)] = (a, open(a,"rb"))
    # This bit adds keys and values to the dictionary as "file[0]": ("path//to//image//", open("path//to//image//","rb"))

    r = requests.post("https://developer.api.autodesk.com/photo-to-3d/v1/file",headers=formData,files=files).json()
    print(r)

我在关注官方api reference的截图

curl -v 'https://developer.api.autodesk.com/photo-to-3d/v1/file' \
  -X 'POST' \
  -H 'Authorization: Bearer eyjhbGCIOIjIuzI1NiISimtpZCI6...' \
  -F "photosceneid=hcYJcrnHUsNSPII9glhVe8lRF6lFXs4NHzGqJ3zdWMU" \
  -F "type=image" \
  -F "file[0]=@c:/sample_data/_MG_9026.jpg" \
  -F "file[1]=@c:/sample_data/_MG_9027.jpg"

感谢您的阅读和帮助!

【问题讨论】:

创建场景时响应中的输出是什么?有任何错误信息吗? 只有200回复​​:'Usage': '0.63232898712158', 'Resource': '/photoscene', 'Photoscene': 'photosceneid': 'XX'我今天尝试删除photoscene并没有问题,甚至尝试删除它两次以防万一但photoscene不存在(因为我刚刚删除了它),所以它正在工作,也许需要一些时间来处理照片场景? 同样 GET 进度返回一个成功的响应 'Usage': '0.57368898391724', 'Resource': '/photoscene/XX/progress', 'Photoscene': 'photosceneid': 'XX', 'progressmsg': 'Created', 'progress': '0' 也许是上传端点的问题我最怀疑我的文件字典,我认为是格式导致了问题。更改无效参数的参数会给出相同的错误响应(没有具有该 ID 的 PS) 如果有目的,这是我在创建场景时发送的数据data = 'scenename': 'FirstTest', 'callback': 'email://my@email.com', 'format': 'rcm', 'scenetype': 'object', 'version': '2.0' 【参考方案1】:

问题是您将 photosceneid 数据作为文件发送。 在来自官方 api 的 cURL 片段中

curl -v 'https://developer.api.autodesk.com/photo-to-3d/v1/file' \
-X 'POST' \
-H 'Authorization: Bearer eyjhbGCIOIjIuzI1NiISimtpZCI6...' \
-F "photosceneid=hcYJcrnHUsNSPII9glhVe8lRF6lFXs4NHzGqJ3zdWMU" \
...

-F 标志表示形式(在 cURL 的情况下),这不是文件的必要条件。

因此,您必须将 photosceneidtype 作为数据而不是文件发送:

from requests_toolbelt import MultipartEncoder
import requests

url = "https://developer.api.autodesk.com/photo-to-3d/v1/file"

payload = MultipartEncoder(
   fields='photosceneid': MY_PHOTOSCENE,
           'type': 'image',
           'file[0]': ("DSC_5428.JPG", open('./DSC_5428.JPG', 'rb'), 'image/jpg')
        
  )


headers = 
 'Content-Type': payload.content_type,
 'Authorization': TOKEN



req = requests.request("POST",
                      url,
                      headers=headers,
                      data=payload
                     )

【讨论】:

您的代码更有意义,但仍然无法正常工作。同样的错误。我尝试更改内容类型并使文件既是列表又是字典 @G-BC 我修复了代码。事实证明,内容类型必须是“multipart/form-data”,而不是“x-www-form-urlencoded”。对于这类请求(发布大文件),“请求”文档建议使用“请求工具带”。我已经修复并测试了代码,现在应该可以工作了。 确实做到了!我正在使用 multipart/form-data 但不知道 requests-toolbelt,这只是任何阅读的人的旁注,将文件附加到字段 dict 中,您必须在使用 MultipartEncoder 之前定义它。【参考方案2】:

为了记录,我们的后端存在问题,会导致重复的场景 ID ...

我们的工程部门正在积极解决这个问题 - 如果您再次遇到类似问题,请创建另一个场景作为临时解决方案...

您在上传文件的请求中使用的场景 ID 不正确......事实上,这是来自我们的示例 here

如果您按照文档 here 创建场景,您应该能够在响应中获得场景 ID,如下所示:


  "Photoscene": 
    "photosceneid": "hcYJcrnHUsNSPII9glhVe8lRF6lFXs4NHzGqJ3zdWMU"
  

请务必在您以后的请求中引用此内容....

【讨论】:

我怕剪辑会引起混乱,我只是添加它作为参考。我每次都成功获得一个新的 PS Id,我能够获得进度和删除,但无法上传文件。我可以使其余端点工作,但那个

以上是关于Forge Reality Capture:指定的照片场景 ID 不存在的主要内容,如果未能解决你的问题,请参考以下文章

请求 Autodesk Forge、Reality Capture API 下载链接的错误消息

无法将图像文件添加到新的照片场景 [autodesk-forge] API Reality Capture

Autodesk Forge Reality Capture API 是不是支持全景照片重建点云

有关在 Autodesk Forge Reality Capture 中使用测量文件、地面控制点和检查点的问题

有没有办法在 Autodesk Forge Reality Capture API 上检查每次重建 (photoscene_id) 消耗的云积分?

场景删除后 Reality Capture API 结果可用性