丹青识画系统与Claude Code结合:AI编程辅助生成影像处理脚本
本文介绍了如何利用星图GPU平台自动化部署🖼️ 丹青识画 · 智能影像雅鉴系统镜像,并结合AI编程助手快速生成图像处理脚本。通过该平台,用户可轻松搭建智能影像分析环境,实现批量图片识别、内容审核等自动化任务,显著提升图像处理与内容管理效率。
丹青识画系统与Claude Code结合:AI编程辅助生成影像处理脚本
1. 引言:当图像识别遇上AI编程助手
你有没有遇到过这种情况?手头有一套功能强大的图像识别系统,比如丹青识画,它能看懂图片里的内容,能分析场景,能提取文字。但你想让它帮你批量处理一批图片,或者把识别结果自动整理成表格,又或者根据识别内容触发一些后续操作。这时候,你就需要写点代码了。
可问题来了:不是每个人都擅长编程。就算你会一点,面对一个新的API,光是看文档、理解接口、调试参数,可能半天时间就过去了。更别提那些复杂的图像预处理、结果后处理逻辑了。
这就是我们今天要聊的场景。我想分享一个特别高效的组合玩法:用丹青识画系统来处理图像,然后用Claude Code这样的AI编程助手来帮你写调用它的脚本。你不需要是个编程高手,甚至不需要完全理解每一行代码,你只需要用大白话告诉AI助手你想要什么。
比如,你可以说:“帮我写个Python脚本,调用丹青识画API,把images文件夹里所有的JPG图片都识别一遍,然后把识别出的物体名称和置信度保存到一个Excel文件里。”几分钟后,一个能直接运行的脚本就摆在你面前了。
这种模式,本质上是在降低技术使用的门槛。让图像识别这种能力,能更快速、更灵活地融入到你的具体工作流里,无论是做内容审核、电商商品管理,还是自媒体素材分析。接下来,我就通过几个实际的例子,带你看看这种协作模式到底有多方便。
2. 场景构想:哪些事情可以交给AI编程助手?
在具体写代码之前,我们先看看,围绕丹青识画这样的图像识别系统,通常有哪些编程需求是AI助手可以帮上忙的。了解这些,你才能更好地向它描述你的任务。
2.1 自动化批量处理脚本
这是最常见、也最实用的需求。人工一张张上传图片去识别,效率太低了。你需要的是一段能自动遍历文件夹、调用API、并管理好结果的代码。
- 批量识别与归档:自动扫描某个目录下的所有图片(支持多种格式),调用识别接口,然后根据识别结果(例如,识别出的主要场景是“风景”还是“人像”)将图片移动到不同的子文件夹里。
- 结果导出与报告:识别完成后,把关键信息,比如图片文件名、识别出的标签、置信度分数,整理成结构化的数据,导出为CSV或Excel文件,方便后续用表格软件进行筛选和分析。
- 定时任务与监控:写一个脚本,让它定时(比如每天凌晨)去检查某个网络文件夹或云存储桶里是否有新图片,有的话就自动拉取、识别、并发送结果摘要到你的邮箱或办公软件里。
2.2 数据预处理与后处理工具
丹青识画API通常接收的是处理好的图片数据。但你的原始图片可能千奇百怪,这就需要一些预处理。同样,识别返回的原始数据也可能需要加工才能用。
- 图片预处理:自动调整图片尺寸到API要求的大小、统一转换为RGB格式、对图片进行简单的裁剪或旋转校正、或者将PDF文件里的每一页都转成图片再识别。
- 结果过滤与增强:API可能返回几十个识别标签和分数。你可以让AI助手写代码,只保留置信度高于某个阈值(比如0.7)的结果,或者将相似的标签进行合并归类,让最终结果更清晰。
- 结果可视化:单纯看数据不直观。可以让脚本在识别完成后,在原图片上画出识别框(如果API支持返回坐标),或者把识别出的关键标签用醒目的文字标注在图片上,生成一份带标注的结果图。
2.3 定制化业务逻辑集成
这才是发挥创造力的地方。把图像识别能力作为你更大业务逻辑中的一个环节。
- 内容审核辅助:自动识别用户上传的图片是否包含违规内容(如特定物体、文字),如果置信度超过阈值,则自动将图片标记为“待审核”或移动到隔离区,并记录日志。
- 智能相册管理:为你个人的照片库写个管理脚本。识别照片中的人物(如果支持人脸识别)、地点(通过场景识别推断)、活动,然后自动按照“人物-年份-事件”这样的规则重命名文件或整理目录结构。
- 工作流触发器:识别到图片中的特定元素后,触发后续动作。比如,识别到发票图片,就自动提取金额和日期信息,并录入财务系统;识别到设计稿中的“完成”水印,就自动通知下一个环节的同事。
理清了这些场景,你就知道该让Claude Code帮你做什么了。接下来,我们看看具体怎么操作。
3. 实战演练:从想法到可运行脚本
光说不练假把式。我们直接来看几个具体的例子,看看如何用自然语言指令,让Claude Code生成我们需要的脚本。我会模拟一个完整的对话过程。
3.1 案例一:生成批量图片识别与导出脚本
假设你是新媒体运营,每周需要分析几百张文章配图的内容主题,手动操作简直是一场噩梦。你的需求很明确:批量处理,结果要能方便地统计。
你对Claude Code说: “我需要一个Python脚本。它要完成以下任务:
- 遍历当前脚本所在目录下的一个叫
input_images的文件夹,读取里面所有的jpg和png图片。 - 调用丹青识画系统的图像识别API(假设API端点是
https://api.example.com/v1/vision/recognize,需要通过Authorization: Bearer YOUR_API_KEY验证)。 - 对于每张图片,API会返回一个JSON,里面包含一个
tags列表,每个标签有name和confidence字段。我只需要保留confidence大于0.6的标签。 - 把所有图片的识别结果整理起来,保存到一个名为
image_analysis_results.csv的文件里。文件需要包含这些列:图片文件名、识别标签1、置信度1、识别标签2、置信度2...(如果标签数量不一样,可以只记录前3个主要的,或者用分号隔开放在一个单元格里)。 - 处理过程中,如果某张图片识别失败,要在控制台打印错误信息,但不要中断整个程序,继续处理下一张。 请用
requests库发HTTP请求,用pandas库处理数据和保存CSV。记得在代码里用注释标出哪里需要我填自己的API密钥。”
Claude Code生成的脚本核心部分可能如下:
import os
import requests
import pandas as pd
from PIL import Image
import json
import time
# 配置信息 - 请用户修改这里
API_ENDPOINT = "https://api.example.com/v1/vision/recognize"
API_KEY = "YOUR_API_KEY_HERE" # 请替换为你的实际API密钥
INPUT_FOLDER = "input_images"
OUTPUT_CSV = "image_analysis_results.csv"
def process_image(image_path):
"""处理单张图片,调用API并返回结果"""
try:
with open(image_path, 'rb') as img_file:
files = {'image': img_file}
headers = {'Authorization': f'Bearer {API_KEY}'}
# 发送请求
response = requests.post(API_ENDPOINT, files=files, headers=headers)
response.raise_for_status() # 如果状态码不是200,抛出异常
result = response.json()
# 解析结果,过滤低置信度标签
filtered_tags = []
for tag in result.get('tags', []):
if tag.get('confidence', 0) > 0.6:
filtered_tags.append({
'name': tag.get('name', ''),
'confidence': tag.get('confidence', 0)
})
# 按置信度从高到低排序,只取前3个
filtered_tags.sort(key=lambda x: x['confidence'], reverse=True)
filtered_tags = filtered_tags[:3]
return {
'status': 'success',
'tags': filtered_tags
}
except Exception as e:
print(f"处理图片 {os.path.basename(image_path)} 时出错: {e}")
return {
'status': 'error',
'error': str(e)
}
def main():
# 收集所有图片文件
image_files = []
for ext in ['*.jpg', '*.jpeg', '*.png', '*.JPG', '*.JPEG', '*.PNG']:
image_files.extend(glob.glob(os.path.join(INPUT_FOLDER, ext)))
if not image_files:
print(f"在 {INPUT_FOLDER} 文件夹中未找到图片文件。")
return
print(f"找到 {len(image_files)} 张待处理图片。")
all_results = []
for idx, img_path in enumerate(image_files, 1):
print(f"正在处理 ({idx}/{len(image_files)}): {os.path.basename(img_path)}")
result = process_image(img_path)
# 构建结果行
row = {'filename': os.path.basename(img_path)}
if result['status'] == 'success':
tags = result['tags']
for i, tag in enumerate(tags, 1):
row[f'tag_{i}_name'] = tag['name']
row[f'tag_{i}_confidence'] = round(tag['confidence'], 3)
# 如果标签不足3个,后面的列留空
for i in range(len(tags)+1, 4):
row[f'tag_{i}_name'] = ''
row[f'tag_{i}_confidence'] = ''
else:
row['error'] = result['error']
all_results.append(row)
# 礼貌性延迟,避免对API造成压力
time.sleep(0.1)
# 保存到CSV
df = pd.DataFrame(all_results)
df.to_csv(OUTPUT_CSV, index=False, encoding='utf-8-sig')
print(f"处理完成!结果已保存至 {OUTPUT_CSV}")
if __name__ == "__main__":
main()
你看,你只需要用清晰的语言描述步骤,AI助手就能生成结构完整、考虑异常处理、甚至加了友好提示的代码。你拿到后,基本上只需要填个API密钥,就能直接运行了。
3.2 案例二:生成图片预处理与结果标注脚本
这次的需求更深入一点。你有一批手机拍的照片,大小不一,方向也可能不对。你想在识别之后,直接把识别出的主要物体用框和文字标在图片上,生成一份直观的报告。
你对Claude Code提出新要求: “刚才的脚本很好。现在请帮我升级一下,增加两个功能:
- 图片预处理:在调用API前,检查图片。如果图片宽度或高度超过2000像素,就等比例缩放,让长边等于2000像素。同时,用PIL库检查图片的EXIF方向信息,如果有旋转信息,就自动把它转正。
- 结果可视化:对于识别成功的图片,如果返回的标签里有‘objects’字段(里面每个物体有‘name’, ‘confidence’, 和‘bbox’坐标[x1, y1, x2, y2]),就在原图上用红色矩形框把这个物体框出来,并在框上方用白色文字写上物体名称和置信度。处理后的图片保存到一个新的
annotated_images文件夹里。 请修改之前的代码,加入这些功能。”
Claude Code会在原有基础上进行增补,生成的新代码会包含类似下面的函数:
from PIL import Image, ImageDraw, ImageFont
import PIL.ExifTags
def preprocess_image(image_path):
"""预处理图片:调整大小和旋转"""
try:
img = Image.open(image_path)
# 处理EXIF旋转
exif = img._getexif()
if exif:
for tag, value in exif.items():
decoded = PIL.ExifTags.TAGS.get(tag, tag)
if decoded == 'Orientation':
if value == 3:
img = img.rotate(180, expand=True)
elif value == 6:
img = img.rotate(270, expand=True)
elif value == 8:
img = img.rotate(90, expand=True)
break
# 调整大小
max_size = 2000
if max(img.size) > max_size:
ratio = max_size / max(img.size)
new_size = tuple(int(dim * ratio) for dim in img.size)
img = img.resize(new_size, Image.Resampling.LANCZOS)
# 临时保存处理后的图片用于上传
temp_path = f"temp_{os.path.basename(image_path)}"
img.save(temp_path)
return temp_path, img.size # 返回临时路径和调整后的大小
except Exception as e:
print(f"预处理图片 {image_path} 失败: {e}")
return None, None
def annotate_image(original_img_path, objects, new_size):
"""在原图上标注识别出的物体"""
try:
img = Image.open(original_img_path)
draw = ImageDraw.Draw(img)
# 尝试使用一个字体,如果系统没有就使用默认字体
try:
font = ImageFont.truetype("arial.ttf", 20)
except:
font = ImageFont.load_default()
for obj in objects:
bbox = obj.get('bbox', [])
if len(bbox) == 4:
# 绘制矩形框
draw.rectangle(bbox, outline='red', width=3)
# 绘制标签文本
label = f"{obj.get('name', '')} ({obj.get('confidence', 0):.2f})"
text_bbox = draw.textbbox((0, 0), label, font=font)
text_width = text_bbox[2] - text_bbox[0]
text_height = text_bbox[3] - text_bbox[1]
# 文本背景框
text_bg = [bbox[0], bbox[1] - text_height - 5,
bbox[0] + text_width, bbox[1] - 5]
draw.rectangle(text_bg, fill='red')
# 文本
draw.text((bbox[0], bbox[1] - text_height - 5),
label, fill='white', font=font)
# 保存到标注文件夹
os.makedirs('annotated_images', exist_ok=True)
output_path = os.path.join('annotated_images', os.path.basename(original_img_path))
img.save(output_path)
print(f"已生成标注图片: {output_path}")
except Exception as e:
print(f"标注图片 {original_img_path} 失败: {e}")
通过这样迭代式的对话,你可以像搭积木一样,逐步完善你的脚本,让它越来越贴合你的实际业务需求。AI助手负责处理繁琐的语法和通用逻辑,你则专注于定义“做什么”。
4. 协作模式的心得与建议
用了一段时间这种“丹青识画 + Claude Code”的模式后,我总结出几点心得,能让这个过程更顺畅。
第一,需求描述要具体、分步骤。 别只说“帮我写个识别图片的脚本”。要像给实习生布置任务一样,把步骤拆解开:第一步做什么,第二步做什么,遇到错误怎么办,结果输出成什么样。越具体,生成的代码就越靠谱。
第二,充分利用上下文。 Claude Code这类工具通常能记住一段对话历史。你可以先让它生成一个基础版本,运行测试,然后把错误信息或者你发现的问题反馈给它,让它修正。比如:“刚才的脚本运行时提示requests模块找不到,请检查并修正。”或者:“返回的JSON结构好像和你说得不一样,实际是result['data']['objects'],请按这个调整解析代码。” 这是一种高效的“调试”方式。
第三,从简单到复杂。 不要一开始就追求一个完美解决所有问题的大而全脚本。先实现核心的批量识别和导出功能,跑通流程。然后再慢慢增加预处理、后处理、错误重试、日志记录等高级功能。每次只增加一个明确的小目标,成功率会高很多。
第四,生成的代码要“审阅”,不要盲从。 AI生成的代码是很好的起点,但你可能需要做一些微调。比如,API有调用频率限制(QPS),你可能需要在循环里加个time.sleep。或者,你需要把一些配置信息(如API地址、密钥)从代码里抽出来,放到配置文件里。这些关乎稳定性和安全性的细节,需要你结合自己的知识来判断和补充。
第五,积累你自己的“提示词库”。 把那些描述清晰、生成效果好的指令保存下来。比如“创建一个从S3桶读取图片、调用视觉API、结果写入DynamoDB的Lambda函数模板”。下次遇到类似需求,稍作修改就能复用,效率倍增。
说到底,这种模式的价值在于,它把你从记忆API细节和编程语法的负担中解放出来,让你能更专注于业务逻辑本身——也就是“到底想用图像识别来做什么”。它让图像识别这项技术,变得像调用一个普通函数一样简单直接。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。
更多推荐



所有评论(0)