In this tutorial, there is a “cookies_ORB.yml” in the data folder which describes the 3D points, 2D points, key points, and descriptors. I think this file is only used for the box model provided by the author.
My question is as follows. If I have a CAD model that has texture and its 3D points are also known in its coordinate system. How could I generate the “xxx.yml” of this model? What are these method? And what are the literatures for these method?
Please give tutorial link
The link is here.
If you have ever cloned the OpenCV code or downloaded it, you can also find in this folder (opencv\sources\samples\cpp\tutorial_code\calib3d\real_time_pose_estimation).
I think it’s main_registration.cpp
I think I solved this problem myself.
Anyone who is interested in this problem could find some useful info in the author’s master thesis.
This .yml file info is generated by another software manually.
@guo7212 Any chance you can provide any other information regarding what software you used to generate the yml file? Are you using a DCC tool like 3ds Max?
Also, have you had any luck with making this work without the “training” images mentioned in the tutorial? This seems quite similar to Azure Object Anchors which I don’t think requires training images, just the CAD model. I’m curious if you or anyone else would know if that’s possible with OpenCV.
I did not find the software to finish this job. From the author’s thesis, the software may be built by themselves. The software should have the function which can detect the key points and generate the feature descriptors.
I don’t know the method without the “training” images. But I am very interested in that.
The yml file is generated by Model::save opencv/Model.cpp at 19926e2979ef049a89dd029e2231555db40c2776 · opencv/opencv · GitHub
It has two Mat, the first one is a list of 3d points (3 float coordinates for each point), and the second is the correspondent list of ORB descriptors, 32 bytes each.
If you already have 3d points and their ORB descriptors, you can use Model.cpp code to save the yml file. As you can see in load() function member, only 3d points and descriptors are mandatory, and keypoints, 2D points are optional.