通義萬相
支持的領域 / 任務:aigc /文生圖
通義萬相-文本生成圖像是基于自研的Composer組合生成框架的AI繪畫創作大模型,能夠根據用戶輸入的文字內容,生成符合語義描述的多樣化風格的圖像。通過知識重組與可變維度擴散模型,加速收斂并提升最終生成圖片的效果,布局自然、細節豐富、畫面細膩、結果逼真。AI深度理解中英文文本語義,讓文字秒變精致AI畫作。
當前模型支持的風格包括但不限于:
水彩、油畫、中國畫、素描、扁平插畫、二次元、3D卡通。
支持中英文雙語輸入。
支持客戶自定義咒語書/修飾詞,可生成不同風格、不同主題、不同派別的圖片,滿足個性創意的AI圖片生成需求。
支持輸入參考圖片進行參考內容或者參考風格遷移,支持更豐富的風格、主題和派別,AI作畫質量更加高保真。
參考內容:
主要參考圖片的組成內容。如上圖所示,在不改變圖片主要內容的情況下可根據文本描述改變參考圖的畫面風格。
參考風格:
主要參考圖片的畫面風格。如上圖所示,可以將圖片的顏色、筆觸、材質等作為參考,用來生成同種風格的圖像。
應用場景
藝術與設計創作:設計師和創意工作者快速生成概念草圖、插畫、海報、包裝設計、甚至數字藝術品,極大地縮短了構思到成品的時間,降低了創作門檻,文生圖技術提供了無限的靈感源泉和高效的原型生成工具。
廣告與營銷物料生成:文生圖能夠即時響應廣告文案,生成符合品牌調性、產品特性和營銷策略的視覺內容,節省了傳統拍攝與后期制作的成本,廣告內容根據實時熱點迅速調整,實現高度定制化和敏捷營銷。
教育與培訓資源制作:教育工作者和培訓師利用文生圖模型來創建生動、直觀的教學素材,有助于提升教學內容的吸引力和理解度,定制化的圖像資源還能用于制作互動課件、電子教科書,豐富教育資源庫。
新聞與媒體內容生產:新聞機構和內容平臺采用文生圖技術來增強報道的視覺呈現,即時生成的視覺內容不僅能吸引讀者注意力,提高閱讀體驗,還能確保新聞報道的時效性和準確性。
游戲與娛樂內容開發:游戲開發者借助文生圖大模型來快速生成游戲內的角色、道具、環境元素等美術資源,用于動態生成游戲NPC(非玩家角色)外觀或定制化的玩家角色,增加游戲世界的多樣性和沉浸感。
室內設計與家居裝飾:室內設計師和家居平臺利用文生圖模型為客戶提供虛擬設計方案,可生成相應的空間布局、色彩搭配及裝飾細節的三維視圖或渲染圖,便于設計師快速迭代修改。
時尚與服裝設計:時尚設計師和電商平臺利用文生圖技術進行服裝設計和虛擬試穿體驗。電商平臺則可以結合用戶身材數據,讓用戶輸入文字描述想要的服裝款式或風格,生成個性化虛擬試穿圖片。
圖書封面與插圖生成:出版社和獨立作者利用文生圖模型自動生成與書籍主題契合的封面設計和內頁插圖,模型將創作出引人入勝的封面圖像,自動化地為用戶提供定制封面選項,簡化流程。
特色優勢
知識重組&可變維擴散模型:基于自研的Composer組合生成框架的AI繪畫創作大模型,通過知識重組與可變維度擴散模型,生成符合語義描述的多樣化風格的圖像。
效果業界領先:生成圖像語義一致性更精準,AI繪畫創作布局自然、細節豐富、畫面細膩、結果逼真。
模型概覽
模型名 | 模型簡介 |
wanx-v1 | 通義萬相-文本生成圖像大模型,支持中英文雙語輸入,支持輸入參考圖片進行參考內容或者參考風格遷移,重點風格包括但不限于水彩、油畫、中國畫、素描、扁平插畫、二次元、3D卡通。 |
SDK使用
輸入限制
參考圖輸入限制:
圖像格式:JPG、JPEG、PNG、BMP。
圖像大小:不超過10 MB。
圖像分辨率:大于256×256像素,小于4096×4096像素。
URL地址中不能包含中文字符。
前提條件
已開通服務并獲得API-KEY:API-KEY的獲取與配置。
已安裝最新版SDK:安裝DashScope SDK
本模型請求處理時間較長,服務采用異步方式提供,SDK進行了封裝,您既可以按異步方式調用,也可以按照同步方式調用。
接口限制:對單賬戶(含主賬號與RAM子賬號)任務下發接口限制QPS為2,并發任務數量限制為1。
設置API-KEY
export DASHSCOPE_API_KEY=YOUR_DASHSCOPE_API_KEY
同步調用模式
from http import HTTPStatus
from urllib.parse import urlparse, unquote
from pathlib import PurePosixPath
import requests
from dashscope import ImageSynthesis
def simple_call():
prompt = 'Mouse rides elephant'
rsp = ImageSynthesis.call(model=ImageSynthesis.Models.wanx_v1,
prompt=prompt,
n=4,
size='1024*1024')
if rsp.status_code == HTTPStatus.OK:
print(rsp.output)
print(rsp.usage)
# save file to current directory
for result in rsp.output.results:
file_name = PurePosixPath(unquote(urlparse(result.url).path)).parts[-1]
with open('./%s' % file_name, 'wb+') as f:
f.write(requests.get(result.url).content)
else:
print('Failed, status_code: %s, code: %s, message: %s' %
(rsp.status_code, rsp.code, rsp.message))
if __name__ == '__main__':
simple_call()
// Copyright (c) Alibaba, Inc. and its affiliates.
import com.alibaba.dashscope.aigc.imagesynthesis.ImageSynthesis;
import com.alibaba.dashscope.aigc.imagesynthesis.ImageSynthesisListResult;
import com.alibaba.dashscope.aigc.imagesynthesis.ImageSynthesisParam;
import com.alibaba.dashscope.aigc.imagesynthesis.ImageSynthesisResult;
import com.alibaba.dashscope.task.AsyncTaskListParam;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
public class Main {
public static void basicCall() throws ApiException, NoApiKeyException {
ImageSynthesis is = new ImageSynthesis();
ImageSynthesisParam param =
ImageSynthesisParam.builder()
.model(ImageSynthesis.Models.WANX_V1)
.n(4)
.size("1024*1024")
.prompt("雄鷹自由自在的在藍天白云下飛翔")
.build();
ImageSynthesisResult result = is.call(param);
System.out.println(result);
}
public static void listTask() throws ApiException, NoApiKeyException {
ImageSynthesis is = new ImageSynthesis();
AsyncTaskListParam param = AsyncTaskListParam.builder().build();
ImageSynthesisListResult result = is.list(param);
System.out.println(result);
}
public void fetchTask() throws ApiException, NoApiKeyException {
String taskId = "your task id";
ImageSynthesis is = new ImageSynthesis();
// If set DASHSCOPE_API_KEY environment variable, apiKey can null.
ImageSynthesisResult result = is.fetch(taskId, null);
System.out.println(result.getOutput());
System.out.println(result.getUsage());
}
public static void main(String[] args){
try{
basicCall();
//listTask();
}catch(ApiException|NoApiKeyException e){
System.out.println(e.getMessage());
}
System.exit(0);
}
}
參數配置
參數 | 類型 | 默認值 | 說明 |
model | string | - | 指定模型名,目前僅支持 wanx-v1 。 |
prompt | string | - | 用戶當前輸入的期望模型執行指令。 |
n | integer | - | 期望生成的圖片數量,目前限制最多生成4張。 |
size | string | 1024*1024 | 生成的圖片的規格。 |
返回結果
返回結果示例1:
{
"status_code": 200,
"request_id": "b54ffeb8-6212-9dac-808c-b3771cba3788",
"code": null,
"message": "",
"output": {
"task_id": "996523eb-034d-459b-ac88-b340b95007a4",
"task_status": "SUCCEEDED",
"results": [
{
"url": "RESULT_URL1"
},
{
"url": "RESULT_URL2"
},
{
"url": "RESULT_URL3"
},
{
"url": "RESULT_URL4"
}
],
"task_metrics": {
"TOTAL": 4,
"SUCCEEDED": 4,
"FAILED": 0
}
},
"usage": {
"image_count": 4
}
}
返回結果示例2:示例中看到有這類錯誤碼信息InvalidParameter.DataInspectio會一同和正常沒有問題的url一起返回屬于正常現象,表示是當前這個提示錯誤信息的url數據檢查錯誤,媒體格式不支持或不正確,可以重新發起請求再獲取一張圖片。
{
"status_code": 200,
"request_id": "b54ffeb8-6212-9dac-808c-b3771cba3788",
"code": null,
"message": "",
"output": {
"task_id": "996523eb-034d-459b-ac88-b340b95007a4",
"task_status": "SUCCEEDED",
"results": [
{
"url": "RESULT_URL1"
},
{
"url": "RESULT_URL2"
},
{
"code": "InvalidParameter.DataInspection",
"message": "Unable to download the media resource during the data inspection process."
},
{
"url": "RESULT_URL4"
}
],
"task_metrics": {
"TOTAL": 4,
"SUCCEEDED": 4,
"FAILED": 0
}
},
"usage": {
"image_count": 4
}
}
返回結果示例3:示例中看到有這類錯誤碼信息DataInspectionFailed會一同和正常的url一起返回屬于正常現象,數據檢查錯誤,輸出包含疑似敏感內容被綠網攔截。
{ "status_code": 200, "request_id": "b54ffeb8-6212-9dac-808c-b3771cba3788", "code": null, "message": "", "output": { "task_id": "996523eb-034d-459b-ac88-b340b95007a4", "task_status": "SUCCEEDED", "results": [ { "url": "RESULT_URL1" }, { "code": "DataInspectionFailed", "message": "Output data may contain inappropriate content." }, { "url": "RESULT_URL3" }, { "url": "RESULT_URL4" } ], "task_metrics": { "TOTAL": 4, "SUCCEEDED": 4, "FAILED": 0 } }, "usage": { "image_count": 4 } }
返回參數說明
返回參數
類型
說明
status_code
integer
200(HTTPStatus.OK)表示請求成功,否則表示請求失敗,可以通過code獲取錯誤碼,通過message字段獲取錯誤詳細信息。
request_Id
string
系統生成的標志本次調用的id。
code
string
表示請求失敗,表示錯誤碼,成功忽略。
message
string
失敗,表示失敗詳細信息,成功忽略。
output
object
調用結果信息,對于通義萬象模型,包含輸出text。
output.task_id
string
異步任務id。
output.task_status
string
任務狀態:
SUCCEEDED:任務執行成功
FAILED:任務執行失敗
CANCELED:任務被取消
PENDING:任務排隊中
SUSPENDED:任務掛起
RUNNING:任務處理中
output.results
array
生成結果,每個元素為生成圖片的URL。
output.task_metrics
object
任務結果信息:
TOTAL:期望生成數量
SUCCEEDED:成功生成數量
FAILED:失敗數量
usage
object
image_count用于計量的圖片個數。
異步調用模式
from http import HTTPStatus
from dashscope import ImageSynthesis
# 創建異步任務
def create_async_task():
rsp = ImageSynthesis.async_call(model=ImageSynthesis.Models.wanx_v1,
prompt='Eagle flying in blue sky',
n=4,
size='1024*1024')
print(rsp)
if rsp.status_code == HTTPStatus.OK:
print(rsp.output)
print(rsp.usage)
else:
print('Failed, status_code: %s, code: %s, message: %s' %
(rsp.status_code, rsp.code, rsp.message))
return rsp
# 獲取異步任務信息
def fetch_task_status(task):
status = ImageSynthesis.fetch(task)
print(status)
if status.status_code == HTTPStatus.OK:
print(status.output.task_status)
else:
print('Failed, status_code: %s, code: %s, message: %s' %
(status.status_code, status.code, status.message))
# 等待異步任務結束
def wait_task(task):
rsp = ImageSynthesis.wait(task)
print(rsp)
if rsp.status_code == HTTPStatus.OK:
print(rsp.output.task_status)
else:
print('Failed, status_code: %s, code: %s, message: %s' %
(rsp.status_code, rsp.code, rsp.message))
# 取消異步任務,只有處于PENDING狀態的任務才可以取消
def cancel_task(task):
rsp = ImageSynthesis.cancel(task)
print(rsp)
if rsp.status_code == HTTPStatus.OK:
print(rsp.output.task_status)
else:
print('Failed, status_code: %s, code: %s, message: %s' %
(rsp.status_code, rsp.code, rsp.message))
if __name__ == '__main__':
task_info = create_async_task()
fetch_task_status(task_info)
wait_task(task_info)
異步任務輸出
{
"status_code": 200,
"request_id": "814762c1-6565-917d-9f6b-bcfa1cc26117",
"code": "",
"message": "",
"output": {
"task_id": "ea06d3c3-15fa-4487-aee5-348392f4fdcd", # 任務ID
"task_status": "PENDING", # 任務狀態
"results": []
},
"usage": null
}
任務信息輸出
{
"status_code": 200,
"request_id": "d8811fd1-fc33-9a64-90d8-69cd94051239",
"code": null,
"message": "",
"output": {
"task_id": "4257e084-30ce-46f1-8f59-5d4d8b3807ec",
"task_status": "RUNNING",
"results": [],
"task_metrics": {
"TOTAL": 4,
"SUCCEEDED": 0,
"FAILED": 0
}
},
"usage": null
}
HTTP調用接口
功能描述
本模型需要相對較長的算法調用時間,所以在接口層面采用了異步調用的方式進行任務提交,在通過任務接口提交作業之后,系統會返回對應的作業ID,隨后客戶可以通過對應的異步作業查詢接口獲取任務的狀態并且在作業到達最終完成態后取回對應的作業結果。
前提條件
已開通服務并獲得API-KEY:API-KEY的獲取與配置。
作業提交接口調用
POST https://dashscope.aliyuncs.com/api/v1/services/aigc/text2image/image-synthesis
入參描述
傳參方式 | 字段 | 類型 | 必選 | 描述 | 示例值 |
Header | Content-Type | String | 是 | 請求類型:application/json | application/json |
Authorization | String | 是 | API-Key | Bearer d1**2a | |
X-DashScope-Async | String | 是 | 固定使用 enable,表明使用異步方式提交作業。 | enable | |
Body | model | String | 是 | 指明需要調用的模型,固定值wanx-v1 | wanx-v1 |
input.prompt | String | 是 | 描述畫面的提示詞信息。支持中英文,長度不超過500個字符,超過部分會自動截斷。 | 一只奔跑的貓 | |
input.negative_prompt | String | 否 | 畫面中不想出現的內容描述詞信息。支持中英文,長度不超過500個字符,超過部分會自動截斷。 | 低分辨率、錯誤、最差質量、低質量、jpeg 偽影、丑陋、重復、病態、殘缺、超出框架、多余的手指、變異的手、畫得不好的手、畫得不好的臉、突變、變形、模糊、脫水、不良的解剖結構、 比例不良、多余肢體、克隆臉、毀容、總體比例、畸形肢體、缺臂、缺腿、多余手臂、多余腿、融合手指、手指過多、長脖子、用戶名、水印、簽名 | |
input.ref_img | String | 否 | 輸入參考圖像的URL;圖片格式可為 jpg,png,tiff,webp等常見位圖格式。默認為空。 | http://xxx/xxx.png | |
parameters.style | String | 否 | 輸出圖像的風格,目前支持以下風格取值: "<photography>" 攝影, "<portrait>" 人像寫真, "<3d cartoon>" 3D卡通, "<anime>" 動畫, "<oil painting>" 油畫, "<watercolor>"水彩, "<sketch>" 素描, "<chinese painting>" 中國畫, "<flat illustration>" 扁平插畫, "<auto>" 默認 | "style": "<sketch>" | |
parameters.size | String | 否 | 生成圖像的分辨率,目前僅支持'1024*1024','720*1280','1280*720'三種分辨率,默認為1024*1024像素。 | "size": "1024*1024" | |
parameters.n | Integer | 否 | 本次請求生成的圖片數量,目前支持1~4張,默認為1。 | "n": 4 | |
parameters.seed | Integer | 否 | 圖片生成時候的種子值,取值范圍為(0, 4294967290) 。如果不提供,則算法自動用一個隨機生成的數字作為種子,如果給定了,則根據 batch 數量分別生成 seed,seed+1,seed+2,seed+3為參數的圖片。 | 42 | |
parameters.ref_strength | Float | 否 | 期望輸出結果與墊圖(參考圖)的相似度,取值范圍[0.0, 1.0],數字越大,生成的結果與參考圖越相似 | 0.5 | |
parameters.ref_mode | String | 否 | 墊圖(參考圖)生圖使用的生成方式,可選值為'repaint' (默認) 和 'refonly'; 其中 repaint代表參考內容,refonly代表參考風格 | "repaint" |
出參描述
字段 | 類型 | 描述 | 示例值 |
output.task_id | String | 本次請求的異步任務的作業 id,實際作業結果需要通過異步任務查詢接口獲取。 | 13b1848b-5493-4c0e-8c44-68d038b492af |
output.task_status | String | 提交異步任務后的作業狀態。 | PENDING |
request_id | String | 本次請求的系統唯一碼。 | 7574ee8f-38a3-4b1e-9280-11c33ab46e51 |
請求示例
以下示例展示通過CURL命令來調用本模型的腳本。
需要使用您的API-KEY替換示例中的 your-dashscope-api-key ,代碼才能正常運行。
curl --location 'https://dashscope.aliyuncs.com/api/v1/services/aigc/text2image/image-synthesis' \
--header 'X-DashScope-Async: enable' \
--header 'Authorization: Bearer <YOUR-DASHSCOPE-API-KEY>' \
--header 'Content-Type: application/json' \
--data '{
"model": "wanx-v1",
"input": {
"prompt": "一只奔跑的貓"
},
"parameters": {
"style": "<sketch>",
"size": "1024*1024",
"n":4,
"seed":42,
"strength": 0.5,
"ref_mode": "repaint"
}
}'
響應示例
{
"output": {
"task_id": "13b1848b-5493-4c0e-8c44-68d038b492af",
"task_status": "PENDING"
}
"request_id": "7574ee8f-38a3-4b1e-9280-11c33ab46e51"
}
異常響應示例
在提交作業請求出錯的情況下,輸出的結果中會通過code
和message
指明出錯原因。
{
"code":"InvalidApiKey",
"message":"Invalid API-key provided.",
"request_id":"fb53c4ec-1c12-4fc4-a580-cdb7c3261fc1"
}
作業任務狀態查詢和結果獲取接口
將您上一步獲得的task_id替換以下代碼中的{task_id}
。
GET https://dashscope.aliyuncs.com/api/v1/tasks/{task_id}
入參描述
傳參方式 | 字段 | 類型 | 必選 | 描述 | 示例值 |
Url Path | task_id | String | 是 | 需要查詢作業的 task_id | 13b1848b-5493-4c0e-8c44-68d038b492af |
Header | Authorization | String | 是 | API-Key | Bearer d1**2a |
出參描述
字段 | 類型 | 描述 | 示例值 |
output.task_id | String | 本次請求的異步任務的作業 id,實際作業結果需要通過異步任務查詢接口獲取。 | 13b1848b-5493-4c0e-8c44-68d038b492af |
output.task_status | String | 被查詢作業的作業狀態。 | 任務狀態:
|
output.task_metrics | Object | 作業中每個batch任務的狀態:
| "task_metrics":{ "TOTAL":4, "SUCCEEDED":1, "FAILED":1 } |
usage.image_count | Integer | 本次請求成功生成的圖片張數。 | 2 |
request_id | String | 本次請求的系統唯一碼。 | 7574ee8f-38a3-4b1e-9280-11c33ab46e51 |
請求示例
以下示例展示通過CURL命令來調用本模型的腳本。
需要使用您的API-KEY替換示例中的 your-dashscope-api-key ,代碼才能正常運行。
curl -X GET \
--header 'Authorization: Bearer <YOUR-DASHSCOPE-API-KEY>' \
https://dashscope.aliyuncs.com/api/v1/tasks/86ecf553-d340-4e21-af6e-a0c6a421c010
響應示例(作業執行中)
作業提交后將處于排隊狀態,在得到調度之后將轉為運行狀態,此時作業的狀態為RUNNING,task_metrics將給出具體batch狀態;
{
"request_id":"e5d70b02-ebd3-98ce-9fe8-759d7d7b107d",
"output":{
"task_id":"86ecf553-d340-4e21-af6e-a0c6a421c010",
"task_status":"RUNNING",
"task_metrics":{
"TOTAL":4,
"SUCCEEDED":1,
"FAILED":0
}
}
}
響應示例(作業成功執行完畢)
如果作業執行完成并成功之后,再次查詢作業狀態,接口將在告知作業狀態的同時,一并將作業的結果返回。對于本模型,作業在結束之后的狀態會持續保留24小時以備客戶隨時查詢,24小時之后,作業將從系統中清除,相關的結果也將一并清除;對應的,作業生成的結果為圖像的URL地址,出于安全考慮,該URL的下載有效期也是24小時,需要用戶在獲取作業結果后根據需要及時使用或者轉存。
{
"request_id":"85eaba38-0185-99d7-8d16-4d9135238846",
"output":{
"task_id":"86ecf553-d340-4e21-af6e-a0c6a421c010",
"task_status":"SUCCEEDED",
"results":[
{
"url":"https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/123/a1.png
},
{
"url":"https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/123/b2.png
}
],
"task_metrics":{
"TOTAL":2,
"SUCCEEDED":2,
"FAILED":0
}
},
"usage":{
"image_count":2
}
}
響應示例(作業成功執行完畢,部分失敗)
在一次提交中,本模型可以根據客戶的需求生成多張圖片,只要其中一張圖片生成成功,作業將被設置為成功狀態,并且對應的作業結果會在查詢的時候返回,對于失敗的batch,結果中也會返回對應的失敗原因;同時在usage計量中,只會對成功的結果計數。
{
"request_id":"85eaba38-0185-99d7-8d16-4d9135238846",
"output":{
"task_id":"86ecf553-d340-4e21-af6e-a0c6a421c010",
"task_status":"SUCCEEDED",
"results":[
{
"url":"https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/123/a1.png
},
{
"code": "InternalError.Timeout"
"message": "An internal timeout error has occured during execution, please try again later or contact service support."
}
],
"task_metrics":{
"TOTAL":2,
"SUCCEEDED":1,
"FAILED":1
}
},
"usage":{
"image_count":1
}
}
響應示例(作業失敗)
如果因為某種原因作業失敗,則作業狀態會設置為FAILED,并且通過code
和message
字段指明錯誤原因。
{
"request_id":"e5d70b02-ebd3-98ce-9fe8-759d7d7b107d",
"output":{
"task_id":"86ecf553-d340-4e21-af6e-a0c6a421c010",
"task_status":"FAILED",
"code":"InvalidParameter"
"message":"The size is not match the allowed size ['1024*1024', '720*1280', '1280*720']"
"task_metrics":{
"TOTAL":4,
"SUCCEEDED":0,
"FAILED":4
}
}
}
狀態碼說明
DashScope通用狀態碼請查閱:返回狀態碼說明。