我训练了一个模型,并希望预测新图像的分数。
现在,我执行以下功能,但返回错误:
google.api_core.exceptions.PermissionDenied: 403 Permission 'automl.models.predict' denied on resource 'projects/project_id/locations/us-central1/models/model_id' (or it may not exist).
我不确定是否是由于位置不正确,即us-central1?什么是gcloud命令要检查?
如何解决这个问题?
非常感谢您。
def get_prediction(content, project_id, model_id):
prediction_client = automl_v1beta1.PredictionServiceClient()
name = 'projects/{}/locations/us-central1/models/{}'.format(project_id, model_id)
payload = {'image': {'image_bytes': content }}
params = {}
request = prediction_client.predict(name, payload, params)
return request # waits till request is returned
答案 0 :(得分:1)
通常在未正确认证应用程序时抛出权限错误消息;因此,需要通过使用环境变量来验证您所使用的服务帐户是否具有必需的roles assigned以及provide the credentials to your application或在代码中明确指向您的服务帐户文件。请记住,在会话中设置环境变量值时,每次删除会话时都会重置该值。
此外,如API Tutorial中所述, AutoML Vision 当前需要位置 us-central1 。基于此,您在这方面应该没问题;但是,如果您想获取有关此配置的其他信息,可以看看projects.locations REST方法。
您可以使用以下官方文档示例将路径传递给代码中的服务帐户密钥,以及QuickStart指南,以进一步了解开始所需的配置使用AutoML Vision服务。
namespace Google\Cloud\Samples\Auth;
// Imports the Google Cloud Storage client library.
use Google\Cloud\Storage\StorageClient;
function auth_cloud_explicit($projectId, $serviceAccountPath)
{
# Explicitly use service account credentials by specifying the private key
# file.
$config = [
'keyFilePath' => $serviceAccountPath,
'projectId' => $projectId,
];
$storage = new StorageClient($config);
# Make an authenticated API request (listing storage buckets)
foreach ($storage->buckets() as $bucket) {
printf('Bucket: %s' . PHP_EOL, $bucket->name());
}
}