Merge 77b364bd97 into 8609e5fae5
				
					
				
			This commit is contained in:
		
						commit
						7f0b7003da
					
				| 
						 | 
					@ -1 +1 @@
 | 
				
			||||||
6.1.1
 | 
					6.3.2
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -195,6 +195,8 @@ cc_library(
 | 
				
			||||||
    srcs = [
 | 
					    srcs = [
 | 
				
			||||||
        "resource_util.cc",
 | 
					        "resource_util.cc",
 | 
				
			||||||
        "resource_util_internal.h",
 | 
					        "resource_util_internal.h",
 | 
				
			||||||
 | 
					        "resource_path_manager.cc",
 | 
				
			||||||
 | 
					        "resource_path_manager.h",
 | 
				
			||||||
    ] + select({
 | 
					    ] + select({
 | 
				
			||||||
        "//conditions:default": ["resource_util_default.cc"],
 | 
					        "//conditions:default": ["resource_util_default.cc"],
 | 
				
			||||||
        "//mediapipe:android": ["resource_util_android.cc"],
 | 
					        "//mediapipe:android": ["resource_util_android.cc"],
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										47
									
								
								mediapipe/util/resource_path_manager.cc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								mediapipe/util/resource_path_manager.cc
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,47 @@
 | 
				
			||||||
 | 
					// 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.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "mediapipe/util/resource_path_manager.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <iostream>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "absl/strings/str_split.h"
 | 
				
			||||||
 | 
					#include "mediapipe/framework/deps/file_path.h"
 | 
				
			||||||
 | 
					#include "mediapipe/framework/port/file_helpers.h"
 | 
				
			||||||
 | 
					#include "mediapipe/framework/port/ret_check.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace mediapipe {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					std::vector<std::string> resource_search_paths_;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ResourcePathManager::AddSearchPath(const std::string& path)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  resource_search_paths_.push_back(path);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					absl::StatusOr<std::string> ResourcePathManager::ResolveFilePath(const std::string& path)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					   if (absl::StartsWith(path, "/")) {
 | 
				
			||||||
 | 
					    return path;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  for (auto & resource_path: resource_search_paths_) {
 | 
				
			||||||
 | 
					    auto file_path = file::JoinPath(resource_path, path);
 | 
				
			||||||
 | 
					    if (file::Exists(file_path).ok()) {
 | 
				
			||||||
 | 
					      return file_path;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return absl::NotFoundError("No file " + path + " found in declared search paths");
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}  // namespace mediapipe
 | 
				
			||||||
							
								
								
									
										36
									
								
								mediapipe/util/resource_path_manager.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								mediapipe/util/resource_path_manager.h
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,36 @@
 | 
				
			||||||
 | 
					// 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.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef MEDIAPIPE_UTIL_RESOURCE_PATH_MANAGER_H_
 | 
				
			||||||
 | 
					#define MEDIAPIPE_UTIL_RESOURCE_PATH_MANAGER_H_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <string>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "mediapipe/framework/port/statusor.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace mediapipe {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// The ResourcePathManager provides additionnal search paths handling for resources (tflite...) locations.
 | 
				
			||||||
 | 
					class ResourcePathManager {
 | 
				
			||||||
 | 
					 public:
 | 
				
			||||||
 | 
					    // Adds a path to search resources for.
 | 
				
			||||||
 | 
					    static void AddSearchPath(const std::string& path);
 | 
				
			||||||
 | 
					    // Tries to resolve a filepath from path and previously added search path.
 | 
				
			||||||
 | 
					    // Either return the filepath when it exists, or absl::NotFoundError when the path doesn't exists.
 | 
				
			||||||
 | 
					    static absl::StatusOr<std::string> ResolveFilePath(const std::string& path);
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}  // namespace mediapipe
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif  // MEDIAPIPE_UTIL_RESOURCE_UTIL_H_
 | 
				
			||||||
| 
						 | 
					@ -22,6 +22,7 @@
 | 
				
			||||||
#include "mediapipe/framework/port/statusor.h"
 | 
					#include "mediapipe/framework/port/statusor.h"
 | 
				
			||||||
#include "mediapipe/util/android/asset_manager_util.h"
 | 
					#include "mediapipe/util/android/asset_manager_util.h"
 | 
				
			||||||
#include "mediapipe/util/android/file/base/helpers.h"
 | 
					#include "mediapipe/util/android/file/base/helpers.h"
 | 
				
			||||||
 | 
					#include "mediapipe/util/resource_path_manager.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace mediapipe {
 | 
					namespace mediapipe {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -80,6 +81,15 @@ absl::StatusOr<std::string> PathToResourceAsFile(const std::string& path) {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // try to load file in potentially declared resource paths
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    auto status_or_path = ResourcePathManager::ResolveFilePath(path);
 | 
				
			||||||
 | 
					    if (status_or_path.ok()) {
 | 
				
			||||||
 | 
					        LOG(INFO) << "Successfully loaded: " << path;
 | 
				
			||||||
 | 
					        return status_or_path;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // If that fails, assume it was a relative path, and try just the base name.
 | 
					  // If that fails, assume it was a relative path, and try just the base name.
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    const size_t last_slash_idx = path.find_last_of("\\/");
 | 
					    const size_t last_slash_idx = path.find_last_of("\\/");
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -23,6 +23,7 @@
 | 
				
			||||||
#include "mediapipe/framework/port/ret_check.h"
 | 
					#include "mediapipe/framework/port/ret_check.h"
 | 
				
			||||||
#include "mediapipe/framework/port/statusor.h"
 | 
					#include "mediapipe/framework/port/statusor.h"
 | 
				
			||||||
#include "mediapipe/util/resource_util.h"
 | 
					#include "mediapipe/util/resource_util.h"
 | 
				
			||||||
 | 
					#include "mediapipe/util/resource_path_manager.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace mediapipe {
 | 
					namespace mediapipe {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -61,6 +62,15 @@ absl::StatusOr<std::string> PathToResourceAsFile(const std::string& path) {
 | 
				
			||||||
    return path;
 | 
					    return path;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // try to load file in potentially declared resource paths
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    auto status_or_path = ResourcePathManager::ResolveFilePath(path);
 | 
				
			||||||
 | 
					    if (status_or_path.ok()) {
 | 
				
			||||||
 | 
					        LOG(INFO) << "Successfully loaded: " << path;
 | 
				
			||||||
 | 
					        return status_or_path;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Try to load a relative path or a base filename as is.
 | 
					  // Try to load a relative path or a base filename as is.
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    auto status_or_path = PathToResourceAsFileInternal(path);
 | 
					    auto status_or_path = PathToResourceAsFileInternal(path);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -18,6 +18,7 @@
 | 
				
			||||||
#include "mediapipe/framework/deps/file_path.h"
 | 
					#include "mediapipe/framework/deps/file_path.h"
 | 
				
			||||||
#include "mediapipe/framework/port/file_helpers.h"
 | 
					#include "mediapipe/framework/port/file_helpers.h"
 | 
				
			||||||
#include "mediapipe/framework/port/statusor.h"
 | 
					#include "mediapipe/framework/port/statusor.h"
 | 
				
			||||||
 | 
					#include "mediapipe/util/resource_path_manager.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ABSL_FLAG(
 | 
					ABSL_FLAG(
 | 
				
			||||||
    std::string, resource_root_dir, "",
 | 
					    std::string, resource_root_dir, "",
 | 
				
			||||||
| 
						 | 
					@ -43,6 +44,15 @@ absl::StatusOr<std::string> PathToResourceAsFile(const std::string& path) {
 | 
				
			||||||
    return path;
 | 
					    return path;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // try to load file in potentially declared resource paths
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    auto status_or_path = ResourcePathManager::ResolveFilePath(path);
 | 
				
			||||||
 | 
					    if (status_or_path.ok()) {
 | 
				
			||||||
 | 
					        LOG(INFO) << "Successfully loaded: " << path;
 | 
				
			||||||
 | 
					        return status_or_path;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Try to load the file from bazel-bin. If it does not exist, fall back to the
 | 
					  // Try to load the file from bazel-bin. If it does not exist, fall back to the
 | 
				
			||||||
  // resource folder.
 | 
					  // resource folder.
 | 
				
			||||||
  auto bazel_path = JoinPath("bazel-bin", path);
 | 
					  auto bazel_path = JoinPath("bazel-bin", path);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user