📰 正文
smolvlm-realtime-webcam是一个基于 视觉语言模型(VLM) 的开源演示项目,它让你可以通过电脑摄像头,实时捕捉画面并用小型 AI 模型进行实时图像理解和描述。
项目完全本地运行,不依赖云服务。
低资源环境推理:在没有大型GPU或云服务的情况下运行多模态模型
快速交互体验:结合 HTML 摄像头获取与 llama.cpp 推理流程,打造“开即用”的视觉 AI 演示
比如你打开网页,点击开始,它就会通过摄像头看到你,然后生成一句话,比如:
“这是一个人在房间里看着屏幕。”
有什么用?
🧪 演示 AI 视觉能力(非常适合教学和展示)
🔒 全本地运行,不联网也能用(保护隐私)
💻 可运行在低配设备(无需大模型或云服务)
🧩 可拓展为智能摄像头、助理机器人、物体识别系统等
项目用到了什么技术?
🔧 技术方法详解
- 🖼️ 图像捕获与编码(前端)
使用浏览器原生的 navigator.mediaDevices.getUserMedia() API 打开摄像头。
通过
示例 JavaScript 伪代码:
canvas.toDataURL("image/jpeg"); // 输出 base64 编码图像
- 🔄 前端与模型的交互机制
页面中通过 JavaScript 向 llama.cpp 服务端发送 POST 请求,请求体包括:
{
"image": "<base64图像数据>",
"prompt": "Describe the image in detail."
}
请求格式可能为 llava-serve 接口兼容结构或 llama.cpp 自定义 JSON 协议。
返回结果通常是纯文本字符串(或经修改为 JSON)。
- ⚙️ 后端推理(llama.cpp)
llama.cpp 是 Meta 原始 LLaMA 模型的高效 C++ 实现,可加载 GGUF 格式模型,支持 Web 服务模式(通过 ./server 启动)。
支持多种优化手段:
-ngl 99 启用 GPU 加速
多线程(通过 -t 参数)优化并发性能
模型加载示例:
./server -hf ggml-org/SmolVLM-500M-Instruct-GGUF -ngl 99
- 🧠 多模态模型 SmolVLM 的调用机制
SmolVLM 是类似 LLaVA 架构的小型 VLM 模型(500M 参数量):
接收:
图像编码(base64 或 tensor)
Prompt 指令(文本)
模型内部:
图像通过视觉编码器(ViT 等) → 转为 token 嵌入
文本通过 tokenizer → token 嵌入
多模态融合后由 LLM 输出自然语言回答
输出:
图像描述、问答、标签列表等
💡 前端代码关键逻辑(index.html)
<script>
// 拍摄一帧并编码为图像
function captureFrame() {
ctx.drawImage(video, 0, 0);
const imgData = canvas.toDataURL("image/jpeg");
sendToServer(imgData);
}
// 构造并发送 JSON 请求到 llama server
function sendToServer(imageData) {
fetch("http://localhost:8080", {
method: "POST",
body: JSON.stringify({
image: imageData,
prompt: "Describe what you see."
})
})
.then(res => res.text())
.then(result => {
document.getElementById("output").innerText = result;
});
}
</script>
📈 性能考虑与优化点
🔮 可扩展应用建议(基于当前技术)
语音扩展:
返回结果通过 Web Speech API 转为语音 → 类似“说话的 AI 摄像头”。
多模态对话场景:
添加对话框与历史记录,模拟语音/文字交互助手。
物体检测 + 提示生成:
增加检测模块(如 YOLOv8)先识别物体,再提示 SmolVLM 生成描述。
动作检测/连续帧分析:
基于多个帧的图像流做场景变化描述,接近视频理解。
GitHub:https://github.com/ngxson/smolvlm-realtime-webcam