Fix incorrect timestamp send to graph and make object tracking work in iOS.
This commit is contained in:
parent
e948e25f32
commit
e151d5f5c9
70
mediapipe/examples/ios/objecttrackinggpu/BUILD
Normal file
70
mediapipe/examples/ios/objecttrackinggpu/BUILD
Normal 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",
|
||||||
|
],
|
||||||
|
}),
|
||||||
|
)
|
14
mediapipe/examples/ios/objecttrackinggpu/Info.plist
Normal file
14
mediapipe/examples/ios/objecttrackinggpu/Info.plist
Normal 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>
|
|
@ -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 {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user