有没有办法从张量流中的图像中获取 IUV 图?
Posted
技术标签:
【中文标题】有没有办法从张量流中的图像中获取 IUV 图?【英文标题】:Is there a way to obtain IUV map from image in tensorflow? 【发布时间】:2020-10-23 21:20:24 【问题描述】:我一直在使用detectron2/densepose 生成 IUV 贴图,它帮助我从输入图像生成 UV 纹理。现在,为了部署,我需要使用 javascript 从客户端的输入图像生成 IUV 地图。我对 TensorFlow 很熟悉,但目前的密集姿势模型只能在 PyTorch 上运行,而且相互转换工具也会出错。
对问题的任何评论或解决方案都会非常有帮助。
需要 IUV 图像:
最终的UV贴图:
【问题讨论】:
【参考方案1】:首先,您需要使用dump
命令生成pkl
文件,然后我们才能生成所需的IUV图像。
在Densepose 内部使用apply_net.py
生成pkl
文件。它还有很多其他选择。您可以查看here。
python3 apply_net.py dump configs/densepose_rcnn_R_101_FPN_s1x.yaml /models/R_101_FPN_s1x.pkl /Images/frame.jpg --output output.pkl -v
在获得pkl
文件后,我们需要从中提取信息并创建您需要的 IUV 图像。
img = Image.open('/Images/frame.jpg')
img_w ,img_h = img.size
with open('output.pkl','rb') as f:
data=pickle.load(f)
i = data[0]['pred_densepose'][0].labels.cpu().numpy()
uv = data[0]['pred_densepose'][0].uv.cpu().numpy()
iuv = np.stack((uv[1,:,:], uv[0,:,:], i * 0,))
iuv = np.transpose(iuv, (1,2,0))
iuv_img = Image.fromarray(np.uint8(iuv*255),"RGB")
iuv_img.show() #It shows only the croped person
box = data[0]["pred_boxes_XYXY"][0]
box[2]=box[2]-box[0]
box[3]=box[3]-box[1]
x,y,w,h=[int(v) for v in box]
bg=np.zeros((img_h,img_w,3))
bg[y:y+h,x:x+w,:]=iuv
bg_img = Image.fromarray(np.uint8(bg*255),"RGB")
bg_img.save('output.png')
【讨论】:
以上是关于有没有办法从张量流中的图像中获取 IUV 图?的主要内容,如果未能解决你的问题,请参考以下文章