Fix incorrect timestamp send to graph and make object tracking work in iOS.

This commit is contained in:
aaaron7 2020-11-05 16:10:10 +08:00
parent e948e25f32
commit e151d5f5c9
3 changed files with 88 additions and 10 deletions

View File

@ -0,0 +1,70 @@
# Copyright 2019 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.
load(
"@build_bazel_rules_apple//apple:ios.bzl",
"ios_application",
)
load(
"//mediapipe/examples/ios:bundle_id.bzl",
"BUNDLE_ID_PREFIX",
"example_provisioning",
)
licenses(["notice"])
MIN_IOS_VERSION = "10.0"
alias(
name = "objectrackinggpu",
actual = "ObjectTrackingGpuApp",
)
ios_application(
name = "ObjectTrackingGpuApp",
app_icons = ["//mediapipe/examples/ios/common:AppIcon"],
bundle_id = BUNDLE_ID_PREFIX + ".ObjectTrackingGpu",
families = [
"iphone",
"ipad",
],
infoplists = [
"//mediapipe/examples/ios/common:Info.plist",
"Info.plist",
],
minimum_os_version = MIN_IOS_VERSION,
provisioning_profile = example_provisioning(),
deps = [
":ObjectTrackingGpuAppLibrary",
"@ios_opencv//:OpencvFramework",
],
)
objc_library(
name = "ObjectTrackingGpuAppLibrary",
data = [
"//mediapipe/graphs/tracking:mobile_gpu.binarypb",
"//mediapipe/models:ssdlite_object_detection.tflite",
"//mediapipe/models:ssdlite_object_detection_labelmap.txt",
],
deps = [
"//mediapipe/examples/ios/common:CommonMediaPipeAppLibrary",
] + select({
"//mediapipe:ios_i386": [],
"//mediapipe:ios_x86_64": [],
"//conditions:default": [
"//mediapipe/graphs/tracking:mobile_calculators",
],
}),
)

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CameraPosition</key>
<string>front</string>
<key>GraphOutputStream</key>
<string>output_video</string>
<key>GraphInputStream</key>
<string>input_video</string>
<key>GraphName</key>
<string>mobile_gpu</string>
</dict>
</plist>

View File

@ -46,7 +46,6 @@
/// Number of frames currently being processed by the graph. /// Number of frames currently being processed by the graph.
std::atomic<int32_t> _framesInFlight; std::atomic<int32_t> _framesInFlight;
/// Used as a sequential timestamp for MediaPipe. /// Used as a sequential timestamp for MediaPipe.
mediapipe::Timestamp _frameTimestamp;
int64 _frameNumber; int64 _frameNumber;
// Graph config modified to expose requested output streams. // Graph config modified to expose requested output streams.
@ -369,21 +368,16 @@ void CallFrameDelegate(void* wrapperVoid, const std::string& streamName,
timestamp:timestamp timestamp:timestamp
allowOverwrite:NO]; allowOverwrite:NO];
} }
- (BOOL)sendPixelBuffer:(CVPixelBufferRef)imageBuffer - (BOOL)sendPixelBuffer:(CVPixelBufferRef)imageBuffer
intoStream:(const std::string&)inputName intoStream:(const std::string&)inputName
packetType:(MPPPacketType)packetType { packetType:(MPPPacketType)packetType {
_GTMDevAssert(_frameTimestamp < mediapipe::Timestamp::Done(), uint64_t us = std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::high_resolution_clock::
@"Trying to send frame after stream is done."); now().time_since_epoch()).count();
if (_frameTimestamp < mediapipe::Timestamp::Min()) {
_frameTimestamp = mediapipe::Timestamp::Min();
} else {
_frameTimestamp++;
}
return [self sendPixelBuffer:imageBuffer return [self sendPixelBuffer:imageBuffer
intoStream:inputName intoStream:inputName
packetType:packetType packetType:packetType
timestamp:_frameTimestamp]; timestamp:mediapipe::Timestamp(us)];
} }
- (void)debugPrintGlInfo { - (void)debugPrintGlInfo {