Python调用Openai接口实现图像分析 发表于 2024-08-05 更新于 2024-08-05
字数总计: 839 阅读时长: 3分钟 阅读量: 杭州
调用opanai库中的OpenAI接口实现。本文讨论的是openai-1.x以上版本,我在写这篇文章时使用的时openai-1.37。
1. 准备工作 在开始之前,你需要拥有一个openai平台的api_key
,可以去淘宝或官网购买,这里推荐淘宝。
因为国内商家为了防止因代理不稳定,且确保购买的号不被封号,使用的是中转接口(卖家服务器api负责转发消息问答)。
2. 开始 介绍两个函数接口。
OpenAI(base_url, api_key)
: chatgpt
应用client
创建接口,我们只需要指定base_url
和api_key
两个参数即可。base_url
表示的是我们上述提到的中专接口的地址,api_key
代表的是我们购买的平台的通行证。client.chat.completions.create(model, message)
: 创建对话,需要指定模型和问答小心内容。model
仅可指定你的api_key
允许的模型。
2.1 关于message
参数 上次介绍了基础问答的message
参数,是一个列表,包含了三个字典变量。其格式如下:
message = [ {"role" : "system" , "content" : "You are a expert in Python" }, {"role" : "user" , "content" : "help me filter the data by color" }, {"role" : "assistant" , "content" : "Answer in this format : 'data filtered : Your Filtered DATA' " } ]
这次的图片上传的massage
有所不同,其格式如下:
messages=[ { "role" : "user" ,"content" : [ { "type" : "text" , "text" : "What's in this image?" }, { "type" : "image_url" , "image_url" : {"url" : f"data:image/jpg;base64,{base64_image} " }, }, ], } ]
2.2 返回值 使用completion.choices[0].message
接受返回值,completion
即为在第2节开头提到的第二个函数的接收值。
它返回一个content
对象,里面包含了回答内容等信息。可以转换为字典来获取返回值。
completion = client.chat.completions.create( model = 'my model' , message = myMessage ) print (completion.choice[0 ].message.content)
2.3 示例 import osimport base64import requestsfrom openai import OpenAIdef encode_image (image_path ): with open (image_path, "rb" ) as image_file: return base64.b64encode(image_file.read()).decode('utf-8' ) image_path = "./Imgs/" imgs = os.listdir(image_path) base64_image = [encode_image(image_path + i) for i in imgs] client = OpenAI( base_url=Your_BASE_URL, api_key=Your_API_KEY) for i in range (len (base64_image)): response = client.chat.completions.create( model="gpt-4o" , messages=[ { "role" : "user" , "content" : [ {"type" : "text" , "text" : "What's in this image?" }, { "type" : "image_url" , "image_url" : {"url" : f"data:image/jpg;base64,{base64_image[i]} " }, }, ], } ], ) with open ("./results.txt" , 'a' , encoding='utf-8' ) as f: f.write(response.choices[0 ].message.content.replace("*" ,"" ).replace("#" ,"" ).replace(" " ,"" ) + "\n" ) f.write("===============================================================================\n" )
示例图片为:
输出为: