获取捕捉坐标完成

新bug: 目前画面出现了多余的人体遮罩
This commit is contained in:
jackfiled 2023-01-17 22:34:38 +08:00
parent 08a5f711a9
commit 59387de36f
2 changed files with 37 additions and 10 deletions

View File

@ -1,17 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="deploymentTargetDropDown">
<targetSelectedWithDropDown>
<runningDeviceTargetSelectedWithDropDown>
<Target>
<type value="QUICK_BOOT_TARGET" />
<type value="RUNNING_DEVICE_TARGET" />
<deviceKey>
<Key>
<type value="VIRTUAL_DEVICE_PATH" />
<value value="$USER_HOME$/.android/avd/Pixel_3a_API_33_x86_64.avd" />
<type value="SERIAL_NUMBER" />
<value value="adb-3040223527000PT-yH8BGJ._adb-tls-connect._tcp" />
</Key>
</deviceKey>
</Target>
</targetSelectedWithDropDown>
<timeTargetWasSelectedWithDropDown value="2023-01-10T13:25:57.409214Z" />
</runningDeviceTargetSelectedWithDropDown>
<timeTargetWasSelectedWithDropDown value="2023-01-17T14:13:43.027203Z" />
</component>
</project>

View File

@ -15,6 +15,7 @@ import com.google.mediapipe.components.PermissionHelper
import com.google.mediapipe.formats.proto.LandmarkProto.NormalizedLandmarkList
import com.google.mediapipe.framework.AndroidAssetUtil
import com.google.mediapipe.framework.PacketGetter
import com.google.mediapipe.framework.ProtoUtil
import com.google.mediapipe.glutil.EglManager
import com.google.protobuf.InvalidProtocolBufferException
@ -80,14 +81,18 @@ class MainActivity : AppCompatActivity() {
processor.videoSurfaceOutput.setFlipY(true)
// 展示
// 捕获获得的坐标数据包
// 遇到InvalidProtocolBufferException
// 参考 https://github.com/google/mediapipe/issues/1013
ProtoUtil.registerTypeName(NormalizedLandmarkList::class.java,
"mediapipe.NormalizedLandmarkList")
processor.addPacketCallback(
outputLandmarksStreamName
) {
Log.i(tag, "Received Landmark Packets.")
try {
val landmarkRaw = PacketGetter.getProtoBytes(it)
val poseLandmarks = NormalizedLandmarkList.parseFrom(landmarkRaw)
// 从这里可以获得每个特征点的座标
val landmarkList = PacketGetter.getProto(it, NormalizedLandmarkList::class.java)
Log.i(tag, getPoseLandmarksDebugString(landmarkList))
} catch (exception: InvalidProtocolBufferException) {
Log.e(tag, "failed to get protocol.", exception)
}
@ -248,4 +253,26 @@ class MainActivity : AppCompatActivity() {
}
)
}
/**
* 格式化输出捕捉的标志位置
*/
private fun getPoseLandmarksDebugString(poseLandmarks: NormalizedLandmarkList): String {
val debugString = StringBuilder("Pose LandMarks: " + poseLandmarks.landmarkCount + "\n")
for ((landMarkIndex, landmark) in poseLandmarks.landmarkList.withIndex()) {
debugString.append(
"\tLandMark ["
+ landMarkIndex
+ "]: ("
+ landmark.x
+ ","
+ landmark.y
+ ","
+ landmark.z
+ ")\n"
)
}
return debugString.toString()
}
}