网站首页 > 技术文章 正文
OpenAI 推出的视觉识别 API 为我们提供了令人惊叹的能力,可以根据图像和文字提示生成文本描述。本文将深入剖析一段 Python 代码,它利用 OpenAI 的视觉识别功能来分析图像并生成文本描述。
代码
import base64
import requests
import 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 函数,传递提示和图像路径。
- 打印生成的文本描述。
猜你喜欢
- 2024-10-16 【验证码逆向专栏】百某网数字九宫格验证码逆向分析
- 2024-10-16 jquery-利用canvas让图片旋转角度
- 2024-10-16 一文带你搞懂JS实现压缩图片 js压缩上传图片
- 2024-10-16 前端性能优化之请求优化 前端性能优化问题
- 2024-10-16 Serverless 实战:如何为你的头像增加点装饰?
- 2024-10-16 谈谈图片上传及canvas压缩的流程 js 图片压缩后上传
- 2024-10-16 妹子委婉地和男友说没钱了,结果差点换来一张luo照?
- 2024-10-16 Blob-对象介绍 对象object
- 2024-10-16 《小白HTML5成长之路51》canvas压缩图片上传功能的原理
- 2024-10-16 Dom-to-image截图将html生成图片 html2canvas截图
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)