में डीएलआईबी सी ++ में हेड पॉज़ अनुमान के 3 डी समन्वय अक्षरों को कैसे प्राप्त करें डीएलआईबी सी ++ ऐतिहासिक चिह्न का पता लगा सकता है और चेहरे का अनुमान लगा सकता है। हालांकि, मैं सिर की मुद्रा के 3 डी समन्वय अक्ष (x, y, z) कैसे प्राप्त कर सकता हूं?डीएलआईबी सी ++
उत्तर
मुझे कुछ ही समय पहले एक ही समस्या का सामना करना पड़ रहा था, खोजे और 1-2 उपयोगी ब्लॉग पोस्ट पाए, यह link आपको शामिल तकनीकों का एक सिंहावलोकन मिलेगा, अगर आपको केवल 3 डी पॉज़ की गणना करने की आवश्यकता है स्थानों पर आप ओपनजीएल प्रतिपादन भाग को छोड़ सकते हैं, हालांकि यदि आप फीडबैक को दृष्टि से प्राप्त करना चाहते हैं तो आप ओपनजीएल के साथ भी कोशिश कर सकते हैं, लेकिन मैं आपको ओपनजीएल भाग को शुरुआती के रूप में अनदेखा करने का सुझाव दूंगा, इसलिए सबसे छोटा काम करने वाला कोड स्निपेट निकाला गया github पेज, कुछ इस तरह दिखेगा:
// Reading image using OpenCV, you may use dlib as well.
cv::Mat img = cv::imread(imagePath);
std::vector<double> rv(3), tv(3);
cv::Mat rvec(rv),tvec(tv);
cv::Vec3d eav;
// Labelling the 3D Points derived from a 3D model of human face.
// You may replace these points as per your custom 3D head model if any
std::vector<cv::Point3f > modelPoints;
modelPoints.push_back(cv::Point3f(2.37427,110.322,21.7776)); // l eye (v 314)
modelPoints.push_back(cv::Point3f(70.0602,109.898,20.8234)); // r eye (v 0)
modelPoints.push_back(cv::Point3f(36.8301,78.3185,52.0345)); //nose (v 1879)
modelPoints.push_back(cv::Point3f(14.8498,51.0115,30.2378)); // l mouth (v 1502)
modelPoints.push_back(cv::Point3f(58.1825,51.0115,29.6224)); // r mouth (v 695)
modelPoints.push_back(cv::Point3f(-61.8886f,127.797,-89.4523f)); // l ear (v 2011)
modelPoints.push_back(cv::Point3f(127.603,126.9,-83.9129f)); // r ear (v 1138)
// labelling the position of corresponding feature points on the input image.
std::vector<cv::Point2f> srcImagePoints = {cv::Point2f(442, 442), // left eye
cv::Point2f(529, 426), // right eye
cv::Point2f(501, 479), // nose
cv::Point2f(469, 534), //left lip corner
cv::Point2f(538, 521), // right lip corner
cv::Point2f(349, 457), // left ear
cv::Point2f(578, 415) // right ear};
cv::Mat ip(srcImagePoints);
cv::Mat op = cv::Mat(modelPoints);
cv::Scalar m = mean(cv::Mat(modelPoints));
rvec = cv::Mat(rv);
double _d[9] = {1,0,0,
0,-1,0,
0,0,-1};
Rodrigues(cv::Mat(3,3,CV_64FC1,_d),rvec);
tv[0]=0;tv[1]=0;tv[2]=1;
tvec = cv::Mat(tv);
double max_d = MAX(img.rows,img.cols);
double _cm[9] = {max_d, 0, (double)img.cols/2.0,
0 , max_d, (double)img.rows/2.0,
0 , 0, 1.0};
cv::Mat camMatrix = cv::Mat(3,3,CV_64FC1, _cm);
double _dc[] = {0,0,0,0};
solvePnP(op,ip,camMatrix,cv::Mat(1,4,CV_64FC1,_dc),rvec,tvec,false,CV_EPNP);
double rot[9] = {0};
cv::Mat rotM(3,3,CV_64FC1,rot);
Rodrigues(rvec,rotM);
double* _r = rotM.ptr<double>();
printf("rotation mat: \n %.3f %.3f %.3f\n%.3f %.3f %.3f\n%.3f %.3f %.3f\n",
_r[0],_r[1],_r[2],_r[3],_r[4],_r[5],_r[6],_r[7],_r[8]);
printf("trans vec: \n %.3f %.3f %.3f\n",tv[0],tv[1],tv[2]);
double _pm[12] = {_r[0],_r[1],_r[2],tv[0],
_r[3],_r[4],_r[5],tv[1],
_r[6],_r[7],_r[8],tv[2]};
cv::Mat tmp,tmp1,tmp2,tmp3,tmp4,tmp5;
cv::decomposeProjectionMatrix(cv::Mat(3,4,CV_64FC1,_pm),tmp,tmp1,tmp2,tmp3,tmp4,tmp5,eav);
printf("Face Rotation Angle: %.5f %.5f %.5f\n",eav[0],eav[1],eav[2]);
उत्पादन:
**X** **Y** **Z**
Face Rotation Angle: 171.44027 -8.72583 -9.90596
मैं आपकी मदद के लिए सराहना करता हूं, मैं आज रात इस कोड को आजमाएगा: डी –
मैं आपका समाधान करने की कोशिश कर रहा हूं, लेकिन मैं लिंक पर dlib द्वारा प्रदान किए गए 3 डी मॉडल से आंखों, नाक, ... के बिंदु की स्थिति प्राप्त करने के चरण पर अटक गया: http://sourceforge.net /projects/dclib/files/dlib/v18.10/shape_predictor_68_face_landmarks.dat.bz2। .dat फ़ाइल वास्तव में सामान्य है। मैंने कुछ 3 डी सॉफ्टवेयर से इसे पढ़ने के लिए फ़ाइल एक्सटेंशन को बदलने की कोशिश की लेकिन कोई उपयोग नहीं किया। क्या आपके पास कोई सुझाव है? –
आपको उन 3 डी बिंदुओं को फिर से लिखना नहीं है, आपको तदनुसार 'srcImagePoints' को अपडेट करने की आवश्यकता है। – ZdaR
- 1. डीएलआईबी में मैं ओवरले के साथ छवि कैसे सहेजूं?
- 2. क्या डीएलआईबी सी ++ में अपनी मशीन लर्निंग एल्गोरिदम विकसित करने के लिए एक अच्छी ओपन सोर्स लाइब्रेरी है?
- 3. क्या ओपनसीवी जैसे एंड्रॉइड में डीएलआईबी का उपयोग करना संभव है?
- 4. सी/सी ++/जावा/सी #
- 5. सी #, सी/सी ++ या ऑब्जेक्टिव-सी
- 6. सी/सी ++
- 7. सी/सी ++
- 8. सी/सी ++
- 9. सी/सी ++
- 10. सी/सी ++
- 11. सी/सी ++
- 12. सी/सी ++
- 13. सी/सी ++
- 14. सी/सी ++
- 15. सी/सी ++
- 16. सी/सी ++
- 17. सी/सी ++
- 18. सी/सी ++
- 19. सी/सी ++
- 20. सी/सी ++
- 21. सी/सी ++
- 22. सी/सी ++
- 23. सी/सी ++
- 24. सी/सी ++
- 25. सी/सी ++
- 26. सी/सी ++
- 27. सी/सी ++
- 28. सी/सी ++
- 29. सी/सी ++
- 30. सी/सी ++
यह सवाल पहले से ही स्वीकार किए जाते हैं उत्तर नहीं है। फिर भी, भविष्य के संदर्भ के लिए, इस विषय पर इस महान ब्लॉग पोस्ट भी हैं: http://www.learnopencv.com/head-pose-estimation-using-opencv-and-dlib/ –