如何利用x86单板机LattePanda Sigma(x86 SBC/单板机)+Intel 结合mini-cpm-v与qwen2.5vl视觉模型,将18000产品图片中实现alt文本自动生成与SEO优化。从而提升网站SEO表现的真实应用案例。分享了技术原理、实施步骤、AB测试方法、性能数据和常见问题,帮助企业理解基于单板机的AI边缘计算在SEO中的价值。平均点击率从0.5%提高的0.7%、平均排名从30.8 提高到18.4。这里面我们有对图片添加了结构化数据。
![]()
通过AI生成的alt属性,GSC 平均点击率从0.5%提高的0.7%、平均排名从30.8 提高到18.4
背景
我在分析网站时发现了一个巨大的问题:我们大约有3000个产品页面,每个产品大约有6张图片,总计接近18000张图像,其中95%以上没有设置alt属性。人工补齐 18 k 条 Alt 按 60 s/张需 300 人时,成本 2.4 w 元。于是我把目光投向“边缘 AI”——让单板机自己“看”自己“写”。
什么是图片alt属性,为什么对SEO如此重要?
图片alt文本(alternative text)是HTML标签 的描述性文字,它的作用不仅仅是辅助视觉障碍用户理解图像内容,更是搜索引擎优化(SEO)中的关键因素。
搜索引擎本身无法像人类一样“看懂”图像,因此它会依赖alt属性来理解图片的内容、场景与相关性。如果缺少alt属性:
- 图片无法出现在Google图片、Bing图片等搜索结果中。
- 页面相关性降低,长尾关键词覆盖度不足。
- 无障碍体验下降,用户体验不佳。
在电商网站中,这个问题尤其严重。每个产品都有多张图片,如果alt文本缺失,就等于丢掉了巨大的长尾流量机会。
为什么选择LattePanda Sigma?
LattePanda Sigma是一款基于x86架构的高性能单板机(x86 SBC),相比ARM架构的树莓派、RISC-V开发板,它最大的优势在于:
完整的x86生态:能原生运行Windows和Linux,兼容主流AI框架与开发工具。
性能更强:适合运行ollama这样的本地大语言模型(LLM)与视觉模型。
边缘计算友好:直接在本地处理,不依赖云端,降低延迟和带宽消耗。
我正是利用LattePanda Sigma,把AI模型部署在边缘侧,实现了大规模图片alt属性的自动生成。
技术架构与原理
模型选择:ollama + 双视觉模型+文生文 AB测试
在实践中,我选择了ollama来运行两个不同的模型:
- mini-cpm-v(视觉模型):擅长从图像中提取文字与语义信息。
- qwen2.5vl(视觉模型):擅长从图像中提取文字与语义信息。比较能理解提示词,生成内容比较短。
ollama + 2种视觉模型对比 mini-cpm-v VS qwen2.5vl
通过对比不同生成方式的alt文本质量,我们能持续优化模型提示词和生成逻辑。
Ollama 部分Python代码
- import base64
- import requests
- from flask import Flask, request, jsonify, abort
-
- # 初始化Flask应用
- app = Flask(__name__)
-
- # 请求模型验证函数
- def validate_image_request(data):
- if not data or "prompt" not in data or "image" not in data:
- return False, "请求必须包含prompt和image字段"
- if not isinstance(data["prompt"], str) or not isinstance(data["image"], str):
- return False, "prompt和image必须是字符串类型"
- return True, "验证通过"
-
- class AltTextExtractor:
- #qwen2.5vl:latest
- #minicpm-v:latest
- def __init__(self, model_name="minicpm-v:latest"):
- self.model_name = model_name
- self.ollama_base_url = "http://localhost:11434"
-
- def check_ollama_health(self):
- """Check if Ollama is running and accessible"""
- try:
- response = requests.get(f"{self.ollama_base_url}/api/tags", timeout=5)
- return response.status_code == 200
- except requests.exceptions.RequestException:
- return False
-
- def get_supported_image_extensions(self):
- """Return supported image file extensions"""
- return {'.jpg', '.jpeg', '.png', '.gif', '.bmp', '.webp', '.tiff', '.tif'}
-
- def download_image(self, image_url):
- """从URL下载图片并返回字节数据"""
- try:
- response = requests.get(image_url, timeout=180)
- response.raise_for_status()
- return response.content
- except Exception as e:
- abort(400, description=f"无法下载图片: {str(e)}")
-
- def encode_image(self, image_data):
- """将图片字节数据编码为base64字符串"""
- return base64.b64encode(image_data).decode('utf-8')
-
- def extract_alt_text(self, prompt, image_url,flag):
- """根据标题和图片URL提取alt文本"""
- try:
- print(f"正在处理图片:{image_url}")
- # 下载并编码图片
- image_data = self.download_image(image_url)
- base64_image = self.encode_image(image_data)
-
-
- prompt_ = """
- 你是一名XXX资深的on-page seo,请描述图片内容(图片包括角度如:Angled shot of、
- Overhead shot of、Front of、Angled shot of back of、Side shot showing、Back shot showing),
- 总结符合google对image alt属性的要求,
- 用英文输出一句话,小于125个字符。不要包含双引号。
-
- """
-
- self.model_name = self.model_name
- if flag==0:
- self.model_name = "qwen2.5vl:latest"
- print("====",self.model_name,flag)
- payload = {
- "model": self.model_name,
- "prompt": prompt,
- "images": [base64_image],
- "stream": False,
- "options": {
- "temperature": 0.3,
- "top_p": 0.8
- }
- }
- print("====",self.model_name,prompt)
- # Send request to Ollama
- response = requests.post(
- f"{self.ollama_base_url}/api/generate",
- json=payload,
- timeout=90
- )
- print(response)
- if response.status_code == 200:
- result = response.json()
- #print("Generated Text-1:", result)
- alt_text = result.get("response", "").strip()
- print("*** Generated Text-2 ***: ", alt_text)
- return {"alt": f"{alt_text}"}
- else:
- print(f"Error: Ollama returned status code {response.status_code}")
- print("Generated none_1:")
- return {"alt": "none_1"}
-
- except Exception as e:
- print(f"Error processing {prompt}: {str(e)}")
- print("Generated none_2:")
- return {"alt": "none_2"}
复制代码
数据处理与任务调度
整个流程由两个部分组成:
- 图生文(Vision-to-Text):Python 脚本调用ollama接口,运行在sigma和Intel机器上,负责批量解析产品图片。
- 文生文(Text-to-Text):在实践测试过程中发现视觉模型思考能力较弱,将图像结果与标题、产品关键词结合,再通过LLM qwen3(思考模型)优化alt描述。实现ollama + 视觉模型 + 文生文三级流水线
- 定时任务:我用Golang写了一个定时任务,编译成.exe,直接运行在LattePanda Sigma上,每天自动批量生成和更新alt属性。
- Golang 定时任务.exe ─┬─ 每5分钟调用一次,查询没有alt属性的图片地址
- ├─ Python pipeline.py
- │ ├─ A 组:调用 ollama mini-cpm-v ┈┐
- │ └─ B 组:调用 ollama qwen2.5-vl ┈┘
- │ └─ 合并候选文案
- ├─ Prompt Engineer 二次生成
- │ └─ 结合标题+关键词+类目等,走 qwen3 文生文 AB 测试
- └─ 回写 MySQL,标记“已生成”
复制代码
通过对产品经理、运营等用户问卷调查,2个模型得分2:2,线上决定采用了AB测试的方式。
基于X86 单板机针对2种视觉模型的问卷调查
这样,整个网站每天都能有数百张图片获得新的SEO友好描述。
经验总结
- 视觉模型并非万能:视觉模型只给“眼睛”,文案质量靠“文生文”二次把关,EEAT 得分更高。
- 提示词工程至关重要:在文生文优化时,我设计了结构化提示词,例如 {产品名} + {核心关键词} + {图片角度},极大提升了生成文本的SEO质量。
- 边缘计算让一切更高效:直接在LattePanda Sigma上运行,避免了云端费用与延迟问题,部署与运维更灵活。
常见疑问 FAQ
Q1: 为什么不用云端 API?
A: 试过,买的腾讯混元大模型。费用还是比较高,申请费用和测试都不太适合。放弃。在单板机或电脑本地跑零流量费,随便尝试 视频转文字也可以。
Q2: alt文本会不会生成重复? A2: 我在Python脚本中加入了去重逻辑,并结合标题、关键词,保证每张图的alt描述尽可能唯一。
Q3: mini-cpm-v与qwen2.5vl谁更好? A3: mini-cpm-v在OCR和图像描述上更稳,但qwen2.5vl结合文生文优化后,能生成更符合SEO需求的长尾描述。AB测试可以帮助持续改进。
Q4: LattePanda Sigma跑这些模型会不会过热? A4: 实测中目前一切正常,通过风扇散热即可稳定运行,不会影响定时任务。
Lattepanda Sigma + Intel 的设备图,和这骚气自制的散热设备
|