Project import generated by Copybara.
PiperOrigin-RevId: 253489161
This commit is contained in:
@@ -0,0 +1,118 @@
|
||||
// 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.
|
||||
//
|
||||
// Defines functions for validating and parsing tags and stream names
|
||||
// (and side packet names).
|
||||
|
||||
#ifndef MEDIAPIPE_FRAMEWORK_TOOL_VALIDATE_NAME_H_
|
||||
#define MEDIAPIPE_FRAMEWORK_TOOL_VALIDATE_NAME_H_
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "absl/base/macros.h"
|
||||
#include "mediapipe/framework/port/proto_ns.h"
|
||||
#include "mediapipe/framework/port/status.h"
|
||||
|
||||
namespace mediapipe {
|
||||
namespace internal {
|
||||
constexpr int kMaxCollectionItemId = 10000;
|
||||
} // namespace internal
|
||||
|
||||
namespace tool {
|
||||
|
||||
struct ABSL_DEPRECATED(
|
||||
"Prefer using mediapipe::tool::TagMap instead, since this structure does "
|
||||
"not "
|
||||
"consider the TAG:INDEX:name notation.") TagAndNameInfo {
|
||||
// The tag names. If this is empty then the collection will use
|
||||
// indexes.
|
||||
std::vector<std::string> tags;
|
||||
// Names of the streams or side packets. If tags are used then
|
||||
// tags.size() and names.size() must match.
|
||||
std::vector<std::string> names;
|
||||
};
|
||||
|
||||
// Create a TagAndNameInfo from a list of strings in the form TAG:name.
|
||||
// The TAG (including colon) is optional, but the entire list must either
|
||||
// always include tags or never include tags.
|
||||
ABSL_DEPRECATED(
|
||||
"Prefer using mediapipe::tool::TagMap instead, since this method does not "
|
||||
"support the TAG:INDEX:name notation. You can use Create() to create the "
|
||||
"tag map, and then Names(), Mapping(), and other methods to access the "
|
||||
"tag, index and name information.")
|
||||
::mediapipe::Status GetTagAndNameInfo(
|
||||
const proto_ns::RepeatedPtrField<ProtoString>& tags_and_names,
|
||||
TagAndNameInfo* info);
|
||||
|
||||
// Create the proto field names in the form TAG:name based on a
|
||||
// TagAndNameInfo.
|
||||
ABSL_DEPRECATED(
|
||||
"Prefer using mediapipe::tool::TagMap instead, since this method does not "
|
||||
"support the TAG:INDEX:name notation. You can use CanonicalEntries() to "
|
||||
"translate a tag map to a RepeatedPtrField of tag and names.")
|
||||
::mediapipe::Status SetFromTagAndNameInfo(
|
||||
const TagAndNameInfo& info,
|
||||
proto_ns::RepeatedPtrField<ProtoString>* tags_and_names);
|
||||
|
||||
// The std::string is a valid name for an input stream, output stream,
|
||||
// side packet, and input collection. Names use only lower case letters,
|
||||
// numbers, and underscores.
|
||||
//
|
||||
// The reason for this restriction is threefold.
|
||||
// (1) To enforce a consistent style in graph configs.
|
||||
// (2) To distinguish between "arguments" to calculators and
|
||||
// trainer/calculator names.
|
||||
// (3) Because input side packet names end up in model directory names,
|
||||
// where lower case naming is the norm.
|
||||
::mediapipe::Status ValidateName(const std::string& name);
|
||||
// The std::string is a valid tag name. Tags use only upper case letters,
|
||||
// numbers, and underscores.
|
||||
::mediapipe::Status ValidateTag(const std::string& tag);
|
||||
|
||||
// Parse a "Tag and Name" std::string into a tag and a name.
|
||||
// The format is an optional tag and colon, followed by a name.
|
||||
// Example 1: "VIDEO:frames2" -> tag: "VIDEO", name: "frames2"
|
||||
// Example 2: "video_frames_1" -> tag: "", name: "video_frames_1"
|
||||
::mediapipe::Status ParseTagAndName(const std::string& tag_and_name,
|
||||
std::string* tag, std::string* name);
|
||||
|
||||
// Parse a generic TAG:index:name std::string. The format is a tag, then an
|
||||
// index, then a name. The tag and index are optional. If the index
|
||||
// is included, then the tag must be included. If no tag is used then
|
||||
// index is set to -1 (and should be assigned by argument position).
|
||||
// Examples:
|
||||
// "VIDEO:frames2" -> tag: "VIDEO", index: 0, name: "frames2"
|
||||
// "VIDEO:1:frames" -> tag: "VIDEO", index: 1, name: "frames"
|
||||
// "raw_frames" -> tag: "", index: -1, name: "raw_frames"
|
||||
::mediapipe::Status ParseTagIndexName(const std::string& tag_and_name,
|
||||
std::string* tag, int* index,
|
||||
std::string* name);
|
||||
|
||||
// Parse a generic TAG:index std::string. The format is a tag, then an index
|
||||
// with both being optional. If the tag is missing it is assumed to be
|
||||
// "" and if the index is missing then it is assumed to be 0. If the
|
||||
// index is provided then a colon (':') must be used.
|
||||
// Examples:
|
||||
// "VIDEO" -> tag: "VIDEO", index: 0
|
||||
// "VIDEO:1" -> tag: "VIDEO", index: 1
|
||||
// ":2" -> tag: "", index: 2
|
||||
// "" -> tag: "", index: 0
|
||||
::mediapipe::Status ParseTagIndex(const std::string& tag_and_index,
|
||||
std::string* tag, int* index);
|
||||
|
||||
} // namespace tool
|
||||
} // namespace mediapipe
|
||||
|
||||
#endif // MEDIAPIPE_FRAMEWORK_TOOL_VALIDATE_NAME_H_
|
||||
Reference in New Issue
Block a user