识别

和计算全部是在 Maya 外面做的,Maya 只是被动“接收结果”。整个流程分三步:

第 1 步:本地 Python 识别图的点位(不在 Maya 里)
我用 Python + numpy 写了一个提取脚本,在你那张截图(Calib_Ref.png)里:

  • 按颜色抓取绿色选中线框的像素(绿色通道高亮 + 明显高于红/蓝)
  • 自动排除左下角的坐标轴指示器(它也是绿色的,会干扰)
  • 对线框的 9 条边做 RANSAC 直线拟合,求出 7 个角顶点的像素坐标

第 2 步:本地 Python 解算相机
因为已知物体是 1×1×1 的 pCube,7 个顶点的 3D 世界坐标是确定的,图像上的对应点也拿到了,就用 Levenberg-Marquardt 优化 7 个未知数(焦距 fx + 相机旋转 + 相机位置),让“3D 顶点投影到图像”和“识别出的点位”误差最小。解出来 RMS 约 0.95 像素。

第 3 步:Maya 只负责接收
把解算出的位置/旋转/焦距通过 commandPort 写进 Maya 建好的相机里,再加背景图。

所以关键点是:Maya 本身没有图像识别能力,它脚本里能做的是读深度、投影计算这类 3D 数学。真正“看图找点位”这一步是在本地完成的。

以后如果你换一张图(比如你最初那个机器人参考图),流程也是一样的:先识别图中已知物体/特征的点位 → 解算 → 写入 Maya。机器人那张图难点在于它不是 1×1×1 的已知尺寸物体,需要你告诉脚本哪些点对应哪个 3D 坐标(或者用两张图)。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐