全部產品
Search
文件中心

ApsaraVideo Live:整合Web端美顏特效SDK

更新時間:Jul 23, 2025

Queen Web SDK是一個Web端美顏特效組件,支援基礎美顏、進階美顏、人臉美妝、人臉美型、頭像貼紙、美體、背景摳圖、濾鏡、隔空寫字、Animoji等美顏功能。本文介紹在Web端接入美顏特效SDK。

準備工作

整合SDK

NPM方式(推薦)

  1. 安裝Queen美顏組件

    npm install aliyun-queen-engine  //最新版本為6.3.14

  2. 匯入美顏

    匯入預設版本美顏

    預設版本(Advance版本)支援基礎美顏、進階美顏、美妝、美型、濾鏡、貼紙美顏功能。

    說明

    不同的版本包大小和載入的資源檔不同,功能越全包大小越大,請根據實際情況進行選擇。

    import QueenEngine, {kQueenBeautyType, kQueenBeautyParams, kQueenBeautyMakeupType, kQueenBeautyFaceShapeType, kQueenBeautyBlend} from "aliyun-queen-engine"
    queenEngine = new QueenEngine();

    匯入Lite版本美顏

    Lite版本僅支援基礎美顏功能。

    import {QueenEngineLite, kQueenBeautyType, kQueenBeautyParams} from "aliyun-queen-engine"
    queenEngine = new QueenEngineLite();

    匯入Pro版本美顏

    Pro版本支援基礎美顏、進階美顏、美妝、美型、美體、濾鏡、貼紙、隔空寫字、摳圖美顏功能。

    import {QueenEnginePro, kQueenBeautyType, kQueenBeautyParams, kQueenBeautyMakeupType, kQueenBeautyFaceShapeType, kQueenBeautyBodyShapeType, kQueenBeautyBlend} from "aliyun-queen-engine"
    queenEngine = new QueenEnginePro();

    匯入Full版本美顏

    Full版本支援基礎美顏、進階美顏、美妝、美型、美體、濾鏡、貼紙、隔空寫字、摳圖美顏、Animoji功能。

    import {QueenEngineFull, kQueenBeautyType, kQueenBeautyParams, kQueenBeautyMakeupType, kQueenBeautyFaceShapeType, kQueenBeautyBodyShapeType, kQueenBeautyBlend} from "aliyun-queen-engine"
    queenEngine = new QueenEngineFull();

    匯入Worker版本美顏

    Worker版本通過初始化時傳入kQueenVersion指定Lite、Advance、Pro、Full版本。

    import {QueenEngineWorker, kQueenBeautyType, kQueenBeautyParams, kQueenBeautyMakeupType, kQueenBeautyFaceShapeType, kQueenBeautyBodyShapeType, kQueenBeautyBlend, kQueenVersion} from "aliyun-queen-engine"
    queenEngine = new QueenEngineWorker(kQueenVersion.Pro);

JS線上引入

JS版本中SDK使用到的枚舉需要增加QueenEngine首碼,如:queenEngine.setQueenBeautyParams(QueenEngine.kQueenBeautyParams.Wrinkles, 0.9);

<!-- Lite版 -->
<script src="https://g.alicdn.com/apsara-media-box/imp-web-queen-wasm/6.3.14/dist/js/aliyun-queen-engine-lite.js"></script>
<!-- Advance版 -->
<script src="https://g.alicdn.com/apsara-media-box/imp-web-queen-wasm/6.3.14/dist/js/aliyun-queen-engine.js"></script>
<!-- Pro版 -->
<script src="https://g.alicdn.com/apsara-media-box/imp-web-queen-wasm/6.3.14/dist/js/aliyun-queen-engine-pro.js"></script>
<!-- Full版 -->
<script src="https://g.alicdn.com/apsara-media-box/imp-web-queen-wasm/6.3.14/dist/js/aliyun-queen-engine-full.js"></script>
<!-- Worker版本 -->
<script src="https://g.alicdn.com/apsara-media-box/imp-web-queen-wasm/6.3.14/dist/js/aliyun-queen-engine-worker.js"></script>

下載SDK包

下載美顏特效Web SDK包並解壓,請參見下載美顏特效SDK

功能使用

初始化

  1. 註冊License初始化Queen引擎。

    const sdkLicenseKey = ""; //queen sdk 授權licenseKey
    const queenEngine = new QueenEngine();
    //const queenEngine = new QueenEnginePro(); //Pro版本初始化
    queenEngine.create({
      SdkLicenseKey: sdkLicenseKey,
      OnInit: function(result: Boolean){
          console.info("queen sdk initialized.", result)
      },
      Domain: '',//申請試用的網域名稱,可以用根網域名稱,如aliyun.com
      OnProgress: function(progress: Number){
          console.info("queen sdk loading:", progress);
      }
    });
  2. 指定canvas初始化。

    需要指定的canvasElement typewebgl2類型或預設為空白。

    const canvasElement = document.getElementById("canvas");
    const queenEngine = new QueenEngine();
    queenEngine.create({
      SdkLicenseKey: sdkLicenseKey,
      OnInit: function(result: Boolean){
          console.info("queen sdk initialized.", result)  
      },
      Domain: '',//申請試用的網域名稱,可以用根網域名稱
      OnProgress: function(progress: Number){
          console.info("queen sdk loading:", progress);
      },
      RenderCanvas: canvasElement
    });
  3. 指定推理模型初始化。

    const queenEngine = new QueenEnginePro();
    queenEngine.create({
      SdkLicenseKey: sdkLicenseKey,
      OnInit: function(result: Boolean){
          console.info("queen sdk initialized.", result)     
      },
      Domain: '',//申請試用的網域名稱,可以用根網域名稱
      OnProgress: function(progress: Number){
          console.info("queen sdk loading:", progress);
      },
      RenderCanvas: canvasElement//可為空白
      SegmentModel: kQueenModelShapeType.Vertical,//豎向圖模型,如果沒有摳圖業務情境,則傳kQueenModelShapeType.None
      PoseModel: kQueenModelShapeType.None,//初始化時不載入美體變形模型
      InferenceBackend: kBackendType.WebGL,//用Webgl後端推理
    });
    說明
    • kQueenModelShapeType.None預設不載入背景摳圖模型,使用摳圖或美體時按需載入。

    • kQueenModelShapeType.Horizontal引擎初始化時載入橫向圖模型。

    • kQueenModelShapeType.Vertical引擎初始化時載入豎向圖模型。

    • kQueenModelShapeType.Both引擎初始化時載入時載入橫向圖模型和豎向圖模型。

    • 橫向圖模型,即width > height源輸入。

    • 豎向圖模型,即height > width源輸入。

    • kBackendType.WebGL使用WebGL推理後端。

    • kBackendType.WebGPU優先使用WebGPU推理後端。

    • 模型載入會影響頁面載入速度。

  4. Worker版本接入。

    import {QueenEngineWorker, kQueenBeautyType, kQueenBeautyParams, kQueenBeautyMakeupType, kQueenBeautyFaceShapeType, kQueenBeautyBlend} from "aliyun-queen-engine"
    const canvasElement = document.getElementById("canvas");
    queenEngine = new QueenEngineWorker(kQueenVersion.Pro);
    queenEngine.init(sdkLicenseKey, function(){
     //初始化完成回調
    }, function(progress){
     //progress:載入進度條
    }, canvasElement);

配置美顏參數

  1. 設定基礎美顏。

    // 開啟基礎美顏
    queenEngine.setQueenBeautyType(kQueenBeautyType.SkinBuffing, true);
    // 設定磨皮係數
    queenEngine.setQueenBeautyParams(kQueenBeautyParams.SkinBuffing, 0.7);
    // 設定銳利化係數
    queenEngine.setQueenBeautyParams(kQueenBeautyParams.Sharpen, 0.5);
    // 開啟美白功能開關
    queenEngine.setQueenBeautyType(kQueenBeautyType.SkinWhiting, true);
    // 設定美白係數
    queenEngine.setQueenBeautyParams(kQueenBeautyParams.Whitening, 0.6);
    // 設定紅潤係數
    queenEngine.setQueenBeautyParams(kQueenBeautyParams.SkinRed, 0.2);
  2. 設定進階美顏。

    //進階美顏
    queenEngine.setQueenBeautyType(kQueenBeautyType.FaceBuffing, true);
    // 設定去眼袋係數
    queenEngine.setQueenBeautyParams(kQueenBeautyParams.Pouch, 0.9);
    // 設定去法令紋係數
    queenEngine.setQueenBeautyParams(kQueenBeautyParams.NasolabialFolds, 0.9);
    // 設定白牙係數
    queenEngine.setQueenBeautyParams(kQueenBeautyParams.WhiteTeeth, 0.9);
    // 設定口紅係數
    queenEngine.setQueenBeautyParams(kQueenBeautyParams.Lipstick, 0.2);
    // 設定腮紅係數
    queenEngine.setQueenBeautyParams(kQueenBeautyParams.Blush, 0.1);
    // 設定口紅色相係數
    queenEngine.setQueenBeautyParams(kQueenBeautyParams.LipstickColorParam, 0.1);
    // 設定口紅飽和度係數
    queenEngine.setQueenBeautyParams(kQueenBeautyParams.LipstickGlossParam, 0.1);
    // 設定口紅明度係數
    queenEngine.setQueenBeautyParams(kQueenBeautyParams.LipstickBrightnessParam, 0.1);
    // 設定亮眼係數
    queenEngine.setQueenBeautyParams(kQueenBeautyParams.BrightenEye, 0.9);
    // 設定紅潤係數
    queenEngine.setQueenBeautyParams(kQueenBeautyParams.SkinRed, 0.2);
    // 設定去皺紋係數
    queenEngine.setQueenBeautyParams(kQueenBeautyParams.Wrinkles, 0.9);
    // 設定去暗沉係數
    queenEngine.setQueenBeautyParams(kQueenBeautyParams.BrightenFace, 0.3);
  3. 設定美型。

    // 開啟美型功能開關,美型參數詳見kQueenBeautyFaceShapeType
    queenEngine.setQueenBeautyType(kQueenBeautyType.FaceShape, true);
    //顴骨,值的範圍[0,1],預設0
    queenEngine.setFaceShape(kQueenBeautyFaceShapeType.CutCheek, 0.6);
    // 削臉,值的範圍[0,1],預設0
    queenEngine.setFaceShape(kQueenBeautyFaceShapeType.CutFace, 0.7);
    //瘦臉,值的範圍[0,1],預設0
    queenEngine.setFaceShape(kQueenBeautyFaceShapeType.ThinFace, 0.8);
    //臉長,值的範圍[0,1],預設0
    queenEngine.setFaceShape(kQueenBeautyFaceShapeType.LowerJaw, 0.8);
    //下巴拉長,值的範圍[-1,1],預設0
    queenEngine.setFaceShape(kQueenBeautyFaceShapeType.HigherJaw, 0.6); 
  4. 設定美妝。

    • 使用SDK內建資源美妝。

      使用內建資源介面時,SDK會從CDN下載美顏素材。

      //啟用美妝
      queenEngine.setQueenBeautyType(kQueenBeautyType.Makeup, true);
      //設定美妝眉毛
      await queenEngine.setMakeupEyeBrow(Assets.kResMakeupEyeBrow.BiaoZhunMei, 0.6);
      //設定美妝睫毛
      await queenEngine.setMackupEyeLash(Assets.kResMakeupEyeLash.ChenJing, 0.6);
      //設定美妝眼影
      await queenEngine.setMakeupEyeShadow(Assets.kResMakeupEyeShadow.DaDiSe, 0.5);
      //設定美妝眼線
      await queenEngine.setMakeupEyeLiner(Assets.kResMakeupEyeLiner.DaYan, 0.4);
      //設定美妝美瞳
      await queenEngine.setMakeupEyeBall(Assets.kResMakeupEyeBall.BiMuYu, 0.5);
      //設定美妝口紅
      await queenEngine.setMakeupMouth(Assets.kResMakeupMouth.AnYeZi, 0.3);
      //設定美妝腮紅
      await queenEngine.setMakeupBlush(Assets.kResMakeupBlush.BlushWuGu, 0.2);
      //設定美妝高光
      await queenEngine.setMakeupHighlight(Assets.kResMakeupHighLight.Highlight, 0.1);
      //移除美妝效果 - 移除美妝美瞳
      queenEngine.removeMakeupWithType(kQueenBeautyMakeupType.Eyeball);
      //詳細請參考QueenEngin.d.ts介面檔案說明
    • 本地資源美妝。

      const makeupPackage = "./mouth.zip"
      const makeupName = "1.2.3.png";
      const band = kQueenBeautyBlend.LabMix;
      // 開啟美妝功能開關,美妝參數詳見kQueenBeautyMakeupType
      queenEngine.setQueenBeautyType(kQueenBeautyType.Makeup, true);
      // 設定美妝口紅效果的透明度
      queenEngine.setMakeupAlphaWithType(kQueenBeautyMakeupType.Mouth, true, 0.6);
      // 設定口紅效果
      queenEngine.setMakeupWithPackage(kQueenBeautyMakeupType.Mouth, makeupPackage, makeupName, band).then(() => {
      
      });
  5. 設定濾鏡。

    • 使用內建濾鏡。

      await queenEngine.setLutByType(Assets.kResLut.M1, 0.5);
    • 使用自訂濾鏡。

      const lutImageUrl = "./lut.png";
      queenEngine.setLutImageUrl(lutImageUrl).then(function () {
        queenEngine.setQueenBeautyType(kQueenBeautyType.LUT, true);
        queenEngine.setQueenBeautyParams(kQueenBeautyParams.LUT, 0.5);
      });
  6. 設定頭像貼紙。

    1. 使用內建貼紙。

      queenEngine.addMaterialWithType(Assets.kResSticker.ILoveChina);
      //或
      queenEngine.addMaterialWithIndex(0);
      //同時設定多個
      queenEngine.addMaterialWithIndexs([0,1]);
    2. 使用自訂貼紙。

      const stickerZip = "./sticker.zip";
      queenEngine.addMaterialWithUrl(stickerZip).then(() => {
       });
  7. 配置實景摳圖。

    const backgroundUrl = "./bg.png";
    queenEngine.setSegmentBackgroundUrl(backgroundUrl).then(() => {
     });
  8. 配置綠幕摳圖。

    const backgroundUrl = "./bg.png";
    const isBlue = false;//是否藍幕
    queenEngine.setGreenScreenWithUrl(isBlue, backgroundUrl).then(() => {
     });
  9. 配置背景處理。

    //背景模糊
    queenEngine.enableBokehBackground(true);
    //背景透明
    queenEngine.enableTransparentBackground(true);

美顏渲染

  1. 網路攝影機流渲染。

     queenEngine.openCameraAndRender().then((stream=>{
     const video = document.querySelector('video');
     video.srcObject = stream;
     video.play();
     })) 
  2. 渲染到Canvas。

    渲染的Canvas為初始化引擎時傳入的Canvas。

     const sourceVideo = document.querySelector('video');
     queenEngine.renderMediaObjectToRenderCanvas(sourceVideo, sourceVideo.clientWidth, sourceVideo.clientHeight);
  3. 視頻流渲染。

     navigator.mediaDevices.getUserMedia(constraints)
     .then(mediaStream => {
     let renderMediaStream = queenEngine.renderMediaStream(mediaStream);
     const video = document.querySelector('video');
     video.srcObject = renderMediaStream;
     video.play();
     });
  4. 圖片渲染。

    fetch(圖片地址)
    .then(buffer => buffer.blob())
    .then(createImageBitmap)
    .then(img => {
     queenEngine.renderWithMediaObject(img, img.width, img.height, function(imageBufferData, imageWidth, imageHeight){
     const canvas = document.getElementById('playCanvas'); //canvas畫布 
     const ctx = canvas.getContext("2d");
     const imageBuffer = new Uint8ClampedArray(imageBufferData);
     const imageData = new ImageData(imageBuffer, imageWidth, imageHeight);
     ctx.clearRect(0, 0, imageWidth, imageHeight);
     ctx.putImageData(imageData, 0, 0);
    });
    });
  5. 紋理渲染。

    const canvas = document.getElementById("sourceCanvas");
    let outTexture = queenEngine.renderMediaObjectToTexture(canvas, canvas.width, canvas.height);
    queenEngine.drawOutTexture(outTexture);//紋理會繪製到初始化傳入的canvas
  6. 紋理輸入渲染。

    let inputTexture = queenEngine.generateTextureId();
    queenEngine.updateTexture(inputTexture, imageData);
    let outTexture = queenEngine.renderTextureId(inputTexture, width, height);
    queenEngine.drawOutTexture(outTexture)//紋理會繪製到初始化傳入的canvas
  7. 管道流渲染。

    const videoTrack = stream.getVideoTracks()[0];
    const processor = new MediaStreamTrackProcessor({ track: videoTrack });
    const readFrameStream = processor.readable;
    const generator = new MediaStreamTrackGenerator({ kind: 'video' });
    let writeFrameStream = generator.writable;
    readFrameStream.pipeThrough(queenEngine.getTransformStream()).pipeTo(writeFrameStream);

API文檔

API文檔請參見API說明