利用Python给图像添加标签

一、需求:

给指定的图片添加标签

二、代码:

# !/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']

猜你喜欢

转载自blog.csdn.net/xun527/article/details/131665047