このトピックでは、Android 向け Queen SDK の使用方法について例を挙げて説明します。
始める前に
Queen SDK を V1.X.X から V2.0.0 以降にアップデートする場合は、次の点にご注意ください。
Java API のパッケージ名が
com.taobao.android.libqueen
からcom.aliyun.android.libqueen
に変更されました。ライセンスキーとライセンスファイルをリクエストするには、アプリケーションの作成とライセンスのバインド ページでリクエストを再送信し、タイトルに Request_License_File を指定する必要があります。リクエストが受信されると、Alibaba Cloud は 2 営業日以内にライセンスキーとファイルを送信します。その後、ApsaraVideo Live または VOD コンソールにログインします。左側のナビゲーションウィンドウで、[SDK 管理] > [マイライセンス] を選択してアプリケーションを作成し、ライセンスをアプリケーションにバインドします。
Android 向け Queen SDK の統合方法の詳細については、「参考資料」をご参照ください。
よくある質問への回答については、「Queen SDK についてのよくある質問」をご参照ください。
リソースのダウンロードについて
Queen SDK が提供する組み込みリソースダウンロード サービスは一時的な サービスであり、アクセシビリティと有効性は保証されません。デモ用にのみ使用され、商用 アプリケーションで直接使用することはできません。
ビジネスをオンラインで開始し、ビジネスでリソースをダウンロードする必要がある場合は、独自の サーバーを使用してこれらのリソースを提供してください。Alibaba Cloud は、リソースのダウンロードやそのような サービスの管理の支援を提供していません。
カスタムリソース URL の指定
queen_menu
を使用する場合は、次のコードを使用します。// 各リソースのダウンロード アドレスを設定します。これは重要です。QueenMaterial は静的シングルトンであり、メニュー コンポーネントが初期化される前に設定する必要があります。 // MaterialType パラメーターを設定します。有効な値:MODEL、STICKER、LUT、MAKEUP、BACKGROUND、FACE_EFFECTS。 // materialUrl は、対応するリソース パッケージをダウンロードできる URL です。リソース パッケージを ZIP ファイルに圧縮し、ルート ディレクトリに配置する必要があります。システムは、解凍された フォルダ内のリソースを自動的にスキャンしてロードします。 QueenMaterial.getInstance().setMaterialUrl(MaterialType materialType, String materialUrl);
ビジネス ニーズに合わせて次のコードを変更します。
// 手順 1:リソースのダウンロードを処理する クラスのインスタンスを初期化します。 QueenMaterial.getInstance().init(context); // 手順 2:各リソースのダウンロード アドレスを設定します。これは重要です。requestMaterial の前に、できれば init の直後に設定してください。 // MaterialType パラメーターを設定します。有効な値:MODEL、STICKER、LUT、MAKEUP、BACKGROUND、FACE_EFFECTS。 // materialUrl は、対応するリソース パッケージをダウンロードできる URL です。リソース パッケージを ZIP ファイルに圧縮し、ルート ディレクトリに配置する必要があります。システムは、解凍された フォルダ内のリソースを自動的にスキャンしてロードします。 QueenMaterial.getInstance().setMaterialUrl(MaterialType materialType, String materialUrl); // 手順 3:リソース ダウンロード リスナーを設定します。ダウンロードが完了したら(onReady コールバックが発生)、リソース タイプ別にリソースを使用できます。SDK はローカル パスを連結します。 QueenMaterial.getInstance().setCallback(new QueenMaterial.OnMaterialCallback() { @Override public void onReady(QueenMaterial.MaterialType materialType) { // リソース ダウンロード完了の コールバックは、UI 以外の スレッドで呼び出されます。ほとんどの場合、ロード ボックスが閉じられ、ビジネス ロジックがトリガーされます。 // ステッカー設定を構成します。 String stickerName = "1"; // ステッカーの相対パス。 String stickerPath = QueenMaterial.getInstance().getMaterialPath(QueenMaterial.MaterialType.STICKER) + File.separator + stickerName; // QueenEngine にステッカーを追加します。 engine.addMaterial(stickerResPath); } @Override public void onProgress(QueenMaterial.MaterialType materialType, int currentSize, int totalSize, float progress) { // リソース ダウンロードの進捗状況の コールバックは、UI 以外の スレッドで呼び出されます。ほとんどの場合、ダウンロードの進捗状況が更新されます。 } @Override public void onError(QueenMaterial.MaterialType materialType) { // リソース ダウンロード エラーの コールバックは、UI 以外の スレッドで呼び出されます。ほとんどの場合、ロード ボックスが閉じられ、ネットワークとディスク容量を確認するように求める メッセージが表示されます。 } }); // 手順 4:ダウンロードをリクエストします。メニュー ウィジェットをカスタマイズする場合は、ダウンロードをリクエストする必要があります。 QueenMaterial.getInstance().requestMaterial(MaterialType materialType);
SDK を統合して基本的なレタッチを行う
QueenEngine インスタンスを作成します。初期化のためのテクスチャとビュー パラメーターを指定します。
QueenEngine engine; try { com.aliyun.android.libqueen.QueenConfig config = new com.aliyun.android.libqueen.QueenConfig(); // true の値は、出力が Open Graphics Library(OpenGL)の表示領域に返されることを指定します。デフォルト値:false。 config.toScreen = false; // true の値は、ログ デバッグが有効になっていることを指定します。デフォルト値:false。パフォーマンスの低下を防ぐため、Debug パッケージでのみログ デバッグを有効にすることをお勧めします。 config.enableDebugLog = false; // true の値は、QueenEngine インスタンス用に OpenGL コンテキストを作成する必要があることを指定します。デフォルト値:false。 config.withContext = false; // true の値は、別の スレッドを作成する必要があることを指定します。デフォルト値:false。 config.withNewGlThread = false; if (withContext || withNewGlThread) { // QueenEngine インスタンス用に別の スレッドで OpenGL コンテキストを作成し、現在の スレッドの OpenGL コンテキストを共有する場合は、現在の OpenGL コンテキストを構成します。 if (Build.VERSION.SDK_INT >= 21) { config.shareGlContext = EGL14.eglGetCurrentContext().getNativeHandle(); } else { config.shareGlContext = EGL14.eglGetCurrentContext().getHandle(); } } // Android.content.Context オブジェクトを渡して QueenEngine インスタンスを初期化します。 // 2 番目のパラメーターは、作成されたインスタンスを構成するために使用されます。 engine = new QueenEngine(mContext, config); } catch (InitializationException e) { e.printStackTrace(); } // レタッチ中にレンダリングに使用される入力テクスチャを指定します。 // 4 番目のパラメーターは、入力テクスチャのタイプが OES かどうかを指定します。 engine.setInputTexture(textureId, textureWidth, textureHeight, true); // オプション。レタッチの出力テクスチャを取得します。これは他の サービスに使用できます。入力テクスチャと同じ方向に出力テクスチャを返す場合は、engine.autoGenOutTexture メソッドと engine.updateOutTexture メソッドの keepInputDirection パラメーターを true に設定します。 Texture2D outTexture = engine.autoGenOutTexture(true); // ビューのサイズを設定します。 engine.setScreenViewport(0, 0, viewWidth, viewHeight); // ログ表示とデバッグ モードを有効にします。パフォーマンスの低下を防ぐため、Debug パッケージでのみログ デバッグを有効にすることをお勧めします。 engine.enableDebugLog();
基本的なレタッチのパラメーターを指定します。
// 美白を有効にするかどうかを指定します。 engine.enableBeautyType(BeautyFilterType.kSkinWhiting, true); // 美白のレベルを設定します。有効な値:0~1。 engine.setBeautyParam( BeautyParams.kBPSkinWhitening, 0.3f );
/** * 美肌とシャープネスを有効にするかどうかを指定します。 * 3 番目のパラメーターは、基本的なレタッチ モードを指定します。このパラメーターを kBMSkinBuffing_Natural に設定すると、レタッチ効果がより自然になり、より多くの詳細が保持されます。このパラメーターを kBMSkinBuffing_Strong に設定すると、レタッチ効果がより誇張され、より多くの詳細が削除されます。 */ engine.enableBeautyType(BeautyFilterType.kSkinBuffing, true, BeautyFilterMode.kBMSkinBuffing_Natural); // 美肌のレベルを設定します。有効な値:0~1。 engine.setBeautyParam(BeautyParams.kBPSkinBuffing, 0.6f); // シャープネスのレベルを設定します。有効な値:0~1。 engine.setBeautyParam(BeautyParams.kBPSkinSharpen, 0.2f);
レンダリングを実行します。
// OES テクスチャの変換行列。この値は、SurfaceTexture クラスを使用して取得できます。 // SurfaceTexture クラスは、テクスチャをレンダリングできるレンダリングのコア コンポーネントです。 float[] transformMatrix = new float[16]; // SurfaceTexture クラスを使用して変換行列を更新します。 mSurfaceTexture.updateTexImage(); mSurfaceTexture.getTransformMatrix(transformMatrix); // 現在のビューにテクスチャをレンダリングします。証明書の認証に失敗した場合、またはすべての効果が無効になっている場合、Queen SDK はテクスチャをレンダリングしません。 int retCode = engine.renderTexture(transformMatrix); // QUEEN_INVALID_LICENSE(-9)は、証明書の認証に失敗したことを示します。 // QUEEN_NO_EFFECT(-10)は、すべての効果が無効になっていることを示します。 // この場合、テクスチャを手動でレンダリングする必要があります。詳細については、「Queen SDK for Android の統合」トピックの「参考資料」セクションに記載されているサンプル プロジェクトを参照してください。 if (retCode == -9 || retCode == -10) { mFrameGlDrawer.draw(transformMatrix, mOESTextureId, true); }
エンジンを解放します。
// エンジンを解放します。 engine.release();
高度な機能
高度なレタッチ、フェイス シェイピング、ボディ シェイピング、メイク、フィルター、ステッカーなどの高度な機能を使用する場合は、updateInputTextureBufferAndRunAlg メソッドを呼び出します。
if (mUseTextureBuffer) { // テクスチャ データを使用してアルゴリズムを実行します。
engine.updateInputTextureBufferAndRunAlg(
mCamera.inputAngle, mCamera.outAngle,
mCamera.flipAxis, false);
} else {
// 入力フレーム イメージ ストリームのパラメーターを指定します。
engine.updateInputDataAndRunAlg(
imageData, // フレーム イメージ ストリーム。
ImageFormat.NV21, // フレーム イメージ ストリームのフォーマット。
imageWidth, // フレーム イメージの幅。
imageHeight, // フレーム イメージの高さ。
0, // このパラメーターは、イメージ ストライドを検出するために使用されます。これは、各行のバイト数を指定します。デフォルト値:0。単位:ピクセル。
mCamera.inputAngle, // 入力フレーム イメージの回転角度。計算式については、「Queen SDK for Android の統合」トピックの「参考資料」セクションに記載されているサンプル プロジェクトを参照してください。
mCamera.outAngle, // 出力フレーム イメージの回転角度。計算式については、「Queen SDK for Android の統合」トピックの「参考資料」セクションに記載されているサンプル プロジェクトを参照してください。
mCamera.flipAxis // 出力フレーム イメージを回転するかどうか、およびどのように回転するかを指定します。値 0 は、出力フレーム イメージが回転しないことを指定します。値 1 は、出力フレーム イメージが x 軸に沿って回転することを指定します。値 2 は、出力フレーム イメージが y 軸に沿って回転することを指定します。
);
}
高度なレタッチ
// 高度なレタッチを有効にするかどうかを指定します。
engine.enableBeautyType(BeautyFilterType.kFaceBuffing, true);
// 笑いジワ除去のレベルを設定します。有効な値:[0,1]。
engine.setBeautyParam(BeautyParams.kBPNasolabialFolds, 0.3f);
// くま除去のレベルを設定します。有効な値:0~1。
engine.setBeautyParam(BeautyParams.kBPPouch, 0.3f);
// 歯のホワイトニングのレベルを設定します。有効な値:0~1。
engine.setBeautyParam(BeautyParams.kBPWhiteTeeth, 0.2f);
// 口紅効果のレベルを設定します。有効な値:0~1。
engine.setBeautyParam(BeautyParams.kBPLipstick, 0.2f);
// チーク効果のレベルを設定します。有効な値:0~1。
engine.setBeautyParam(BeautyParams.kBPBlush, 0.2f);
// 目の輝きのレベルを設定します。有効な値:0~1。
engine.setBeautyParam(BeautyParams.kBPBrightenEye, 1.0f);
// バラ色の頬のレベルを設定します。有効な値:0~1。
engine.setBeautyParam(BeautyParams.kBPBlush, 1.0f);
// 口紅の色を設定します。有効な値:-0.5~0.5。色、彩度、明るさを一緒に設定する必要があります。黄土色の場合は -0.125、ピンク色の場合は -0.1、ヴィンテージ レッドの場合は 0.0、マゼンタの場合は -0.2、真紅の場合は -0.08、オレンジ レッドの場合は 0.0、紫色の場合は -0.42、オレンジ色の場合は 0.125、黄色の場合は 0.25 に設定できます。
engine.setBeautyParam(BeautyParams.kBPLipstickColorParam, 0.0f);
// 口紅の彩度を設定します。有効な値:0~1。色、彩度、明るさを一緒に設定する必要があります。黄土色の場合は 0.25、ピンク色の場合は 0.125、ヴィンテージ レッドの場合は 1.0、マゼンタの場合は 0.35、真紅の場合は 1.0、オレンジ レッドの場合は 0.35、紫色の場合は 0.35、オレンジ色の場合は 0.25、黄色の場合は 0.45 に設定できます。
engine.setBeautyParam(BeautyParams.kBPLipstickGlossParam, 0.0f);
// 口紅の明るさを設定します。有効な値:0~1。色、彩度、明るさを一緒に設定する必要があります。黄土色の場合は 0.4、ピンク色の場合は 0.0、ヴィンテージ レッドの場合は 0.2、マゼンタの場合は 0.0、真紅の場合は 0.0、オレンジ レッドの場合は 0.0、紫色の場合は 0.0、オレンジ色の場合は 0.0、黄色の場合は 0.0 に設定できます。
engine.setBeautyParam(BeautyParams.kBPLipstickBrightnessParam, 1.0f);
// しわ除去のレベルを設定します。有効な値:0~1。
engine.setBeautyParam(BeautyParams.kBPWrinkles, 0.2f);
// 肌の明るさのレベルを設定します。有効な値:0~1。
engine.setBeautyParam(BeautyParams.kBPBrightenFace, 0.2f);
// HSV カラー モデルを有効にします。
engine.enableBeautyType(BeautyFilterType.kHSV,true);
// 彩度のレベルを設定します。有効な値:[-1,1]。
engine.setBeautyParam(BeautyParams.kBPHSV_SATURATION,0.2f);
// コントラストのレベルを設定します。有効な値:[-1,1]。
engine.setBeautyParam(BeautyParams.kBPHSV_CONTRAST,0.2f);
顔効果
// モザイク効果を構成します。
engine.enableBeautyType(BeautyFilterType.kBTEffectMosaicing,true);
engine.setBeautyParam(BeautyParams.kBPEffects_Mosaicing,0.45f);
フェイス シェイピング
/**
* フェイス シェイピングを有効にするかどうかを指定します。2 番目のパラメーターは、フェイス シェイピングを有効にするかどうかを指定します。3 番目のパラメーターは、デバッグを有効にするかどうかを指定します。
* 4 番目のパラメーターは、フェイス シェイピング モードを指定します。有効な値:kBMFaceShape_Baseline、kBMFaceShape_Main、kBMFaceShape_High、kBMFaceShape_Max。変形レベルは順番に増加します。
*/
engine.enableBeautyType(BeautyFilterType.kFaceShape, true, false, BeautyFilterMode.kBMFaceShape_Main);
/**
* フェイス シェイピング:頬骨
* 有効な値:0~1。
*/
engine.updateFaceShape(FaceShapeType.typeCutCheek, 0.0f);
/**
* フェイス シェイピング:頬骨の狭窄
* 有効な値:0~1。
*/
engine.updateFaceShape(FaceShapeType.typeCutFace, 0.0f);
/**
* フェイス シェイピング:小顔
* 有効な値:0~1。
*/
engine.updateFaceShape(FaceShapeType.typeThinFace, 0.0f);
/**
* フェイス シェイピング:顔の長さ
* 有効な値:0~1。
*/
engine.updateFaceShape(FaceShapeType.typeLongFace, 0.0f);
/**
* フェイス シェイピング:顎の短縮
* 有効な値:-1~1。
*/
engine.updateFaceShape(FaceShapeType.typeLowerJaw, 0.0f);
/**
* フェイス シェイピング:顎の延長
* 有効な値:-1~1。
*/
engine.updateFaceShape(FaceShapeType.typeHigherJaw, 0.0f);
/**
* フェイス シェイピング:顎の細身化
* 有効な値:0~1。
*/
engine.updateFaceShape(FaceShapeType.typeThinJaw, 0.0f);
/**
* フェイス シェイピング:顎のラインの細身化
* 有効な値:0~1。
*/
engine.updateFaceShape(FaceShapeType.typeThinMandible, 0.0f);
/**
* フェイス シェイピング:大きな目
* 有効な値:0~1。
*/
engine.updateFaceShape(FaceShapeType.typeBigEye, 0.0f);
/**
* フェイス シェイピング:目尻の整形 1
* 有効な値:0~1。
*/
engine.updateFaceShape(FaceShapeType.typeEyeAngle1, 0.0f);
/**
* フェイス シェイピング:目の距離
* 有効な値:-1~1。
*/
engine.updateFaceShape(FaceShapeType.typeCanthus, 0.0f);
/**
* フェイス シェイピング:目の距離の増加
* 有効な値:-1~1。
*/
engine.updateFaceShape(FaceShapeType.typeCanthus1, 0.0f);
/**
* フェイス シェイピング:目尻の整形 2
* 有効な値:-1~1。
*/
engine.updateFaceShape(FaceShapeType.typeEyeAngle2, 0.0f);
/**
* フェイス シェイピング:目の高さ
* 有効な値:-1~1。
*/
engine.updateFaceShape(FaceShapeType.typeEyeTDAngle, 0.0f);
/**
* フェイス シェイピング:鼻の細身化
* 有効な値:0~1。
*/
engine.updateFaceShape(FaceShapeType.typeThinNose, 0.0f);
/**
* フェイス シェイピング:小鼻の細身化
* 有効な値:0~1。
*/
engine.updateFaceShape(FaceShapeType.typeNosewing, 0.0f);
/**
* フェイス シェイピング:鼻の長さ
* 有効な値:-1~1。
*/
engine.updateFaceShape(FaceShapeType.typeNasalHeight, 0.0f);
/**
* フェイス シェイピング:鼻先の長さ
* 有効な値:-1~1。
*/
engine.updateFaceShape(FaceShapeType.typeNoseTipHeight, 0.0f);
/**
* フェイス シェイピング:唇の幅
* 有効な値:-1~1。
*/
engine.updateFaceShape(FaceShapeType.typeMouthWidth, 0.0f);
/**
* フェイス シェイピング:唇のサイズ
* 有効な値:-1~1。
*/
engine.updateFaceShape(FaceShapeType.typeMouthSize, 0.0f);
/**
* フェイス シェイピング:唇の高さ
* 有効な値:-1~1。
*/
engine.updateFaceShape(FaceShapeType.typeMouthHigh, 0.0f);
/**
* フェイス シェイピング:人中
* 有効な値:-1~1。
*/
engine.updateFaceShape(FaceShapeType.typePhiltrum, 0.0f);
/**
* フェイス シェイピング:生え際
* 有効な値:-1~1。
*/
engine.updateFaceShape(FaceShapeType.typeHairLine, 0.0f);
/**
* フェイス シェイピング:笑顔
* 有効な値:-1~1。
*/
engine.updateFaceShape(FaceShapeType.typeSmile, 0.0f);
ボディ シェイピング
/**
* ボディ シェイピングを有効にするかどうかを指定します。2 番目のパラメーターは、ボディ シェイピングを有効にするかどうかを指定します。3 番目のパラメーターは、デバッグを有効にするかどうかを指定します。
*/
engine.enableBeautyType(BeautyFilterType.kBodyShape, true, false);
/**
* ボディ シェイピング:全身
* 有効な値:-1~1。
*/
engine.updateBodyShape(BodyShapeType.kFullBody, 1.0f);
/**
* ボディ シェイピング:小顔
* 有効な値:-1~1。
*/
engine.updateBodyShape(BodyShapeType.kSmallHead, 1.0f);
/**
* ボディ シェイピング:細い脚
* 有効な値:-1~1。
*/
engine.updateBodyShape(BodyShapeType.kThinLeg, 1.0f);
/**
* ボディ シェイピング:長い脚
* 有効な値:-1~1。
*/
engine.updateBodyShape(BodyShapeType.kLongLeg, 1.0f);
/**
* ボディ シェイピング:首
* 有効な値:-1~1。
*/
engine.updateBodyShape(BodyShapeType.kLongNeck, 1.0f);
/**
* ボディ シェイピング:細いウエスト
* 有効な値:-1~1。
*/
engine.updateBodyShape(BodyShapeType.kThinWaist, 1.0f);
/**
* ボディ シェイピング:バストアップ
* 有効な値:-1~1。
*/
engine.updateBodyShape(BodyShapeType.kEnhanceBreast, 1.0f);
/**
* ボディ シェイピング:腕
* 有効な値:-1~1。
*/
engine.updateBodyShape(BodyShapeType.kThinArm, 1.0f);
メイク
メイクを有効にします。
// 2 番目のパラメーターは、メイクを有効にするかどうかを指定します。3 番目のパラメーターは、デバッグを有効にするかどうかを指定します。
// 4 番目のパラメーターは、メイク モードを指定します。このパラメーターは眉毛にのみ有効です。このパラメーターを BeautyFilterMode.kBMFaceMakeup_High に設定すると、眉毛の変形レベルが高くなります。このパラメーターを BeautyFilterMode.kBMFaceMakeup_Baseline に設定すると、眉毛の変形レベルが低くなります。
engine.enableBeautyType(BeautyFilterType.kMakeup, true, false, BeautyFilterMode.kBMFaceMakeup_Baseline);
// メイク素材のパラメーターを指定します。
// 最初のパラメーターは、メイクのタイプを指定します。
// 2 番目のパラメーターは、メイク素材のパスを指定します。/makeup/peach makeup.png などの assets フォルダに対する相対パス、またはアクセス許可を持つ絶対パスを指定できます。
// 3 番目のパラメーターは、メイク素材を顔にどのように適用するかを指定します。4 番目のパラメーターは予約されています。
engine.setMakeupImage(MakeupType.kMakeupBlush,
new String[]{""},
BlendType.kBlendCurve, 15);
/**
* kMakeupWhole は、フルフェイス メイク タイプを指定します。単一のメイク素材を使用して顔全体にメイクを適用できますが、顔の各パーツの詳細を調整することはできません。
* SDK バージョンが V1.4.0 以降の場合は、ミックス メイクを使用することをお勧めします。ミックス メイクを使用すると、顔の各パーツの詳細を調整できます。次のタイプのミックス メイクが提供されています。
* 1. ほろ酔いメイク:
* アイシャドウの場合、パスは makeup/eyeshadow/naichazong.2.31.png で、透明度は 0.7 です。
* まつげの場合、パスは makeup/eyelash/yesheng.2.31.png で、透明度は 0.5 です。
* チークの場合、パスは makeup/blush/weixun.2.31.png で、透明度は 0.8 です。
* アイライナーの場合、パスは makeup/eyeliner_292929/wenrou.2.31.png で、透明度は 0.5 です。
* 口紅の場合、パスは makeup/mouth_wumian/standout.2.31.png で、透明度は 0.5 です。
* ハイライトの場合、パスは makeup/highlight/highlight.2.12.png で、透明度は 0.4 です。
* 2. そばかすメイク:
* アイシャドウの場合、パスは makeup/eyeshadow/taohuafen.2.31.png で、透明度は 0.7 です。
* まつげの場合、パスは makeup/eyelash/yesheng.2.31.png で、透明度は 0.5 です。
* チークの場合、パスは makeup/blush/cool.2.31.png で、透明度は 0.8 です。
* アイライナーの場合、パスは makeup/eyeliner_292929/guima.2.31.png で、透明度は 0.5 です。
* 口紅の場合、パスは makeup/mouth_yaochun/nanguase.2.31.png で、透明度は 0.5 です。
* ハイライトの場合、パスは makeup/highlight/highlight.2.12.png で、透明度は 0.4 です。
* 3. 快活なメイク:
* アイシャドウの場合、パスは makeup/eyeshadow/tianchengse.2.31.png で、透明度は 0.7 です。
* まつげの場合、パスは makeup/eyelash/lingdong.2.31.png で、透明度は 0.5 です。
* チークの場合、パスは makeup/blush/luori.2.31.png で、透明度は 0.8 です。
* アイライナーの場合、パスは makeup/eyeliner_292929/qizhi.2.31.png で、透明度は 0.5 です。
* 口紅の場合、パスは makeup/mouth_yaochun/nanguase.2.31.png で、透明度は 0.5 です。
* ハイライトの場合、パスは makeup/highlight/highlight.2.12.png で、透明度は 0.4 です。
* 4. ナイトクラブ メイク:
* アイシャドウの場合、パスは makeup/eyeshadow/yeqiangwei.2.31.png で、透明度は 0.7 です。
* まつげの場合、パスは makeup/eyelash/zhixing.2.31.png で、透明度は 0.5 です。
* チークの場合、パスは makeup/blush/shaonv.2.31.png で、透明度は 0.8 です。
* アイライナーの場合、パスは makeup/eyeliner_292929/wenrou.2.31.png で、透明度は 0.5 です。
* 口紅の場合、パスは makeup/mouth_zirun/zhenggongse.2.31.png で、透明度は 0.5 です。
* ハイライトの場合、パスは makeup/highlight/highlight.2.12.png で、透明度は 0.4 です。
**/
// メイク素材の透明度を設定します。
// 2 番目のパラメーターは、素材の透明度を指定します。3 番目のパラメーターは予約されています。
engine.setMakeupAlpha(MakeupType.kMakeupBlush, 0.6f, 0.3f);
メイクを無効にします。
engine.setMakeupImage(MakeupType.kMakeupBlush, new String[], BlendType.kBlendNormal, 15);
涙袋効果を有効にします。
// 2 番目のパラメーターは、涙袋効果を有効にするかどうかを指定します。3 番目のパラメーターは、デバッグを有効にするかどうかを指定します。
engine.enableBeautyType(BeautyFilterType.kMakeup, true, false);
engine.setMakeupImage(MakeupType.kMakeupWocan,
new String[]{""}, // 涙袋効果には組み込み素材のみを使用します。
BlendType.kBlendCurve, 15);
engine.setMakeupAlpha(MakeupType.kMakeupWocan, 0.6f, 0.3f);
涙袋効果を無効にします。
engine.setMakeupImage(MakeupType.kMakeupWocan, new String[], BlendType.kBlendCurve, 15);
ヘアカラー
engine.enableBeautyType(BeautyFilterType.kHairColor, true);
/**
* ヘアカラーは、赤、緑、青(RGB)の値で表されます。これらは浮動小数点数です。
* サンプル カラー:
* 青:[0.3137f, 0.3137f, 0.6275f]
* 紫:[0.6078f, 0.3529f, 0.6275f]
* スカイブルー:[0.3333f, 0.5492f, 0.5491f]
* 黄:[0.6471f, 0.5294f, 0.3529f]
* 緑:[0.3725f, 0.5882f, 0.3137f]
* 茶:[0.3922f, 0.3333f, 0.3137f]
* 赤:[0.5098f, 0.2745f, 0.2745f]
*/
engine.setHairColor(
getQueenParam().hairRecord.colorRed,
getQueenParam().hairRecord.colorGreen,
getQueenParam().hairRecord.colorBlue);
フィルター
// フィルターを有効にするかどうかを指定します。
engine.enableBeautyType(BeautyFilterType.kLUT, true);
// 使用するフィルターを指定します。/lookups/lookup_1.png などの assets フォルダに対する相対パス、またはアクセス許可を持つ絶対パスを指定できます。
engine.setFilter(lutResPath);
// フィルターのレベルを設定します。
engine.setBeautyParam(BeautyParams.kBPLUT, 1.0f);
ステッカー
// 指定されたパスからステッカーを削除します。
engine.removeMaterial(oldStickerResPath);
// 指定されたパスにステッカーを追加します。ステッカーを追加した後は、再度追加することはできません。
// ステッカーのパスは、/sticker/baiyang などの assets フォルダに対する相対パス、またはアクセス許可を持つ絶対パスを指定できます。
engine.addMaterial(stickerResPath);
クロマキー
/**
* クロマキーのパラメーターを指定します。
* @param backgroundPath 置き換える背景画像のパス。値が "" の場合、クロマキーは無効になります。
* @param blueScreenEnabled ブルー スクリーンを使用するかどうかを指定します。true の値は、ブルー スクリーンが使用されることを指定します。false の値は、グリーン スクリーンが使用されることを指定します。
* @param threshold 有効な値:20~60。デフォルト値:30。デフォルト値を使用することをお勧めします。
*/
engine.setGreenScreen(String backgroundPath, boolean blueScreenEnabled, float threshold);
背景の置き換え
// 背景の置き換えを有効にする前に、ビジネス要件に基づいてパフォーマンス モードを指定できます。サポートされているパフォーマンス モードには、自動モード、最高品質モード、バランス モード、最高パフォーマンス モードがあります。このパラメーターを指定しない場合、デフォルトで自動モードが使用されます。
engine.setSegmentPerformanceMode(SegmentPerformanceMode.Auto);
// 指定されたパスから背景画像を削除します。
engine.removeMaterial(oldBackgroundResPath);
// 指定されたパスに背景画像を追加します。背景画像を追加した後は、再度追加することはできません。
// 背景画像のパスは、/static/xiaomanyao などの assets フォルダに対する相対パス、またはアクセス許可を持つ絶対パスを指定できます。
engine.addMaterial(backgroundResPath);
// 背景の置き換えに加えて、背景ボケも有効にできます。
engine.enableBeautyType(BeautyFilterType.kBTBackgroundProcess, true);
// 背景ボケを有効にすると、デフォルトで背景がぼやけます。次のメソッドを使用して透明な背景を設定できます。これは、出力が前景として使用され、背景が合成される シナリオに適しています。
engine.setSegmentBackgroundProcessType(BackgroundProcessType.kBackgroundTransparent);
AR ライティング
/**
* 最初のパラメーターは、拡張現実(AR)ライティングを有効にするかどうかを指定します。
* 2 番目のパラメーターは、モードを指定します。値 1 はライティング モードを指定します。値 2 は描画モードを指定します。
*/
engine.setArWriting(true, getQueenParam().sArWritingRecord.mode);
インテリジェントな動的最適化
// インテリジェントな動的最適化を有効にします。
engine.enableBeautyType(BeautyFilterType.kBTAutoFilter, true);
// インテリジェントな動的最適化を無効にします。
engine.enableBeautyType(BeautyFilterType.kBTAutoFilter, false);
ジェスチャ認識
アルゴリズム コールバックを登録および登録解除します。
/** アルゴリズム コールバックを登録します。 **/
// QueenEngine インスタンスのハンドルを使用してアルゴリズム インスタンスを作成します。アルゴリズム コールバックを登録すると、アルゴリズムが実行されます。
// 3 番目のパラメーターは、アルゴリズム タイプを指定します。詳細については、AlgType クラスの詳細を参照してください。
// 次のサンプル コードは、ジェスチャ認識アルゴリズムの例を示しています。
Algorithm algorithm = new Algorithm(engine.getEngineHandler(), "", com.taobao.android.libqueen.models.AlgType.kAAiGestureDetect);
algorithm.registerAlgCallBack(new Algorithm.OnAlgDetectListener() {
@Override
public int onAlgDetectFinish(int algId, Object algResult) {
if (algResult instanceof com.taobao.android.libqueen.algorithm.GestureData) {
// GestureData には、静的ジェスチャと動的ジェスチャに関するデータが含まれています。
com.taobao.android.libqueen.algorithm.GestureData gestureData = (com.taobao.android.libqueen.algorithm.GestureData) algResult;
}
return 0;
}
});
/** アルゴリズム コールバックを登録解除します。 **/
// アルゴリズムに関連付けられている QueenEngine インスタンスが破棄されていない場合は、アルゴリズム コールバックを手動で登録解除する必要があります。QueenEngine インスタンスが破棄されると、アルゴリズム インスタンスは自動的に無効になります。
algorithm.unRegisterAlgCallBack();
動きの検出
アルゴリズム コールバックを登録および登録解除します。
/** アルゴリズム コールバックを登録します。 **/
// QueenEngine インスタンスのハンドルを使用してアルゴリズム インスタンスを作成します。アルゴリズム コールバックを登録すると、アルゴリズムが実行されます。
// 3 番目のパラメーターは、アルゴリズム タイプを指定します。詳細については、AlgType クラスの詳細を参照してください。
// 次のサンプル コードは、動きの検出アルゴリズムの例を示しています。
Algorithm algorithm = new Algorithm(engine.getEngineHandler(), "", com.taobao.android.libqueen.models.AlgType.kQueenAIBodySportDetect);
algorithm.registerAlgCallBack(new Algorithm.OnAlgDetectListener() {
@Override
public int onAlgDetectFinish(int algId, Object algResult) {
if (algResult instanceof BodyDetectData) {
BodyDetectData resultData = (BodyDetectData)algResult;
int sportType = resultData.getBodySportType();
if (sportType <= 0) {
// 姿勢認識を構成します。
int poseType = resultData.getBodyPoseType();
sb.append("[姿勢認識]:").append(getBodyPoseName(poseType));
} else {
// 特定の動きの回数をカウントします。
int sportCount = resultData.getBodySportCount();
sb.append("[動き]:").append(getBodySportPoseName(sportType)).append("\r\n")
.append("[回数]:").append(sportCount);
}
}
return 0;
}
});
/** アルゴリズム コールバックを登録解除します。 **/
// アルゴリズムに関連付けられている QueenEngine インスタンスが破棄されていない場合は、アルゴリズム コールバックを手動で登録解除する必要があります。QueenEngine インスタンスが破棄されると、アルゴリズム インスタンスは自動的に無効になります。
algorithm.unRegisterAlgCallBack();