Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

跑视频demo的时候出现cv2.error: OpenCV(4.5.5) : -1 : error: (-5:Bad argument) in function 'solvePnPRansac' #140

Closed
hhhlllyyy opened this issue Jan 7, 2022 · 25 comments

Comments

@hhhlllyyy
Copy link

1641524214(1)
报错如图
请问这个问题如何解决呢?

@hhhlllyyy hhhlllyyy changed the title 跑视频demo的时候出现cv2.error: OpenCV(4.5.5) 👎 error: (-5:Bad argument) in function 'solvePnPRansac' 跑视频demo的时候出现cv2.error: OpenCV(4.5.5) : -1 : error: (-5:Bad argument) in function 'solvePnPRansac' Jan 7, 2022
@Arthur151
Copy link
Owner

可以试试opencv 4.1.2

@Arthur151
Copy link
Owner

@hhhlllyyy 我新提交了一个commit,解决了这个问题,就是一个替代方案。请把L31-35(try-except那部分)替换一下就好了。我试过没问题了。

@akk-123
Copy link

akk-123 commented Feb 24, 2022

@Arthur151 我跑视频的时候容易出现这两个问题

cv2.error: OpenCV(4.5.5) /io/opencv/modules/imgcodecs/src/loadsave.cpp:801: error: (-215:Assertion failed) !_img.empty() in function 'imwrite'
TypeError: forward() missing 1 required positional argument: 'meta_data'

但是这些视频我用其它的方法比如SPIN是可以正确跑的

@Arthur151
Copy link
Owner

麻烦把batch size设成1,看看还有没有这个bug,麻烦反馈一下测试结果,我也好知道哪里出的问题

@akk-123
Copy link

akk-123 commented Feb 24, 2022

TypeError: forward() missing 1 required positional argument: 'meta_data'

这个通过设置CUDA_VISIBLE_DEVICES可以解决,但是不清楚原因是啥

File "/data3/huzhongbing/project/HumanRecons/ROMP/romp/predict/video.py", line 27, in toframe
    frame_list = video2frame(video_file_path, frame_save_dir=video_basename+'_frames')
  File "/data3/huzhongbing/project/HumanRecons/ROMP/romp/lib/models/../utils/demo_utils.py", line 104, in video2frame
    cv2.imwrite(save_path, frame)
cv2.error: OpenCV(4.5.5) /io/opencv/modules/imgcodecs/src/loadsave.cpp:801: error: (-215:Assertion failed) !_img.empty() in function 'imwrite'

这个是看起来是opencv解析视频出现了问题,不过同样的视频我用的其它模型的代码是可以的

@Arthur151
Copy link
Owner

那我知道为啥了:

  1. 是因为多gpu进行DataParallel分配数据的时候,有的gpu没分配到。 设置CUDA_VISIBLE_DEVICES=0,让数据都放到一个gpu自然可以解决。
  2. 其他方法使用的是FFmpeg来进行视频帧抽取,考虑到有些用户不太会装这个,我就换成了OpenCV。遇到视频有坏帧的时候会出问题。我已经记录了这个bug了,在试图在下一版本解决掉。

@akk-123
Copy link

akk-123 commented Feb 24, 2022

好的,感谢回答

@akk-123
Copy link

akk-123 commented Feb 25, 2022

@Arthur151 还有两个问题想请教下

  1. 请问下make_tracking和temporal_optimization这两个分别的目的是干什么呢
  2. 远程webcam调用,好像没看到Server_port_receiver这个函数的实现

@Arthur151
Copy link
Owner

Arthur151 commented Feb 25, 2022

  1. make_tracking是将视频中每个人的运动序列提取出来,temporal_optimization是使用低通滤波器(One Euro Filter)优化提取出来的运动序列的时域平滑性。
  2. 远程webcam调用,那个功能一年前发布的,貌似基本没人用,也没有相关的issue,就被我丢了。老版本中还可以找到这个函数
    https://github.com/Arthur151/ROMP/blob/v1.1/src/lib/utils/remote_server_utils.py

@akk-123
Copy link

akk-123 commented Feb 25, 2022

好的,非常感谢,请问这篇论文大概啥时候会开源呢
https://arxiv.org/pdf/2112.08274.pdf

@Arthur151
Copy link
Owner

这篇文章还在审稿中,在录用后会开源。

@akk-123
Copy link

akk-123 commented Mar 1, 2022

@Arthur151 你好,再请教两个问题

(1)代码里的'cam'和'cam_trans' 的区别是啥呀,'cam‘是网络直接预测的相机参数,'cam_trans' 表示是什么呢
(2)请教一个和ROMP不是直接相关的问题,pytoch3d的相机内参K是用4x4的矩阵,这个我也是看的mmhuman3d的文档,但是网上我没有找到用4x4的矩阵表示的相关资料,不太明白为啥是这样表示的,正常的K不是3x3么,如果K是4x4,因为世界坐标转换到图像坐标系是通过K[R T],如果K是4x4的,那么计算得到的图像坐标也是4维的,但是二维图像上的点算上齐次坐标表示也才3维,所以不太理解这个4x4的表示形式,不知道大佬是否清楚这个问题

@Arthur151
Copy link
Owner

  1. 是的,'cam‘是网络直接预测的相机参数,'cam_trans' 是将相机参数转换成每个预测mesh根节点在空间中的3D translation。code
  2. 这个问题我也不是特别理解,不过这个教程貌似相关,https://www.scratchapixel.com/lessons/3d-basic-rendering/perspective-and-orthographic-projection-matrix/building-basic-perspective-projection-matrix

@akk-123
Copy link

akk-123 commented Mar 1, 2022

好的,感谢解答,

'cam_trans' 是将相机参数转换成每个预测mesh根节点在空间中的3D translation

不过我还是不太清楚需要做这个转换到的目的是什么,而且看代码好像还是用的最小二乘找的优化解么,没有太明白诶

@Arthur151
Copy link
Owner

就是迎合大家需要明确的3D translation的需求而已。
'cam'参数不能直接表达估计的3D translation,可以通过我代码的形式求得3D translation。

@akk-123
Copy link

akk-123 commented Mar 2, 2022

好的,谢谢回答,关于摄像机的再请教下,好像有些重建方法是假设透视摄像机,有些是弱透视摄像机,这两种假设都是可以的么,比如ROMP,意思是假设每个人体上的点处于一个平面,具有相同的深度么?如果是这样的假设意味着所有顶点具有相同的Z坐标么,但是实际计算出来的顶点坐标好像不是这样的,另外如果是人脸重建,人脸和摄像头本身就比较近,是不是一般就不太好使用弱透视投影

@Arthur151
Copy link
Owner

关于弱透视投影的理解有点偏差。并不是假设所有人处于同一深度,只是对于深度的表示不一样。透视摄像机对于深度的建模深度和我们常理解的三维空间近似,弱透视投影只是将这种三维深度用人在图像中的尺度进行近似表示了。
距离近的时候,弱透视投影省略的三角投影效应会更加明显,也就更偏离实际情况了。

@akk-123
Copy link

akk-123 commented Mar 2, 2022

根据wiki的定义,弱透视确实假设物体处于同一个距离吧

With these conditions, it can be assumed that all points on a 3D object are at the same distance from the camera without significant errors in the projection

另外不太明白focal length这个值是怎么定的呢,我看很多其它代码用的是5000,ROMP用的是443.4?不清楚这个值是怎么来的

@Arthur151
Copy link
Owner

╮(╯▽╰)╭。。你给我整不会了,知识没有学的这么死的吧。。focal length跟ROMP没关系,是新工作BEV里用的。

@Arthur151
Copy link
Owner

Arthur151 commented Apr 21, 2022

?????@AItai01

@Altai01
Copy link

Altai01 commented Apr 21, 2022

?????@AItai01

想问你一些问题,后来想想还是不打扰您了,就是remote_server_utils.py文件是为了方便服务器调用本地摄像头的吧?里面有 run_server(server_host, server_port) # first, run this function only in server
# run_client(server_host, server_port) # then, run this function only in client
在客户端怎么操作呢?直接运行这个.py 文件么?会有报错

@Arthur151
Copy link
Owner

@Altai01
抱歉,这部分代码很久没维护了,因为写的比较简陋,所以延迟会比较高,后面会推出更好的版本,我同事已经做好的,相关工作在投稿,相信后面会开源出来。
现在的版本里我都找不到这段代码了。。可以把代码和issue单独开个issue,我看一下么?我要是解决不了会让我同事也来看看。

@Altai01
Copy link

Altai01 commented Apr 21, 2022 via email

@Arthur151
Copy link
Owner

@akk-123
BEV代码已开源。

@mch0dmin
Copy link

@Arthur151 你好,再请教两个问题

(1)代码里的'cam'和'cam_trans' 的区别是啥呀,'cam‘是网络直接预测的相机参数,'cam_trans' 表示是什么呢 (2)请教一个和ROMP不是直接相关的问题,pytoch3d的相机内参K是用4x4的矩阵,这个我也是看的mmhuman3d的文档,但是网上我没有找到用4x4的矩阵表示的相关资料,不太明白为啥是这样表示的,正常的K不是3x3么,如果K是4x4,因为世界坐标转换到图像坐标系是通过K[R T],如果K是4x4的,那么计算得到的图像坐标也是4维的,但是二维图像上的点算上齐次坐标表示也才3维,所以不太理解这个4x4的表示形式,不知道大佬是否清楚这个问题

@akk-123cam转换成"3x3"的相机内参和4x4"相机外参,这个问题解决了吗?有好的方法吗?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants