图像理解与生成
High Contrast
Dark Mode
Light Mode
Sepia
Forest
1 min read120 words

图像理解与生成

从看懂图片到创造图片——涵盖 OCR、Visual QA、DALL-E、Stable Diffusion 全链路。

图像理解能力

graph TB A[图像理解] --> B[分类] A --> C[检测] A --> D[描述] A --> E[OCR] A --> F[VQA] B --> B1[这是什么?
猫/狗/车] C --> C1[目标在哪里?
边界框] D --> D1[图中有什么?
自然语言描述] E --> E1[图中的文字?
文本提取] F --> F1[针对图片提问
推理回答] style A fill:#e3f2fd,stroke:#1976d2,stroke-width:2px

OCR 与文档解析

"""
OCR 实现方案
"""
from dataclasses import dataclass
@dataclass
class OCRResult:
"""OCR 结果"""
text: str
confidence: float
bounding_box: tuple = None
page: int = 1
class OCRPipeline:
"""OCR 处理流水线"""
# 方案对比
SOLUTIONS = {
"GPT-4o Vision": {
"优势": "理解上下文、处理复杂版面、多语言",
"劣势": "成本高、延迟高",
"适用": "复杂文档、需要理解内容的场景",
"成本": "~$0.01/页",
},
"Claude 3.5 Sonnet": {
"优势": "PDF 原生支持、长文档、精确提取",
"劣势": "成本较高",
"适用": "学术论文、技术文档",
"成本": "~$0.015/页",
},
"Tesseract": {
"优势": "免费开源、可离线",
"劣势": "复杂版面效果差",
"适用": "简单文档、印刷体",
"成本": "免费",
},
"PaddleOCR": {
"优势": "中文效果好、免费",
"劣势": "需要 GPU 加速",
"适用": "中文场景",
"成本": "免费",
},
}
@classmethod
def recommend(cls, scenario: str) -> str:
"""推荐 OCR 方案"""
recommendations = {
"简单文字": "Tesseract",
"中文文档": "PaddleOCR",
"复杂版面": "GPT-4o Vision",
"学术论文": "Claude 3.5 Sonnet",
"手写识别": "GPT-4o Vision",
}
return recommendations.get(scenario, "GPT-4o Vision")
def extract_with_vlm(
self, image_path: str, output_format: str = "markdown"
) -> dict:
"""
使用 VLM 进行 OCR
最佳 Prompt 模板
"""
prompts = {
"markdown": (
"请将图片中的所有文字内容提取出来,"
"使用 Markdown 格式保持原始排版。"
"表格用 Markdown 表格格式表示。"
),
"json": (
"请提取图片中的所有文字,"
"以 JSON 格式输出,包含字段名和对应值。"
),
"plain": "请提取图片中所有文字内容。",
}
return {
"model": "gpt-4o",
"prompt": prompts.get(output_format, prompts["plain"]),
"image": image_path,
"detail": "high",  # OCR 需要高精度
}
# 使用
pipeline = OCRPipeline()
print("=== OCR 方案对比 ===")
for name, info in pipeline.SOLUTIONS.items():
print(f"\n{name}:")
for k, v in info.items():
print(f"  {k}: {v}")
# 场景推荐
scenarios = ["简单文字", "中文文档", "复杂版面", "手写识别"]
print("\n=== 场景推荐 ===")
for s in scenarios:
print(f"  {s} → {pipeline.recommend(s)}")

图像生成

"""
图像生成方案与实践
"""
class ImageGenerator:
"""图像生成管理"""
MODELS = {
"DALL-E 3": {
"provider": "OpenAI",
"sizes": ["1024x1024", "1792x1024", "1024x1792"],
"cost": "$0.04-0.12/张",
"优势": "Prompt 理解强、安全过滤好",
"劣势": "风格受限、无法精确控制",
},
"Midjourney v6": {
"provider": "Midjourney",
"sizes": ["1:1", "16:9", "9:16"],
"cost": "$0.01-0.05/张",
"优势": "艺术质量最高、风格多样",
"劣势": "需要 Discord、API 有限",
},
"Stable Diffusion 3": {
"provider": "Stability AI / 开源",
"sizes": ["任意"],
"cost": "免费(自托管) / $0.03/张(API)",
"优势": "开源可定制、LoRA 微调",
"劣势": "需要 GPU、Prompt 技巧要求高",
},
"Flux": {
"provider": "Black Forest Labs",
"sizes": ["任意"],
"cost": "免费(开源) / 按量",
"优势": "文字渲染好、质量高",
"劣势": "较新、生态不够成熟",
},
}
@staticmethod
def build_dall_e_prompt(
subject: str,
style: str = "realistic",
mood: str = "professional",
details: str = "",
) -> str:
"""
构建 DALL-E 提示词
好的 Prompt = 主题 + 风格 + 情绪 + 细节
"""
style_map = {
"realistic": "photorealistic, high detail",
"illustration": "digital illustration, clean lines",
"watercolor": "watercolor painting style",
"3d": "3D rendered, cinema 4D style",
"minimalist": "minimalist, clean, simple",
}
style_desc = style_map.get(style, style)
prompt = f"{subject}, {style_desc}, {mood}"
if details:
prompt += f", {details}"
prompt += ", high quality, detailed"
return prompt
# 使用
gen = ImageGenerator()
# Prompt 构建
prompt = gen.build_dall_e_prompt(
subject="a modern tech startup office",
style="realistic",
mood="bright and energetic",
details="with plants, standing desks, large monitors",
)
print(f"DALL-E Prompt:\n  {prompt}")
print("\n=== 图像生成模型对比 ===")
for name, info in gen.MODELS.items():
print(f"\n{name} ({info['provider']}):")
print(f"  成本: {info['cost']}")
print(f"  优势: {info['优势']}")

图像分析系统

"""
智能图像分析系统
"""
class ImageAnalysisSystem:
"""图像分析系统"""
def __init__(self):
self.analyzers = {
"general": self._general_analysis,
"product": self._product_analysis,
"document": self._document_analysis,
"safety": self._safety_check,
}
def analyze(self, image_path: str, task: str = "general") -> dict:
"""分析图像"""
analyzer = self.analyzers.get(task)
if not analyzer:
return {"error": f"不支持的任务: {task}"}
return analyzer(image_path)
def _general_analysis(self, image_path: str) -> dict:
"""通用分析"""
return {
"task": "general",
"prompt": (
"请分析这张图片:\n"
"1. 主题和内容概述\n"
"2. 关键元素列表\n"
"3. 色彩和风格\n"
"4. 适用场景建议\n"
"以 JSON 格式输出"
),
"model": "gpt-4o-mini",  # 通用分析用小模型
"detail": "low",
}
def _product_analysis(self, image_path: str) -> dict:
"""商品分析"""
return {
"task": "product",
"prompt": (
"分析这个商品图片,输出 JSON:\n"
"{\n"
'  "category": "商品类别",\n'
'  "brand": "品牌(如能识别)",\n'
'  "color": "主要颜色",\n'
'  "material": "材质估计",\n'
'  "tags": ["标签1", "标签2"],\n'
'  "quality_score": "图片质量 1-10"\n'
"}"
),
"model": "gpt-4o",
"detail": "high",
}
def _document_analysis(self, image_path: str) -> dict:
"""文档分析"""
return {
"task": "document",
"prompt": (
"提取这个文档图片中的所有内容:\n"
"- 使用 Markdown 格式\n"
"- 表格保持原始结构\n"
"- 标注图片中的图表描述\n"
"- 保留层级关系"
),
"model": "gpt-4o",
"detail": "high",
}
def _safety_check(self, image_path: str) -> dict:
"""安全检查"""
return {
"task": "safety",
"prompt": (
"检查这张图片是否包含以下内容:\n"
"1. 暴力或血腥内容\n"
"2. 色情或不当内容\n"
"3. 仇恨或歧视内容\n"
"4. 个人隐私信息\n"
"以 JSON 输出:{safe: bool, issues: []}"
),
"model": "gpt-4o-mini",
"detail": "low",
}
# 使用
system = ImageAnalysisSystem()
for task in ["general", "product", "document", "safety"]:
config = system.analyze("sample.jpg", task)
print(f"\n[{task}] model={config['model']}, detail={config['detail']}")
print(f"  Prompt: {config['prompt'][:60]}...")

本章小结

下一章:视频处理与分析。