From 59a92b14e41cdbac088a3aa4cc91fafb2d8d68ba Mon Sep 17 00:00:00 2001 From: Sergei Volodin Date: Mon, 10 May 2021 23:07:32 +0000 Subject: [PATCH] Add pose estimation code --- examples/14_pose/assets/sample.png | Bin 0 -> 63365 bytes examples/14_pose/main.qml | 110 ++++++++++++++++++++++++++++- examples/14_pose/qml.qrc | 1 + 3 files changed, 110 insertions(+), 1 deletion(-) create mode 100644 examples/14_pose/assets/sample.png diff --git a/examples/14_pose/assets/sample.png b/examples/14_pose/assets/sample.png new file mode 100644 index 0000000000000000000000000000000000000000..9aa4f318e639ea7c5679964a7abffc9d8c820405 GIT binary patch literal 63365 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 literal 0 HcmV?d00001 diff --git a/examples/14_pose/main.qml b/examples/14_pose/main.qml index e4a9d26..180ad59 100644 --- a/examples/14_pose/main.qml +++ b/examples/14_pose/main.qml @@ -9,6 +9,7 @@ import QtQuick.Window 2.2 import QtQuick 2.6 +import Qt3D.Core 2.0 import ch.epfl.chili.qmlar 1.0 /** @brief This project renders a cube at (0, 0, 0) using qml-ar. @@ -28,16 +29,123 @@ Window { // setting width width: 500 + + init_type: AR.INIT_IMAGE } // showing a text in the middle with matrix components Text { anchors.centerIn: parent font.pixelSize: 30 - text: pretty_print_matrix4(arComponent.mvp_matrix) + text: pretty_print_matrix4(get_mv(arComponent.mvp_matrix)) + pretty_print_transform() color: "red" } + function get_camera_matrix() { + // Get the calibrated camera matrix. + // TODO: read the asset instead of using the hardcoded matrix + + var C = [ + 7.3321993364036177e+02, 0., 2.9429448615773646e+02, + 0., 7.3321993364036177e+02, 6.8074088355361582e+01, + 0., 0., 1. + ]; + + return C; + } + + function get_projection_matrix_manual(H, W) { + var Hcalib = 480; + var Wcalib = 640; + var n = 1; + var f = 10000; + + // Get the projection matrix manually. + + // translate (-1, 1, 0) + var translate_m1 = Qt.matrix4x4(1, 0, 0, -1, + 0, 1, 0, 1, + 0, 0, 1, 0, + 0, 0, 0, 1); + + var scaler = Qt.matrix4x4(2. / W, 0, 0, 0, + 0, -2. / H, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1) + + var C = get_camera_matrix(); + + var project = Qt.matrix4x4( + 0, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, 0, 0); + + project.m11 = C[0]; + project.m12 = C[1]; + project.m13 = C[2]; + + project.m21 = C[3]; + project.m22 = C[4]; + project.m23 = C[5]; + + project.m31 = C[6]; + project.m32 = C[7]; + project.m33 = C[8]; + + project.m33 = 0; + project.m43 = 1; + + project.m33 = (f + n) / (f - n); + project.m34 = -2 * n * f / (f - n); + + return translate_m1.times(scaler.times(project)); + } + + function get_mv(mvp) { + var p = get_projection_matrix_manual(arComponent.height, arComponent.width); + var mv = p.inverted().times(mvp); + return mv; + } + + Matrix4x4 { + id: mv_transform + matrix: get_mv() + } + + // print the transform as rotation and translation + function pretty_print_transform() { + var res = ""; + + console.log(mv_transform.rotationX) + + var mv = get_mv(arComponent.mvp_matrix); + + // translation + var t = Qt.vector3d(mv.m14, mv.m24, mv.m34); + + res += "x=" + Math.round(t.x * 1) / 1 + '\t'; + res += "y=" + Math.round(t.y * 1) / 1 + '\t'; + res += "tz=" + Math.round(t.z * 1) / 1 + '\t'; + res += '\n'; + + + // adapted from https://stackoverflow.com/questions/54616049/converting-a-rotation-matrix-to-euler-angles-and-back-special-case + var beta = -Math.asin(mv.m31); + var alpha = Math.atan2(mv.m32 / Math.cos(beta), mv.m33 / Math.cos(beta)); + var gamma = Math.atan2(mv.m21 / Math.cos(beta), mv.m11 / Math.cos(beta)); + + beta = beta * 180 / Math.PI; + alpha = alpha * 180 / Math.PI; + gamma = gamma * 180 / Math.PI; + + res += 'b=' + Math.round(beta * 1) / 1 + '\t'; + res += 'a=' + Math.round(alpha * 1) / 1 + '\t'; + res += 'g=' + Math.round(gamma * 1) / 1 + '\t'; + + return res; + } + /** Print matrix 4x4 in a nice way */ function pretty_print_matrix4(mat) { var res = ""; diff --git a/examples/14_pose/qml.qrc b/examples/14_pose/qml.qrc index b05633c..72d1113 100644 --- a/examples/14_pose/qml.qrc +++ b/examples/14_pose/qml.qrc @@ -4,5 +4,6 @@ Activity.qml assets/markers.json assets/camera_matrix.json + assets/sample.png