当前位置: 首页 > 知识库问答 >
问题:

状态代码。在Docker中运行Python/Flask中的Vision API演示时未经验证

谷光誉
2023-03-14

我按照Google客户端库页面的说明开始使用Python中的Vision API(我运行的是2.7)。由于我的代码在Docker(一个Flask应用程序)中运行,我按照以下方式执行了说明:

  1. 将google-cloud-vision和google-cloud库添加到我的requirements.txt文件中。
  2. 创建了一个json帐户凭据文件,并将此文件的位置设置为名为GOOGLE_APPLICATION_CREDENTIALS的环境变量
  3. 在我的Web应用程序的docker容器中“ssh'd”时成功运行gcloud init
  4. 将上面链接中的客户端库示例完全复制到测试视图中以运行代码

上述步骤导致以下错误:

> RetryError: GaxError(Exception occurred in retry method that was not
> classified as transient, caused by <_Rendezvous of RPC that terminated
> with (StatusCode.UNAUTHENTICATED, Traceback (most recent call last):  
> File "src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi",
> line 154, in grpc._cython.cygrpc.plugin_get_metadata
> (src/python/grpcio/grpc/_cython/cygrpc.c:7054)   File
> "/usr/local/lib/python2.7/site-packages/grpc/_plugin_wrapping.py",
> line 106, in __call__
>     AuthMetadataPluginCallback(wrapped_cygrpc_callback))   File "/usr/local/lib/python2.7/site-packages/google/auth/transport/grpc.py",
> line 73, in __call__
>     callback(self._get_authorization_headers(context), None)   File "/usr/local/lib/python2.7/site-packages/google/auth/transport/grpc.py",
> line 61, in _get_authorization_headers
>     headers)   File "/usr/local/lib/python2.7/site-packages/google/auth/credentials.py",
> line 121, in before_request
>     self.refresh(request)   File "/usr/local/lib/python2.7/site-packages/google/oauth2/service_account.py",
> line 310, in refresh
>     request, self._token_uri, assertion)   File "/usr/local/lib/python2.7/site-packages/google/oauth2/_client.py",
> line 143, in jwt_grant
>     response_data = _token_endpoint_request(request, token_uri, body)   File
> "/usr/local/lib/python2.7/site-packages/google/oauth2/_client.py",
> line 98, in _token_endpoint_request
>     body = urllib.parse.urlencode(body) AttributeError: 'Module_six_moves_urllib_parse' object has no attribute 'urlencode'
> )>)

我认为问题与我的信用有关,因为上面写着状态码。未经验证,但我无法修复此问题。有人能帮忙吗?谢谢

共有1个答案

夹谷宜民
2023-03-14

TL;DR-如您所观察到的,您的凭据有问题。使用应用程序默认凭据将更加简单,并使您的应用程序可以跨多个环境移植。更具体地说,如果您已经在gcloud中拥有一组可用凭据,则可以使用gcloud auth Application Default login在gcloud中一次性激活应用程序默认凭据。

Greg,我在我的机器上尝试了这个示例,遵循了Cloud Vision API客户端库页面上提到的步骤,它对我很有用。

以防万一,如果步骤不清楚,我会带你过去:

>

pip安装--升级google cloud vision

在计算机/docker容器上设置应用程序默认凭据。您似乎提到您成功运行了gcloud init。这不足以设置应用程序默认凭据。相反,您必须运行步骤中提到的以下命令,该命令将要求您在浏览器中打开链接,并且您必须将浏览器中的确认信息粘贴回命令行。

gcloud验证应用程序默认登录

下载测试图像wakeupcat。jpg或使用自己的图像。遗憾的是,这一部分在页面上没有明确提及。

创建一个名为“cloud vision example”的文件。py或您喜欢的具有以下内容的任何其他名称(注意:我已在此处更新了图像文件路径):

云视觉示例。py

import io
import os

# Imports the Google Cloud client library
from google.cloud import vision

# Instantiates a client
vision_client = vision.Client()

# The name of the image file to annotate
file_name = os.path.join('.', 'wakeupcat.jpg')

# Loads the image into memory
with io.open(file_name, 'rb') as image_file:
    content = image_file.read()
    image = vision_client.image(
        content=content)

# Performs label detection on the image file
labels = image.detect_labels()

print('Labels:')
for label in labels:
    print(label.description)

输出:

$ python cloud-vision-example.py
Labels:
cat
photo caption
small to medium sized cats
cat like mammal
whiskers
snout
kitten
asian

>

如果未设置GOOGLE\u APPLICATION\u凭据,客户端库将尝试使用gcloud应用程序默认凭据(应在此之前设置)。

如果您的应用程序正在app Engine或Compute Engine上运行,则将使用关联的内置服务帐户作为最后手段。

 类似资料:
  • 问题内容: 我们正在使用Flask作为我们的API之一,我只是想知道是否有人知道如何返回HTTP响应201? 对于诸如404之类的错误,我们可以致电: 但是对于201我得到 LookupError:201都不例外 我是否需要创建自己的例外,像这样的文档? 问题答案: 你可以在这里阅读。

  • 问题内容: 我正在使用Vim编写Python代码,每次我想运行我的代码时,都在Vim中键入以下代码: 这令人沮丧,所以我一直在寻找一种更快的方法来在Vim中运行Python代码。从终端执行Python脚本吗?我正在使用Linux。 问题答案: 如何将-添加到您的-file,创建映射: 然后您可以按来执行当前缓冲区 说明: :Vim将自动执行的命令(此处:如果您打开python文件) :创建在插入/

  • 我克隆了这个存储库https://github.com/TomasMikula/RichTextFX 一切都很好,智力也没有抱怨。 然后我尝试在intelliJ中运行CloneDemo(包括参数),结果就是这样。有什么想法吗? 演示模块的gradle脚本构建了一个fatJar。但是intelliJ没有使用这个。当用jar运行程序时,它不会出现问题。

  • 我在docker容器中运行了量角器硒测试。我必须测试一个不安全的网站。对于其中一个函数,API调用从支持的chrome返回一些数据,返回状态代码400。我在量角器配置文件中添加了以下内容: chrome参数(“--headless”,“--no sandbox”,“--disable dev shm usage”) 能力: 我还添加了以下内容。环境文件: 以下是我收到的网络日志: 需要注意的是,当

  • 问题内容: 我需要在运行时为方法生成代码。能够运行任意代码并具有文档字符串非常重要。 我想出了一个结合和的解决方案,这是一个虚拟的示例: 是否有更好/更安全/更惯用的方式获得相同的结果? 问题答案: 基于Theran的代码,但将其扩展为类的方法: 应该打印:

  • 我有一个安装了python和java的docker映像,现在我想将这两个进程作为docker的子进程运行。 我查看了这篇文章,它解释了如何在安装了docker和python的情况下准备图像。它并没有解释如何让它们都运行。如何使用python和Java运行Docker? 我检查了如何在dockerhttps://runnable.com/docker/rails/run-multiple-proce