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 = [
 | 
			
		||||
        "resource_util.cc",
 | 
			
		||||
        "resource_util_internal.h",
 | 
			
		||||
        "resource_path_manager.cc",
 | 
			
		||||
        "resource_path_manager.h",
 | 
			
		||||
    ] + select({
 | 
			
		||||
        "//conditions:default": ["resource_util_default.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/util/android/asset_manager_util.h"
 | 
			
		||||
#include "mediapipe/util/android/file/base/helpers.h"
 | 
			
		||||
#include "mediapipe/util/resource_path_manager.h"
 | 
			
		||||
 | 
			
		||||
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.
 | 
			
		||||
  {
 | 
			
		||||
    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/statusor.h"
 | 
			
		||||
#include "mediapipe/util/resource_util.h"
 | 
			
		||||
#include "mediapipe/util/resource_path_manager.h"
 | 
			
		||||
 | 
			
		||||
namespace mediapipe {
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -61,6 +62,15 @@ absl::StatusOr<std::string> PathToResourceAsFile(const std::string& 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.
 | 
			
		||||
  {
 | 
			
		||||
    auto status_or_path = PathToResourceAsFileInternal(path);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,6 +18,7 @@
 | 
			
		|||
#include "mediapipe/framework/deps/file_path.h"
 | 
			
		||||
#include "mediapipe/framework/port/file_helpers.h"
 | 
			
		||||
#include "mediapipe/framework/port/statusor.h"
 | 
			
		||||
#include "mediapipe/util/resource_path_manager.h"
 | 
			
		||||
 | 
			
		||||
ABSL_FLAG(
 | 
			
		||||
    std::string, resource_root_dir, "",
 | 
			
		||||
| 
						 | 
				
			
			@ -43,6 +44,15 @@ absl::StatusOr<std::string> PathToResourceAsFile(const std::string& 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
 | 
			
		||||
  // resource folder.
 | 
			
		||||
  auto bazel_path = JoinPath("bazel-bin", path);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue
	
	Block a user