基于文心视觉大模型的AI 智能视觉识别助手 demo。本项目将使用 Python 编写核心逻辑,结合 OpenCV 调用摄像头,并通过百度文心大模型的 API 实现多模态(看图说话)交互。
交互流程如下图:
第一步:环境准备与依赖安装
在 RDK X3 的终端中,我们需要安装基础的 Python 依赖库。OpenCV 用于控制摄像头,requests 用于发送网络请求。
# 更新软件源并安装 pip(如果尚未安装)
sudo apt update
sudo apt install python3-pip -y
安装必要的 Python 库
pip3 install opencv-python requests
第二步:获取文心大模型 API Key
- 访问 百度智能云千帆大模型平台。
- 注册/登录账号,完成实名认证。
- 在控制台创建一个应用,获取你的
API_KEY和SECRET_KEY。
第三步:编写核心 Python 代码
在 RDK X3 上新建一个名为 vision_assistant.py 的文件,将以下代码复制进去。
注意:请将代码开头的 YOUR_API_KEY 和 YOUR_SECRET_KEY 替换为你自己的真实密钥。
import cv2
import base64
import requests
import json
# ================= 配置区域 =================
API_KEY = "YOUR_API_KEY"
SECRET_KEY = "YOUR_SECRET_KEY"
# 文心多模态模型接口(以 ernie-vilg-v2 为例,具体以官方文档最新模型为准)
MODEL_URL = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/ernie-vilg-v2"
# ===========================================
def get_access_token():
"""获取百度 API 的 Access Token"""
url = "https://aip.baidubce.com/oauth/2.0/token"
params = {
"grant_type": "client_credentials",
"client_id": API_KEY,
"client_secret": SECRET_KEY
}
response = requests.post(url, params=params)
return response.json().get("access_token")
def capture_image():
"""调用摄像头拍照并返回 Base64 编码的图片"""
print("📸 正在启动摄像头,3秒后自动拍照...")
cap = cv2.VideoCapture(0) # 0 代表默认摄像头,如果是 USB 摄像头可能是 1
if not cap.isOpened():
print("❌ 无法打开摄像头,请检查连接!")
return None
# 等待摄像头预热
import time
time.sleep(3)
ret, frame = cap.read()
cap.release()
if not ret:
print("❌ 拍照失败!")
return None
# 保存图片方便调试(可选)
cv2.imwrite("capture.jpg", frame)
print("✅ 拍照成功,已保存为 capture.jpg")
# 将图片转换为 Base64 格式
_, buffer = cv2.imencode('.jpg', frame)
image_base64 = base64.b64encode(buffer).decode('utf-8')
return image_base64
def ask_ernie_vlm(image_base64, prompt):
"""向文心多模态大模型发送请求"""
access_token = get_access_token()
url = f"{MODEL_URL}?access_token={access_token}"
payload = json.dumps({
"messages": [
{
"role": "user",
"content": [
{
"type": "image",
"data": image_base64 # 传入 Base64 图片数据
},
{
"type": "text",
"text": prompt # 传入你的文字提问
}
]
}
]
})
headers = {'Content-Type': 'application/json'}
print("🚀 正在向文心大模型发送请求,请稍候...")
response = requests.post(url, headers=headers, data=payload)
if response.status_code == 200:
result = response.json()
# 提取模型返回的文本内容
return result.get("result", "未获取到回复")
else:
return f"❌ 请求失败: {response.text}"
def main():
print("🤖 欢迎使用 RDK X3 AI 智能视觉识别助手!")
# 1. 拍照
img_base64 = capture_image()
if not img_base64:
return
# 2. 输入你想问的问题
# 你可以在这里修改默认问题,或者改为 input() 让用户输入
question = input("👉 请输入你想问的问题(例如:这张图里有什么?/ 用这些食材能做什么菜?):")
if not question:
question = "请详细描述这张图片的内容。"
# 3. 调用大模型并打印结果
answer = ask_ernie_vlm(img_base64, question)
print("\n" + "="*30)
print(f"💡 文心大模型回复:\n{answer}")
print("="*30 + "\n")
if __name__ == "__main__":
main()
第四步:运行与测试
-
确保你的 CSI 或 USB 摄像头已经正确连接到 RDK X3。
-
在终端中运行脚本:
-
python3 vision_assistant.py
交互过程:
-
程序会提示“3秒后自动拍照”,请提前把摄像头对准你想识别的物体(比如冰箱里的食材、桌上的英文书)。
-
拍照成功后,终端会提示你输入问题。你可以输入:“用这些食材能做什么菜?” 或者 “翻译图中的英文”。
-
稍等几秒,文心大模型的回答就会直接打印在终端里。
进阶优化建议
-
增加语音交互:结合 RDK X3 的音频接口,使用百度的语音识别(ASR)和语音合成(TTS)API,把“输入问题”和“打印结果”改成“直接问”和“直接读出来”,体验会像智能音箱一样流畅。
-
接入物理按键:利用 RDK X3 的 GPIO 接口接一个实体按钮,按下按钮触发拍照,比倒计时拍照更符合实际使用场景。
-
屏幕显示:如果 RDK X3 接了显示屏,可以使用
cv2.imshow()实时显示摄像头画面,拍照后直接把大模型的回答渲染在屏幕上。
