Google 的 Vision Api protobuf 对 Python 字典的响应对象

2024-03-21

我正在开发一个项目,需要使用 Google 的 Vision API 分析图像并将响应发布到 Dynamodb 表。

我已经成功实现了 Vision API,但无法将其响应转换为 Python 字典。

这是我尝试过的:

       if form.is_valid():
            obj = form
            obj.imageFile = form.cleaned_data['imageFile']
            obj.textFile = form.cleaned_data['textFile']
            obj.save()
            print(obj.imageFile)
            # Process the image using Google's vision API
            image_path = os.path.join(settings.MEDIA_ROOT, 'images/', obj.imageFile.name)
            print(image_path)
            image = vision_image_manager(image_path)
            text_path = os.path.join(settings.MEDIA_ROOT, 'texts/', obj.textFile.name)
            text = nlp_text_manager(text_path)
            # print(image)
            # print(text)
            results = {
                'imageResponse': image,
                'textResult': text
            }
            print(results.values())
            print(type(results))
            post_to_dynamo_db(image, text)

这是 Vision api 实现:

def vision_image_manager(image_file):
    # Instantiates a client
    client = vision.ImageAnnotatorClient()
    file_name = str(image_file)
    with open(file_name, 'rb') as img_file:
        content = img_file.read()
    image = types.Image(content=content)
    response = client.label_detection(image=image)
    labels = response.label_annotations
    print('Labels:')
    for label in labels:
        print(label.description)
    return labels

这是post_to_dynamo_db功能:

def post_to_dynamo_db(image, text):
session = boto3.Session(
    aws_access_key_id=settings.AWS_SERVER_PUBLIC_KEY,
    aws_secret_access_key=settings.AWS_SERVER_SECRET_KEY
)
client = session.resource('dynamodb')
table = client.Table('basetbl')
result_dict = {
    'image': image,
    'text': text
}
json_dict = dict_to_item(result_dict)
# item = dict_to_item(result_dict)
table.put_item(
    Item={
        'id': int(generate_pid()),
        'response_obj': json_dict
    }
)

现在,它不会返回任何错误,但response_obj没有发布在数据库表中,因为它不是对象的正确形式,这里的问题是<class 'google.protobuf.pyext._message.RepeatedCompositeContainer'>从 Google API 返回的响应类型。


从 Vision API 获得正确的 Python 友好响应的最佳方法是通过 Google 的Discovery服务。

以下是这对您的作用:

def vision_image_manager(image_file):
    # Instantiates a client
    service = discovery.build('vision', 'v1', credentials=credentials)
    # text.png is the image file.
    file_name = str(image_file)
    with open(file_name, 'rb') as image:
        image_content = base64.b64encode(image.read())
        service_request = service.images().annotate(body={
            'requests': [{
                'image': {
                    'content': image_content.decode('UTF-8')
                },
                'features': [{
                    'type': 'LABEL_DETECTION',
                }]
            }]
        })
    response = service_request.execute()
    print(response['responses'])
    res_dict = dict(response)
    return res_dict
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Google 的 Vision Api protobuf 对 Python 字典的响应对象 的相关文章

随机推荐

  • 红宝石脱轨

    Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 有时感觉我的公司是世界上唯一一家使用Ruby而不使用Ruby on Rails的公司 以至于R
  • 如何从 perl6 调用 Java 方法

    use java util zip CRC32 from
  • 在 Google 应用引擎上部署失败

    我有一个java应用程序 spring mvc jpa 我正在尝试将其部署在谷歌应用程序引擎上 由于某种原因 部署完成后出现以下错误 20 扫描本地磁盘上的文件 25 正在启动更新 错误详情 2011 年 2 月 26 日上午 10 43
  • 我们可以优化代码来降低功耗吗?

    有没有什么技术可以优化代码以确保更低的功耗 架构是ARM 语言是C 来自 ARM 技术参考网站 ARM11 MPCore 的特性 提高能源效率的处理器 效率包括 准确的分支和子程序返回预测 减少数量 错误的指令获取和 解码操作 使用物理寻址
  • 将 pandas DataFrame 列扩展为多行

    如果我有一个DataFrame这样 pd DataFrame name John days 1 3 5 7 给出这个结构 days name 0 1 3 5 7 John 如何将其扩展为以下内容 days name 0 1 John 1 3
  • 在存储过程中设置结果表名称

    返回多个结果的存储过程 CREATE PROCEDURE dbo GetMultipleTable AS BEGIN if exists select something from somewhere where somecondition
  • 在Java中生成泊松到达

    我想在Java中创建一个函数 在给定平均到达率 lambda 和平均服务率 mu 的情况下生成泊松到达 在我的示例中 每天有 2 2 个请求 换句话说 每天有 2 2 个到达 平均服务时间为 108 小时 考虑到我的程序在 t 0 分钟开始
  • 如何使 C# Windows 运行时组件类型相等?

    我正在用 C 编写一个 Windows 运行时组件 我想在我的一些类型中实现 IEquatable 接口 我不需要向组件的使用者公开 Equals 方法 我只是希望我的单元测试能够在实例之间进行比较 不允许实现 IEquatable 因为它
  • “As Dictionary”和“As Scripting.Dictionary”是否等效(对于 VBA 早期绑定)?

    使用早期绑定和 Microsoft 脚本运行时库创建字典对象时 同一事物似乎有 2 个等效的类型名称 Dim dict as Dictionary Set dict New Dictionary and Dim dict as Script
  • 性能:具有多次调用的全局和局部声明

    为什么R中无论在哪里声明函数 两者性能几乎相同 library microbenchmark f1 lt function lapply 1 100000 function x fun lt function 1 10000 fun f2
  • 合并两个表并为 R 中的每个表添加标题

    我想并排显示两个回归分析的结果 比如说逻辑回归和 COX 回归 变量以行形式呈现 p OR HR 和置信区间的相应数据以列形式呈现 因此 列名称不匹配 OR 位于左侧 HR 位于右侧 我尝试了 cbind 但遇到了以下问题 1 如果由于变量
  • 如何使用最小起订量模拟将项目添加到存储库或 DbContext?

    我见过的对存储库使用最小起订量的示例仅展示了如何模拟返回的内容 我有一个有点奇怪的要求 当执行查询时 如果条件存在 则应将某个项目添加到存储库中 我想知道如何在不查询数据库的情况下测试它 我知道如何模拟现有条件 但是如何设置模拟以便可以测试
  • 如何在 tkinter 文本小部件中突出显示文本

    我想知道如何根据某些模式改变某些单词和表达方式的风格 我正在使用Tkinter Textwidget 我不知道如何做这样的事情 与文本编辑器中语法突出显示的想法相同 我不确定这是否是用于此目的的正确小部件 它是用于这些目的的正确小部件 基本
  • Django Rest框架批量创建

    我正在尝试制作一个 api 您可以使用 django Rest 框架通过单个 Post 请求创建多个对象 但是 我的序列化器提供了一个我不明白的错误 首先这是我的代码的骨架 我的序列化器 class MyModelSerializer se
  • MIPS——这重要吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我的问题 了解 MIPS 编程语言有用吗 我是一名计算机科学学生 正在上一门以 MIPS 为重点的汇编课程 我很擅长使用高级语言进行编写 但 M
  • 类型错误:不是构造函数

    我只是将代码用作有关 JavaScript 类的学习练习 该代码产生 TypeError SimpleLogger 不是构造函数 该类似乎已导出 但我无法在 main js 文件中实例化它 我已经减少了代码以仅显示问题 我想知道是否有人能发
  • 从 ant 类路径中排除 jar

    我正在尝试在一些使用 ant 脚本的遗留项目上进行 干净的 Maven 设置 我对蚂蚁了解不多 所以我的问题可能显得很幼稚 我快完成了 但是由于类路径中存在冗余 交付蚂蚁脚本失败了 如果我理解构建 这些行应该添加到 提供 范围内每个库的类路
  • 多个构造函数与 Structuremap 改变范围?

    为了说明问题 这是我的设置的简化版本 我有一家这样的工厂 public interface IFactory public class Factory IFactory public Factory Console WriteLine pa
  • 同一 AWS Cognito 用户池中的多个应用程序对于同一用户来说 cognitoID 是否相同?

    我有一个 Cognito 用户池 可以与我的 iOS 和 Android 应用程序配合良好 该池有一个客户端密钥 我现在想建立网络身份验证 Cognito 的 javascript sdk 不支持使用应用程序客户端密钥配置的用户池 假设我在
  • Google 的 Vision Api protobuf 对 Python 字典的响应对象

    我正在开发一个项目 需要使用 Google 的 Vision API 分析图像并将响应发布到 Dynamodb 表 我已经成功实现了 Vision API 但无法将其响应转换为 Python 字典 这是我尝试过的 if form is va