OpenAI 推出的视觉识别 API 为我们提供了令人惊叹的能力,可以根据图像和文字提示生成文本描述。本文将深入剖析一段 Python 代码,它利用 OpenAI 的视觉识别功能来分析图像并生成文本描述。
代码
import base64import requestsimport os
# 调用openai的视觉识别,接受提示和图像路径作为参数,并返回OpenAI API的响应def analyze_image(prompt, image_path): # 从环境变量中获取OpenAI API Key api_key = os.getenv('OPENAI_API_KEY')
# 创建一个函数,该函数接受图像路径作为参数,并返回编码后的图像 def encode_image(image_path): with open(image_path, "rb") as image_file: return base64.b64encode(image_file.read()).decode('utf-8')
# 获取base64字符串 base64_image = encode_image(image_path)
headers = { "Content-Type": "application/json", "Authorization": f"Bearer {api_key}" }
payload = { "model": "gpt-4-vision-preview", "messages": [ { "role": "user", "content": [ { "type": "text", "text": prompt }, { "type": "image_url", "image_url": { "url": f"data:image/jpeg;base64,{base64_image}" } } ] } ], "max_tokens": 1000 }
response = requests.post("https://api.openai.com/v1/chat/completions", headers=headers, json=payload) return response.json()['choices'][0]['message']['content']
if __name__ == "__main__": prompt = "生成一段描述这张图片的文字" image_path = r"D:\wenjian\临时\blob1.jpg" response = analyze_image(prompt, image_path) print(response)
代码结构
提供的代码分为三个主要部分:
analyze_image 函数:接受提示和图像路径作为输入,负责调用 OpenAI API 并返回视觉识别的结果。
encode_image 函数:将图像文件转换为 base64 编码的字符串,以便发送给 OpenAI API。
主程序:调用 analyze_image 函数并打印生成的文本描述。
算法和数据结构
代码中没有特别的算法或数据结构。它主要依赖于 OpenAI API 来执行视觉识别任务。
复杂或不寻常的方面
代码中最复杂的部分是构造 OpenAI API 请求的有效负载。有效负载包含有关提示、图像、模型和最大令牌数量的信息。
潜在限制和改进建议
该代码的一个潜在限制是它依赖于 OpenAI API 的可用性和响应时间。为了提高可靠性,可以考虑使用错误处理机制和重试逻辑。
可以改进代码的一个方面是将图像预处理步骤抽象到一个单独的函数或类中。这将提高代码的可维护性和可读性。
编程语言和库
代码使用 Python 3 和以下库:
base64:用于将图像转换为 base64 编码字符串
requests:用于与 OpenAI API 通信
如何使用代码
要使用提供的代码,需要设置 OpenAI API 凭据并将其存储在环境变量 OPENAI_API_KEY 中。然后,可以按照以下步骤运行代码:
准备图像和提示。
调用 analyze_image 函数,传递提示和图像路径。
打印生成的文本描述。
领取专属 10元无门槛券
私享最新 技术干货