基于文心视觉大模型的AI 智能视觉识别助手

基于文心视觉大模型的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

  1. 访问 百度智能云千帆大模型平台
  2. 注册/登录账号,完成实名认证。
  3. 在控制台创建一个应用,获取你的 API_KEYSECRET_KEY

第三步:编写核心 Python 代码

在 RDK X3 上新建一个名为 vision_assistant.py 的文件,将以下代码复制进去。

:warning: 注意:请将代码开头的 YOUR_API_KEYYOUR_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()

第四步:运行与测试

  1. 确保你的 CSI 或 USB 摄像头已经正确连接到 RDK X3。

  2. 在终端中运行脚本:

  3. python3 vision_assistant.py
    

交互过程

  • 程序会提示“3秒后自动拍照”,请提前把摄像头对准你想识别的物体(比如冰箱里的食材、桌上的英文书)。

  • 拍照成功后,终端会提示你输入问题。你可以输入:“用这些食材能做什么菜?” 或者 “翻译图中的英文”。

  • 稍等几秒,文心大模型的回答就会直接打印在终端里。

进阶优化建议

  • 增加语音交互:结合 RDK X3 的音频接口,使用百度的语音识别(ASR)和语音合成(TTS)API,把“输入问题”和“打印结果”改成“直接问”和“直接读出来”,体验会像智能音箱一样流畅。

  • 接入物理按键:利用 RDK X3 的 GPIO 接口接一个实体按钮,按下按钮触发拍照,比倒计时拍照更符合实际使用场景。

  • 屏幕显示:如果 RDK X3 接了显示屏,可以使用 cv2.imshow() 实时显示摄像头画面,拍照后直接把大模型的回答渲染在屏幕上。