From 1c3fc550e98bf21b02274f4386e1f73568dfce6e Mon Sep 17 00:00:00 2001 From: Mautisim Munir Date: Sat, 15 Oct 2022 09:50:38 +0500 Subject: [PATCH] fixed model loading issue with glsurfaceview moved to library --- .../posetracking_camera/MainActivity.java | 2 +- .../PoseTrackingResultGlRenderer.java | 156 ------------------ .../src/main/AndroidManifest.xml | 3 +- .../posetracking-lindera/src/main/BUILD | 1 + .../posetracking_lindera/MainActivity.java | 23 +-- .../posetracking/AndroidManifest.xml | 2 +- .../solutions/posetracking/Lindera.java | 2 + .../PoseTrackingResultGlRenderer.java | 2 +- 8 files changed, 11 insertions(+), 180 deletions(-) delete mode 100644 mediapipe/examples/android/solutions/posetracking-camera/src/main/java/com/google/mediapipe/examples/posetracking_camera/PoseTrackingResultGlRenderer.java diff --git a/mediapipe/examples/android/solutions/posetracking-camera/src/main/java/com/google/mediapipe/examples/posetracking_camera/MainActivity.java b/mediapipe/examples/android/solutions/posetracking-camera/src/main/java/com/google/mediapipe/examples/posetracking_camera/MainActivity.java index 7042386c3..7ac195d30 100644 --- a/mediapipe/examples/android/solutions/posetracking-camera/src/main/java/com/google/mediapipe/examples/posetracking_camera/MainActivity.java +++ b/mediapipe/examples/android/solutions/posetracking-camera/src/main/java/com/google/mediapipe/examples/posetracking_camera/MainActivity.java @@ -39,7 +39,7 @@ import com.google.mediapipe.solutioncore.VideoInput; import com.google.mediapipe.solutions.posetracking.PoseTracking; import com.google.mediapipe.solutions.posetracking.PoseTrackingOptions; import com.google.mediapipe.solutions.posetracking.PoseTrackingResult; -//import com.google.mediapipe.solutions.posetracking.FaceKeypoint; +import com.google.mediapipe.solutions.posetracking.PoseTrackingResultGlRenderer; import java.io.IOException; import java.io.InputStream; diff --git a/mediapipe/examples/android/solutions/posetracking-camera/src/main/java/com/google/mediapipe/examples/posetracking_camera/PoseTrackingResultGlRenderer.java b/mediapipe/examples/android/solutions/posetracking-camera/src/main/java/com/google/mediapipe/examples/posetracking_camera/PoseTrackingResultGlRenderer.java deleted file mode 100644 index fab0aa1f6..000000000 --- a/mediapipe/examples/android/solutions/posetracking-camera/src/main/java/com/google/mediapipe/examples/posetracking_camera/PoseTrackingResultGlRenderer.java +++ /dev/null @@ -1,156 +0,0 @@ -// Copyright 2021 The MediaPipe Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package com.google.mediapipe.examples.posetracking_camera; - -import android.opengl.GLES20; - -import com.google.mediapipe.formats.proto.DetectionProto.Detection; -import com.google.mediapipe.solutioncore.ResultGlRenderer; -import com.google.mediapipe.solutions.posetracking.PoseTrackingResult; - -import java.nio.ByteBuffer; -import java.nio.ByteOrder; -import java.nio.FloatBuffer; - -; - -/** A custom implementation of {@link ResultGlRenderer} to render {@link PoseTrackingResult}. */ -public class PoseTrackingResultGlRenderer implements ResultGlRenderer { - private static final String TAG = "PoseTrackingResultGlRenderer"; - - private static final float[] KEYPOINT_COLOR = new float[] {1f, 0f, 0f, 1f}; - private static final float KEYPOINT_SIZE = 16f; - private static final float[] BBOX_COLOR = new float[] {0f, 1f, 0f, 1f}; - private static final int BBOX_THICKNESS = 8; - private static final String VERTEX_SHADER = - "uniform mat4 uProjectionMatrix;\n" - + "uniform float uPointSize;\n" - + "attribute vec4 vPosition;\n" - + "void main() {\n" - + " gl_Position = uProjectionMatrix * vPosition;\n" - + " gl_PointSize = uPointSize;" - + "}"; - private static final String FRAGMENT_SHADER = - "precision mediump float;\n" - + "uniform vec4 uColor;\n" - + "void main() {\n" - + " gl_FragColor = uColor;\n" - + "}"; - private int program; - private int positionHandle; - private int pointSizeHandle; - private int projectionMatrixHandle; - private int colorHandle; - - private int loadShader(int type, String shaderCode) { - int shader = GLES20.glCreateShader(type); - GLES20.glShaderSource(shader, shaderCode); - GLES20.glCompileShader(shader); - return shader; - } - - @Override - public void setupRendering() { - program = GLES20.glCreateProgram(); - int vertexShader = loadShader(GLES20.GL_VERTEX_SHADER, VERTEX_SHADER); - int fragmentShader = loadShader(GLES20.GL_FRAGMENT_SHADER, FRAGMENT_SHADER); - GLES20.glAttachShader(program, vertexShader); - GLES20.glAttachShader(program, fragmentShader); - GLES20.glLinkProgram(program); - positionHandle = GLES20.glGetAttribLocation(program, "vPosition"); - pointSizeHandle = GLES20.glGetUniformLocation(program, "uPointSize"); - projectionMatrixHandle = GLES20.glGetUniformLocation(program, "uProjectionMatrix"); - colorHandle = GLES20.glGetUniformLocation(program, "uColor"); - } - - /** - * No needed anymore to be deleted - * **/ - @Override - public void renderResult(PoseTrackingResult result, float[] projectionMatrix) { - if (result == null) { - return; - } - - GLES20.glUseProgram(program); - GLES20.glUniformMatrix4fv(projectionMatrixHandle, 1, false, projectionMatrix, 0); -// GLES20.glUniform1f(pointSizeHandle, KEYPOINT_SIZE); -// int numDetectedFaces = result.multiPoseTrackings().size(); -// for (int i = 0; i < numDetectedFaces; ++i) { -// drawDetection(result.multiPoseTrackings().get(i)); -// } - } - - /** - * Deletes the shader program. - * - *

This is only necessary if one wants to release the program while keeping the context around. - */ - public void release() { - GLES20.glDeleteProgram(program); - } - /** - * Not needed anymore, to be cleaned - * */ - private void drawDetection(Detection detection) { - - if (!detection.hasLocationData()) { - return; - } - // Draw keypoints. -// float[] points = new float[FaceKeypoint.NUM_KEY_POINTS * 2]; -// for (int i = 0; i < FaceKeypoint.NUM_KEY_POINTS; ++i) { -// points[2 * i] = detection.getLocationData().getRelativeKeypoints(i).getX(); -// points[2 * i + 1] = detection.getLocationData().getRelativeKeypoints(i).getY(); -// } -// GLES20.glUniform4fv(colorHandle, 1, KEYPOINT_COLOR, 0); -// FloatBuffer vertexBuffer = -// ByteBuffer.allocateDirect(points.length * 4) -// .order(ByteOrder.nativeOrder()) -// .asFloatBuffer() -// .put(points); -// vertexBuffer.position(0); -// GLES20.glEnableVertexAttribArray(positionHandle); -// GLES20.glVertexAttribPointer(positionHandle, 2, GLES20.GL_FLOAT, false, 0, vertexBuffer); -// GLES20.glDrawArrays(GLES20.GL_POINTS, 0, FaceKeypoint.NUM_KEY_POINTS); - if (!detection.getLocationData().hasRelativeBoundingBox()) { - return; - } - // Draw bounding box. -// float left = detection.getLocationData().getRelativeBoundingBox().getXmin(); -// float top = detection.getLocationData().getRelativeBoundingBox().getYmin(); -// float right = left + detection.getLocationData().getRelativeBoundingBox().getWidth(); -// float bottom = top + detection.getLocationData().getRelativeBoundingBox().getHeight(); -// drawLine(top, left, top, right); -// drawLine(bottom, left, bottom, right); -// drawLine(top, left, bottom, left); -// drawLine(top, right, bottom, right); - } - - private void drawLine(float y1, float x1, float y2, float x2) { - GLES20.glUniform4fv(colorHandle, 1, BBOX_COLOR, 0); - GLES20.glLineWidth(BBOX_THICKNESS); - float[] vertex = {x1, y1, x2, y2}; - FloatBuffer vertexBuffer = - ByteBuffer.allocateDirect(vertex.length * 4) - .order(ByteOrder.nativeOrder()) - .asFloatBuffer() - .put(vertex); - vertexBuffer.position(0); - GLES20.glEnableVertexAttribArray(positionHandle); - GLES20.glVertexAttribPointer(positionHandle, 2, GLES20.GL_FLOAT, false, 0, vertexBuffer); - GLES20.glDrawArrays(GLES20.GL_LINES, 0, 2); - } -} diff --git a/mediapipe/examples/android/solutions/posetracking-lindera/src/main/AndroidManifest.xml b/mediapipe/examples/android/solutions/posetracking-lindera/src/main/AndroidManifest.xml index 4ce4f88c1..2f9e6e1eb 100644 --- a/mediapipe/examples/android/solutions/posetracking-lindera/src/main/AndroidManifest.xml +++ b/mediapipe/examples/android/solutions/posetracking-lindera/src/main/AndroidManifest.xml @@ -14,11 +14,12 @@ + diff --git a/mediapipe/examples/android/solutions/posetracking-lindera/src/main/BUILD b/mediapipe/examples/android/solutions/posetracking-lindera/src/main/BUILD index 3a4971b35..2a20f2902 100644 --- a/mediapipe/examples/android/solutions/posetracking-lindera/src/main/BUILD +++ b/mediapipe/examples/android/solutions/posetracking-lindera/src/main/BUILD @@ -39,6 +39,7 @@ android_binary( "//mediapipe/java/com/google/mediapipe/solutions/posetracking:copperlabs-pose-api", "//mediapipe/java/com/google/mediapipe/solutions/posetracking:copperlabs-pose-detection", "//mediapipe/java/com/google/mediapipe/solutions/posetracking:copperlabs-pose-graph", + "//mediapipe/java/com/google/mediapipe/solutions/posetracking:copperlabs-pose-landmark", "//third_party:androidx_appcompat", "//third_party:androidx_constraint_layout", "//third_party:opencv", diff --git a/mediapipe/examples/android/solutions/posetracking-lindera/src/main/java/com/google/mediapipe/examples/posetracking_lindera/MainActivity.java b/mediapipe/examples/android/solutions/posetracking-lindera/src/main/java/com/google/mediapipe/examples/posetracking_lindera/MainActivity.java index 731009336..93b048b9c 100644 --- a/mediapipe/examples/android/solutions/posetracking-lindera/src/main/java/com/google/mediapipe/examples/posetracking_lindera/MainActivity.java +++ b/mediapipe/examples/android/solutions/posetracking-lindera/src/main/java/com/google/mediapipe/examples/posetracking_lindera/MainActivity.java @@ -29,6 +29,7 @@ import android.widget.FrameLayout; import androidx.activity.result.ActivityResultLauncher; +import com.google.mediapipe.solutioncore.SolutionGlSurfaceView; import com.google.mediapipe.solutions.posetracking.ComputerVisionPlugin; import com.google.mediapipe.solutions.posetracking.Lindera; import com.google.mediapipe.solutions.posetracking.PoseTrackingResultGlRenderer; @@ -46,6 +47,7 @@ public class MainActivity extends AppCompatActivity { // Live camera demo UI and camera components. + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -56,10 +58,8 @@ public class MainActivity extends AppCompatActivity { disableRedundantUI(); setupLiveDemoUiComponents(); - plugin = new ComputerVisionPluginImpl(); lindera = new Lindera(plugin); - new PoseTrackingResultGlRenderer(); } @@ -73,25 +73,8 @@ public class MainActivity extends AppCompatActivity { v -> { startCameraButton.setVisibility(View.GONE); - lindera.initialize(frameLayout,MainActivity.this); + lindera.initialize(frameLayout, MainActivity.this); - ExecutorService executor = Executors.newSingleThreadExecutor(); - Handler handler = new Handler(Looper.getMainLooper()); - - executor.execute(new Runnable() { - @Override - public void run() { - - //Background work here - - handler.post(new Runnable() { - @Override - public void run() { - //UI Thread work here - } - }); - } - }); }); } /**Disables unecesary UI buttons*/ diff --git a/mediapipe/java/com/google/mediapipe/solutions/posetracking/AndroidManifest.xml b/mediapipe/java/com/google/mediapipe/solutions/posetracking/AndroidManifest.xml index 07da672e8..0004407c6 100644 --- a/mediapipe/java/com/google/mediapipe/solutions/posetracking/AndroidManifest.xml +++ b/mediapipe/java/com/google/mediapipe/solutions/posetracking/AndroidManifest.xml @@ -4,5 +4,5 @@ - + diff --git a/mediapipe/java/com/google/mediapipe/solutions/posetracking/Lindera.java b/mediapipe/java/com/google/mediapipe/solutions/posetracking/Lindera.java index b7db95482..a69097868 100644 --- a/mediapipe/java/com/google/mediapipe/solutions/posetracking/Lindera.java +++ b/mediapipe/java/com/google/mediapipe/solutions/posetracking/Lindera.java @@ -24,7 +24,9 @@ public class Lindera { } public void initialize (ViewGroup computerVisionContainerView , AppCompatActivity appCompatActivity){ + setupStreamingModePipeline(computerVisionContainerView,appCompatActivity); + } /** Sets up core workflow for streaming mode. */ private void setupStreamingModePipeline(ViewGroup computerVisionContainerView,AppCompatActivity appCompatActivity) { diff --git a/mediapipe/java/com/google/mediapipe/solutions/posetracking/PoseTrackingResultGlRenderer.java b/mediapipe/java/com/google/mediapipe/solutions/posetracking/PoseTrackingResultGlRenderer.java index 23aaa0904..a74898f3d 100644 --- a/mediapipe/java/com/google/mediapipe/solutions/posetracking/PoseTrackingResultGlRenderer.java +++ b/mediapipe/java/com/google/mediapipe/solutions/posetracking/PoseTrackingResultGlRenderer.java @@ -23,7 +23,7 @@ import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.FloatBuffer; -; + /** A custom implementation of {@link ResultGlRenderer} to render {@link PoseTrackingResult}. */ public class PoseTrackingResultGlRenderer implements ResultGlRenderer {