利用Python给图像添加标签

news2025/4/16 23:20:49

一、需求:

给指定的图片添加标签

二、代码:

# !/usr/bin/env python
# coding: utf-8


import tkinter as tk
from tkinter import filedialog, messagebox
import os
import json
from google.protobuf.json_format import MessageToJson
from clarifai_grpc.channel.clarifai_channel import ClarifaiChannel
from clarifai_grpc.grpc.api import resources_pb2, service_pb2, service_pb2_grpc
from clarifai_grpc.grpc.api.status import status_code_pb2

# 授权密钥
API_KEY = '5************************************'
USER_ID = '3*********h'
APP_ID = 'my***************'

# 注册网址:https://www.clarifai.com/
# 网址注册后,拿授权密钥,每月1000次免费


def analyze_image(image_path):
    # 使用 Clarifai API 进行图像分析
    results = []
    channel = ClarifaiChannel.get_grpc_channel()
    stub = service_pb2_grpc.V2Stub(channel)
    metadata = (('authorization', 'Key ' + API_KEY),)
    userDataObject = resources_pb2.UserAppIDSet(user_id=USER_ID, app_id=APP_ID)

    with open(image_path, 'rb') as f:
        file_bytes = f.read()

    try:
        print(f"开始分析图像: {image_path}")  # 添加调试语句
        post_model_outputs_response = stub.PostModelOutputs(
            service_pb2.PostModelOutputsRequest(
                user_app_id=userDataObject,
                model_id='general-image-recognition',
                inputs=[
                    resources_pb2.Input(
                        data=resources_pb2.Data(
                            image=resources_pb2.Image(
                                base64=file_bytes
                            )
                        )
                    )
                ]
            ),
            metadata=metadata
        )
        print(f"图像分析完成: {image_path}")  # 添加调试语句
    except Exception as e:
        messagebox.showerror("错误", "图像分析失败,原因: " + str(e))
        return

    if post_model_outputs_response.status.code != status_code_pb2.SUCCESS:
        messagebox.showerror("错误", "模型输出提交失败,状态: " + post_model_outputs_response.status.description)
        return

        # 将获取到的结果转为 JSON
    json_result = MessageToJson(post_model_outputs_response)
    json_output = json.loads(json_result)
    print(json_output)


    # 从 JSON 结果中提取并显示关键信息
    for output in json_output["outputs"]:
        for concept in output['data']['concepts']:
            object_name = concept['name']
            results.append(object_name)

    return results


if __name__ == '__main__':
    image_path = r"D:\Desktop\tp.png"
    ret = analyze_image(image_path)

三、图片

 

四、结果

['interior design', 'luxury', 'contemporary', 'indoors', 'furniture', 'comfort', 'family', 'room', 'hotel', 'sofa', 'no person', 'minimalist', 'rug', 'chair', 'seat', 'lamp', 'coffee table', 'curtain', 'trading floor', 'mansion']

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/741398.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分布式系统常见问题

一.概述 分布式系统存在网络,时钟,以及许多不可预测的故障。分布式事务,一致性与共识问题,迄今为止仍没有得到很好的解决方案。要想完美地解决分布式系统中的问题不太可能,但是实践中应对特定问题仍有许多可靠的解决方…

rapo雷栢鼠标MT750L说明书(含驱动)

驱动下载:点击跳转至本站下载

Dbeaver客户端存入的DateTime与实际有偏差

前几天调试项目的时候,发现数据库里存入的时间DateTime与我写入的时间有偏差 这里有两列,Name是字符串类型的,Time是DateTime类型的,Name是以当前时间戳命令的,Time是直接存的当前时间,理论上两者是应该一…

PHP之 Socket实践

一 Socket简介 1.1 Socket(套接宇),用来描述IP地址和端口,是通信链的句柄,应用程序可以通过Socket向网络发送请求或者应答网络请求。 1.2 Socket是支持TCP/IP协议的网络通信的基本操作单元,是对网络通信过程中端点的抽象表示,包…

Vue之v-for(包含key内部原理讲解)

文章目录 前言一、v-for二、key1.介绍2.使用3.原理4.总结 总结 前言 v-for&#xff1a;列表渲染 一、v-for v-for将JSON数据中的数组或对象渲染出列表的样式呈现。 直接见代码实例&#xff0c;如下&#xff1a; <!DOCTYPE html> <html lang"en"><h…

多肽试剂84211-54-1,Cyclo(7-aminoheptanoyl-Phe-D-Trp-Lys-Thr[Bzl]),特点说明

----------资料编辑|陕西新研博美生物科技有限公司小编MISSwu--------- 多肽试剂 | 基础知识概述&#xff08;部分&#xff09;: 英文名称&#xff1a;Cyclo(7-aminoheptanoyl-Phe-D-Trp-Lys-Thr[Bzl]) CAS号&#xff1a;84211-54-1 分子式&#xff1a;C44H57N7O6 分子量&…

UE5_ 地编_siki海岛

1.开启水插件 制作流体 2.开启大陆地形的插件

《Kali渗透基础》08. 弱点扫描(二)

kali渗透 1&#xff1a;OpenVAS / GVM1.1&#xff1a;介绍1.2&#xff1a;安装1.3&#xff1a;使用 2&#xff1a;Nessus2.1&#xff1a;介绍2.2&#xff1a;安装2.3&#xff1a;使用 3&#xff1a;Nexpose 本系列侧重方法论&#xff0c;各工具只是实现目标的载体。 命令与工具…

JAVA并发专题(2)之JMMsynchronizedvolatile详解

一、什么是JMM模型 Java内存模型(Java Memory Model简称JMM)是一种抽象的概念&#xff0c;并不真实存在&#xff0c;它描述的是一组规则或规范&#xff0c;通过这组规范定义了程序中各个变量&#xff08;包括实例字段&#xff0c;静态字段和构成数组对象的元素&#xff09;的访…

Chapter 5: Loops and Iterations | Python for Everybody 讲义笔记_En

文章目录 Python for Everybody课程简介Loops and IterationsUpdating variablesThe while statementInfinite loopsFinishing iterations with continueDefinite loops using forLoop patternsCounting and summing loopsMaximum and minimum loopsDebuggingGlossary Python f…

Linux命令简单学习

文件 输出并覆盖到哪个文件夹 1>文件 正常输出并覆盖 2>文件 输出错误流到某个文件夹 nohup 不强杀不退出 软连接,注意这里需要绝对路径 %% 一个文字的 %%a 当前locale 的星期名缩写(例如&#xff1a; 日&#xff0c;代表星期日)%A 当前locale 的星期名全称 (如&…

wsl 1和wsl 2在形式上的区别

完整的比较请参考&#xff1a; 比较 WSL 版本 | Microsoft Learn 如果是已经安装完成&#xff0c;但安装的是wsl &#xff0c;之后想由 wsl 1升级到wsl 2&#xff0c;请参考&#xff1a;WSL1升级至WSL2_wsl1升级wsl2_goldVitaminC的博客-CSDN博客 在形式上&#xff0c;wsl 1是…

Android AccessibilityService 实现《李跳跳》功能

AccessibilityService&#xff08;无障碍服务&#xff09;是 Android 操作系统中的一个功能&#xff0c;旨在帮助用户具有视觉、听觉或运动上的障碍更轻松地使用设备。它是 Android 提供的一种特殊服务&#xff0c;可以接收设备上发生的各种事件&#xff0c;并提供自定义的反馈…

UWB的技术特点

近年来&#xff0c;超宽带(UWB)无线通信成为短距离、高速无线网络最热门的物理层技术之一。 UWB的产生与发展 超宽带(UWB)有着悠久的发展历史&#xff0c;但在1989年之前&#xff0c;超宽带这一术语并不常用&#xff0c;在信号的带宽和频谱结构方面也没有明确的规定。1989年&a…

2023年了,v-if和v-for的优先级千万别怼错了,可尴尬的...

前言 v-if和v-for到底是谁的优先级更高呢&#xff1f;在vue3版本出来之前你直接说v-for更高&#xff0c;我无法反驳你&#xff0c;但是老哥现在是2023年了&#xff0c;咱可不兴这样回答了&#xff0c;可尴尬的... 剖析 我们都知道&#xff0c;这个v-if是条件渲染&#xff0c;…

flutter开发实战-Running Gradle task ‘assembleDebug‘ 的解决方法

flutter开发实战-Running Gradle task ‘assembleDebug‘ 的解决方法 使用Android studio经常出现Running Gradle task ‘assembleDebug‘问题&#xff0c;记录一下解决方法。 一、在Android目录下更改build.gradle 将repositories中的google(), mavenCentral() repositori…

一、简单的Spring Authorization Server示例代码

需要有一定的OAuth2的基础 需要有一定的Spring Security基础 Spring Authorization Server 官方简介&#xff1a;Spring Authorization Server is a framework that provides implementations of the OAuth 2.1 and OpenID Connect 1.0 个人理解为OAuth 2.1 and OpenID Conne…

用技术指标伦敦金行情走势图

经常有投资者说&#xff0c;伦敦金行情走势图老是涨跌涨跌&#xff0c;抓不准它涨跌的规律&#xff0c;老是被它弄得头昏脑胀。其实看伦敦金行情走势图的方法有很多&#xff0c;最直接的就是使用技术指标。技术指标本来就是投资者为了避免伦敦金行情走势图上价格干扰性波动&…

玩转AI二维码:分享我的漂亮二维码生成秘诀

这几天我又生成了很多漂亮的二维码图片&#xff0c;有了一些感受和想法&#xff0c;特总结此文&#xff0c;分享给大家 先看效果&#xff0c;喜欢的可以继续读下去&#xff08;遵守平台规则&#xff0c;图片已阉割&#xff0c;需要更多图片参数的同学可直接看文章最后&#xf…

Leap AI + Python 开发绘图应用

使用python语言&#xff0c;并借助Leap AI网站的api key&#xff0c;可以轻松实现AI绘图功能。使用时&#xff0c;用户只要输入prompt提示词&#xff0c;几秒钟之内服务器就能生成图片并返回图片的链接地址。开发人员可以利用这个功能开发个性化的绘图软件&#xff0c;或者整合…