通义千问-图像翻译模型(Qwen-MT-Image)可精准翻译图像中的文字,并保留原始排版。该模型还支持领域提示、敏感词过滤、术语干预等自定义功能。
重要提示:本文档仅适用于"中国大陆(北京)"地域,且必须使用该地域的API Key。
| 模型名称 | 计费单价 | 任务下发接口RPS限制 | 同时处理中任务数量 |
|---|---|---|---|
| qwen-mt-image | $0.000431/张 | 1 | 2 |
计费规则:
task_status为SUCCEEDED)并成功生成图像后,会计费No text detected for translation的提示进行图像翻译时,源语种或目标语种必须至少有一种是中文或英文。不支持在两个非中、英语种之间直接翻译(例如,从日语翻译为韩语)。
| 语种(中文名) | 英文全称 | 编码 | 支持作为源语种 | 支持作为目标语种 |
|---|---|---|---|---|
| 简体中文 | Chinese | zh | ✓ | ✓ |
| 英文 | English | en | ✓ | ✓ |
| 韩语 | Korean | ko | ✓ | ✓ |
| 日语 | Japanese | ja | ✓ | ✓ |
| 俄语 | Russian | ru | ✓ | ✓ |
| 西班牙语 | Spanish | es | ✓ | ✓ |
| 法语 | French | fr | ✓ | ✓ |
| 葡萄牙语 | Portuguese | pt | ✓ | ✓ |
| 意大利语 | Italian | it | ✓ | ✓ |
| 德语 | Germany | de | ✓ | ✗ |
| 越南语 | Vietnamese | vi | ✓ | ✓ |
| 马来语 | Malay | ms | ✗ | ✓ |
| 泰语 | Thai | th | ✗ | ✓ |
| 印尼语 | Indonesian | id | ✗ | ✓ |
| 阿拉伯语 | Arabian | ar | ✗ | ✓ |
提示:若不确定源语种,可将
source_lang设置为auto进行自动检测。
由于图像翻译耗时较长,API采用异步模式,调用流程分两步:
接口地址:
POST https://dashscope.aliyuncs.com/api/v1/services/aigc/image2image/image-synthesis
请求头:
Content-Type: application/json(必选)Authorization: Bearer {API_KEY}(必选)X-DashScope-Async: enable(必选,缺少此请求头将报错)请求参数:
| 参数名 | 类型 | 必选 | 说明 |
|---|---|---|---|
| model | string | 是 | 模型名称,固定为qwen-mt-image |
| input | object | 是 | 输入参数对象 |
| input.image_url | string | 是 | 图像的公网可访问URL(支持HTTP/HTTPS) |
| input.source_lang | string | 是 | 源语种(支持语种全称、编码或auto) |
| input.target_lang | string | 是 | 目标语种(支持语种全称或编码) |
| input.ext | object | 否 | 扩展字段 |
| input.ext.domainHint | string | 否 | 领域提示(仅支持英文,不超过200个单词) |
| input.ext.sensitives | array | 否 | 敏感词列表(完全匹配,对大小写敏感) |
| input.ext.terminologies | array | 否 | 术语干预列表 |
| input.ext.config | object | 否 | 配置参数 |
| input.ext.config.skipImgSegment | bool | 否 | 是否跳过主体检测(默认false) |
图像要求:
Python示例:
import os
import requests
import json
def create_image_translation_task(image_url, source_lang, target_lang):
"""
创建图像翻译任务
Args:
image_url: 图像URL
source_lang: 源语种
target_lang: 目标语种
Returns:
task_id: 任务ID
"""
api_key = os.getenv('DASHSCOPE_API_KEY')
if not api_key:
raise ValueError("请设置DASHSCOPE_API_KEY环境变量")
url = "https://dashscope.aliyuncs.com/api/v1/services/aigc/image2image/image-synthesis"
headers = {
'X-DashScope-Async': 'enable',
'Authorization': f'Bearer {api_key}',
'Content-Type': 'application/json'
}
payload = {
"model": "qwen-mt-image",
"input": {
"image_url": image_url,
"source_lang": source_lang,
"target_lang": target_lang
}
}
response = requests.post(url, headers=headers, json=payload)
if response.status_code == 200:
result = response.json()
task_id = result['output']['task_id']
print(f"任务创建成功,task_id: {task_id}")
return task_id
else:
print(f"任务创建失败: {response.text}")
return None
# 使用示例
if __name__ == "__main__":
image_url = "https://example.com/image.jpg"
task_id = create_image_translation_task(
image_url=image_url,
source_lang="en",
target_lang="zh"
)
带扩展参数的示例:
def create_advanced_translation_task(image_url, source_lang, target_lang,
domain_hint=None, sensitives=None,
terminologies=None, skip_img_segment=False):
"""
创建带高级参数的图像翻译任务
"""
api_key = os.getenv('DASHSCOPE_API_KEY')
url = "https://dashscope.aliyuncs.com/api/v1/services/aigc/image2image/image-synthesis"
headers = {
'X-DashScope-Async': 'enable',
'Authorization': f'Bearer {api_key}',
'Content-Type': 'application/json'
}
payload = {
"model": "qwen-mt-image",
"input": {
"image_url": image_url,
"source_lang": source_lang,
"target_lang": target_lang
}
}
# 添加扩展参数
ext = {}
if domain_hint:
ext["domainHint"] = domain_hint
if sensitives:
ext["sensitives"] = sensitives
if terminologies:
ext["terminologies"] = terminologies
config = {}
if skip_img_segment:
config["skipImgSegment"] = skip_img_segment
if config:
ext["config"] = config
if ext:
payload["input"]["ext"] = ext
response = requests.post(url, headers=headers, json=payload)
if response.status_code == 200:
result = response.json()
return result['output']['task_id']
else:
print(f"任务创建失败: {response.text}")
return None
# 使用示例
task_id = create_advanced_translation_task(
image_url="https://example.com/image.jpg",
source_lang="zh",
target_lang="en",
domain_hint="These sentences are from an e-commerce platform",
sensitives=["全场9折", "七天无理由退换"],
terminologies=[
{"src": "应用程序接口", "tgt": "API"},
{"src": "机器学习", "tgt": "ML"}
],
skip_img_segment=False
)
响应示例:
成功响应:
{
"output": {
"task_status": "PENDING",
"task_id": "0385dc79-5ff8-4d82-bcb6-xxxxxx"
},
"request_id": "4909100c-7b5a-9f92-bfe5-xxxxxx"
}
失败响应:
{
"code": "InvalidApiKey",
"message": "Invalid API-key provided.",
"request_id": "fb53c4ec-1c12-4fc4-a580-xxxxxx"
}
接口地址:
GET https://dashscope.aliyuncs.com/api/v1/tasks/{task_id}
请求头:
Authorization: Bearer {API_KEY}(必选)注意事项:
task_id有效期为24小时,若ID不存在或已过期,任务状态将返回UNKNOWNurl有效期为24小时,请及时下载并保存图像Python示例:
import time
def query_task_result(task_id, max_retries=60, interval=5):
"""
查询任务结果
Args:
task_id: 任务ID
max_retries: 最大重试次数
interval: 查询间隔(秒)
Returns:
result: 任务结果
"""
api_key = os.getenv('DASHSCOPE_API_KEY')
url = f"https://dashscope.aliyuncs.com/api/v1/tasks/{task_id}"
headers = {
'Authorization': f'Bearer {api_key}'
}
for i in range(max_retries):
response = requests.get(url, headers=headers)
if response.status_code == 200:
result = response.json()
task_status = result['output']['task_status']
print(f"查询第{i+1}次,任务状态: {task_status}")
if task_status == 'SUCCEEDED':
print("任务执行成功!")
return result
elif task_status == 'FAILED':
print(f"任务执行失败: {result['output'].get('message', '未知错误')}")
return result
elif task_status in ['PENDING', 'RUNNING']:
time.sleep(interval)
continue
else:
print(f"未知任务状态: {task_status}")
return result
else:
print(f"查询失败: {response.text}")
return None
print("查询超时")
return None
# 使用示例
result = query_task_result(task_id)
if result and result['output']['task_status'] == 'SUCCEEDED':
image_url = result['output']['image_url']
print(f"翻译后的图像URL: {image_url}")
响应示例:
成功响应:
{
"request_id": "5fec62eb-bf94-91f8-b9f4-f7f758e4e27e",
"output": {
"task_id": "72c52225-8444-4cab-ad0c-xxxxxx",
"task_status": "SUCCEEDED",
"submit_time": "2025-08-13 18:11:16.954",
"scheduled_time": "2025-08-13 18:11:17.003",
"end_time": "2025-08-13 18:11:23.860",
"image_url": "http://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/xxx?Expires=xxx"
},
"usage": {
"image_count": 1
}
}
失败响应:
{
"request_id": "daad9007-6acd-9fb3-a6bc-d55902b9c9ff",
"output": {
"task_id": "fe8aa114-d9f1-4f76-b598-xxxxxx",
"task_status": "FAILED",
"submit_time": "2025-08-20 09:54:21.911",
"scheduled_time": "2025-08-20 09:54:21.984",
"end_time": "2025-08-20 12:55:00.818",
"code": "InternalError",
"message": "xxxxxx"
}
}
import os
import requests
import time
class QwenImageTranslator:
"""通义千问图像翻译客户端"""
def __init__(self, api_key=None):
self.api_key = api_key or os.getenv('DASHSCOPE_API_KEY')
if not self.api_key:
raise ValueError("请设置DASHSCOPE_API_KEY环境变量或传入api_key参数")
self.base_url = "https://dashscope.aliyuncs.com/api/v1"
def create_task(self, image_url, source_lang, target_lang, **kwargs):
"""创建翻译任务"""
url = f"{self.base_url}/services/aigc/image2image/image-synthesis"
headers = {
'X-DashScope-Async': 'enable',
'Authorization': f'Bearer {self.api_key}',
'Content-Type': 'application/json'
}
payload = {
"model": "qwen-mt-image",
"input": {
"image_url": image_url,
"source_lang": source_lang,
"target_lang": target_lang
}
}
# 处理扩展参数
ext = {}
if 'domain_hint' in kwargs:
ext["domainHint"] = kwargs['domain_hint']
if 'sensitives' in kwargs:
ext["sensitives"] = kwargs['sensitives']
if 'terminologies' in kwargs:
ext["terminologies"] = kwargs['terminologies']
config = {}
if 'skip_img_segment' in kwargs:
config["skipImgSegment"] = kwargs['skip_img_segment']
if config:
ext["config"] = config
if ext:
payload["input"]["ext"] = ext
response = requests.post(url, headers=headers, json=payload)
response.raise_for_status()
result = response.json()
return result['output']['task_id']
def query_task(self, task_id):
"""查询任务状态"""
url = f"{self.base_url}/tasks/{task_id}"
headers = {
'Authorization': f'Bearer {self.api_key}'
}
response = requests.get(url, headers=headers)
response.raise_for_status()
return response.json()
def wait_for_result(self, task_id, max_retries=60, interval=5):
"""等待任务完成"""
for i in range(max_retries):
result = self.query_task(task_id)
task_status = result['output']['task_status']
print(f"查询第{i+1}次,任务状态: {task_status}")
if task_status == 'SUCCEEDED':
return result
elif task_status == 'FAILED':
raise Exception(f"任务失败: {result['output'].get('message', '未知错误')}")
elif task_status in ['PENDING', 'RUNNING']:
time.sleep(interval)
else:
raise Exception(f"未知任务状态: {task_status}")
raise TimeoutError("任务查询超时")
def translate_image(self, image_url, source_lang, target_lang, **kwargs):
"""翻译图像(一站式方法)"""
# 创建任务
task_id = self.create_task(image_url, source_lang, target_lang, **kwargs)
print(f"任务创建成功,task_id: {task_id}")
# 等待结果
result = self.wait_for_result(task_id)
return result['output']['image_url']
@staticmethod
def download_image(image_url, save_path):
"""下载图像到本地"""
response = requests.get(image_url, stream=True, timeout=300)
response.raise_for_status()
with open(save_path, 'wb') as f:
for chunk in response.iter_content(chunk_size=8192):
f.write(chunk)
print(f"图像已保存到: {save_path}")
# 使用示例
if __name__ == "__main__":
translator = QwenImageTranslator()
# 基础翻译
translated_url = translator.translate_image(
image_url="https://example.com/image.jpg",
source_lang="en",
target_lang="zh"
)
print(f"翻译后的图像URL: {translated_url}")
# 下载图像
translator.download_image(translated_url, "translated_image.jpg")
# 高级翻译(带扩展参数)
translated_url = translator.translate_image(
image_url="https://example.com/image.jpg",
source_lang="zh",
target_lang="en",
domain_hint="E-commerce product description",
sensitives=["促销", "打折"],
terminologies=[{"src": "人工智能", "tgt": "AI"}],
skip_img_segment=False
)
图像存储于阿里云OSS,链接允许公开访问,仅在24小时内有效。如果业务系统因安全策略无法访问阿里云OSS链接,请将以下OSS域名加入网络访问白名单:
dashscope-result-bj.oss-cn-beijing.aliyuncs.com
dashscope-result-hz.oss-cn-hangzhou.aliyuncs.com
dashscope-result-sh.oss-cn-shanghai.aliyuncs.com
dashscope-result-wlcb.oss-cn-wulanchabu.aliyuncs.com
dashscope-result-zjk.oss-cn-zhangjiakou.aliyuncs.com
dashscope-result-sz.oss-cn-shenzhen.aliyuncs.com
dashscope-result-hy.oss-cn-heyuan.aliyuncs.com
dashscope-result-cd.oss-cn-chengdu.aliyuncs.com
dashscope-result-gz.oss-cn-guangzhou.aliyuncs.com
dashscope-result-wlcb-acdr-1.oss-cn-wulanchabu-acdr-1.aliyuncs.com
A: 临时链接无法直接转为永久链接。需通过后端服务下载图像,再上传至对象存储服务(如阿里云OSS)以生成新的永久链接。
示例代码:
import requests
def download_and_save_image(image_url, save_path):
try:
response = requests.get(image_url, stream=True, timeout=300)
response.raise_for_status()
with open(save_path, 'wb') as f:
for chunk in response.iter_content(chunk_size=8192):
f.write(chunk)
print(f"图像已成功下载到: {save_path}")
# 此处可以接上传到永久存储的逻辑
except requests.exceptions.RequestException as e:
print(f"图像下载失败: {e}")
if __name__ == '__main__':
image_url = "http://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/xxx?Expires=xxx"
save_path = "image-translation.jpg"
download_and_save_image(image_url, save_path)
A: 模型调用完一小时后,请在模型观测页面,查看模型的调用次数、成功率等指标。
X-DashScope-Async: enable