アルバム管理の新しいモードを構築するためのHMSコアMLキットシーン認識の超シンプルな統合

序文

「景勝地に行く前に撮った写真をお見せしましょう。景色はとてもいいです」

「ええ、私もたまたま遊びに行っています。すぐに共有してください」

……

「写真はどうですか、見つけませんでしたか?」

「ちょっと待ってください。電話に写真が多すぎます。しばらく待ってください。」

これは多くの人にとって当たり前のことですか?

電話で数百または数千の写真を見て、特定の写真を見つけようとすることは、干し草の山から針を見つけるようなものであり、時間と労力がかかります。アルバムを最初から最後まで閲覧することしかできず、写真のアイテムのカテゴリで検索することはできませんか?

もちろん、Huaweiの機械学習サービスのシーン認識機能は、写真のアイテムを識別してラベルを付けてスマートアルバムを作成することにより、写真を正確に分類できます。この機能により、目的の写真をすばやく見つけて見つけることができます。

特徴

Huaweiのシーン認識サービスは、写真のシーンコンテンツの分類と、食べ物、花、緑の植物、猫、犬、キッチン、山、洗濯機、その他の102シーンなどの注釈情報の追加をサポートし、識別された情報に基づいて、よりインテリジェントなビルドを行います。フォトアルバムアプリケーション体験。

シーン認識には次の機能があります。

  • マルチタイプのシーン認識
    は102種類のシーン認識に対応し、増え続けています。

  • 認識精度が高く
    、さまざまな被写体やシーンを認識でき、認識精度も高い。


  • ミリ秒単位の高速応答速度を認識し、パフォーマンスを継続的に最適化します。

  • シンプルで効率的な統合
    により、APIインターフェイスとSDKパッケージが提供され、顧客の統合、簡単な操作が容易になり、開発コストが削減されます。

アプリケーションシナリオ

スマートアルバムの作成、写真の取得と分類におけるシーン認識の適用に加えて、対応するシーンフィルターとカメラパラメーターを自動的に選択して撮影シーンを識別し、ユーザーがより見栄えの良い写真を撮ることができます。

開発コード

1開発準備

1.1 AppGalleryConnectを構成します。

アプリケーションを開発する前に、AppGalleryConnectで関連情報を構成する必要があります。
具体的な手順については、以下のリンクを参照してください。
https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides-V5/config-agc-0000001050990353-V5

1.2 HMS Core SDKのMavenウェアハウスアドレスを構成し、このサービスのSDK統合を完了します。

(1)AndroidStudioプロジェクトレベルの「build.gradle」ファイルを開きます。

ここに写真の説明を挿入
(2)HUAWEIagcpプラグインとMavenコードベースを追加します。

  • 「allprojects> repositories」でHMSCoreSDKのMavenリポジトリアドレスを設定します。
  • 「buildscript> repositories」でHMSCoreSDKのMavenリポジトリアドレスを設定します。
  • 「agconnect-services.json」ファイルがアプリに追加されている場合は、「buildscript> dependencies」にagcp構成を追加する必要があります。
buildscript {
    repositories {
        google()
        jcenter()
        maven {url 'https://developer.huawei.com/repo/'}
    }
    dependencies {
        ...
        classpath 'com.huawei.agconnect:agcp:1.4.1.300'
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        maven {url 'https://developer.huawei.com/repo/'}
    }
}

2開発コード

静止画検出

2.1シーン認識検出器のインスタンスを作成します。

// 方式1:使用默认的参数配置。
MLSceneDetectionAnalyzer analyzer = MLSceneDetectionAnalyzerFactory.getInstance().getSceneDetectionAnalyzer();
// 方式2:按自定义配置创建场景识别分析器实例。
MLSceneDetectionAnalyzerSetting setting = new MLSceneDetectionAnalyzerSetting.Factory()
     // 设置场景识别可信度阈值。
     .setConfidence(confidence)
     .create();
MLSceneDetectionAnalyzer analyzer = MLSceneDetectionAnalyzerFactory.getInstance().getSceneDetectionAnalyzer(setting);

2.2 android.graphics.Bitmapを使用してMLFrameを構築します。サポートされている画像形式には、jpg / jpeg / png / bmpが含まれます。

MLFrame frame = new MLFrame.Creator().setBitmap(bitmap).create();

2.3シーン認識を実行します。

// 方式1:同步识别。
SparseArray<MLSceneDetection> results = analyzer.analyseFrame(frame);
// 方式2:异步识别。
Task<List<MLSceneDetection>> task = analyzer.asyncAnalyseFrame(frame);
task.addOnSuccessListener(new OnSuccessListener<List<MLSceneDetection>>() {
    public void onSuccess(List<MLSceneDetection> result) {
        // 场景识别成功的处理逻辑。
    }})
    .addOnFailureListener(new OnFailureListener() {
        public void onFailure(Exception e) {
            // 场景识别识别失败的处理逻辑。
            // failure.
            if (e instanceof MLException) {
                MLException mlException = (MLException)e;
                // 获取错误码,开发者可以对错误码进行处理,根据错误码进行差异化的页面提示。
                int errorCode = mlException.getErrCode();
                // 获取报错信息,开发者可以结合错误码,快速定位问题。
                String errorMessage = mlException.getMessage();
            } else {
                // 其他异常。
        }
    }
});

2.4検出が完了したら、アナライザーを停止し、検出リソースを解放します。

if (analyzer != null) {
    analyzer.stop();
}

ビデオストリームの検出

開発者は、ビデオストリームを自分で処理し、ビデオストリームをMLFrameオブジェクトに変換してから、静止画像検出の方法に従ってシーン認識を実行できます。

開発者が同期検出インターフェイスを呼び出している場合は、組み込みのSDK LensEngineクラスを使用して、ビデオストリームシーン認識を実現することもできます。サンプルコードは次のとおりです。

3.1シーン認識アナライザーを作成します。エンドサイドシーン認識アナライザーのみがサポートされます。

MLSceneDetectionAnalyzer analyzer = MLSceneDetectionAnalyzerFactory.getInstance().getSceneDetectionAnalyzer();

3.2開発者は、MLAnalyzer.MLTransactor <T>インターフェイスを実装する認識結果処理クラス「SceneDetectionAnalyzerTransactor」を作成し、インターフェイスでtransactResultメソッドを使用して検出結果を取得し、特定のサービスを実装します。

public class SceneDetectionAnalyzerTransactor implements MLAnalyzer.MLTransactor<MLSceneDetection> {
    @Override
    public void transactResult(MLAnalyzer.Result<MLSceneDetection> results) {
        SparseArray<MLSceneDetection> items = results.getAnalyseList();
        // 开发者根据需要处理识别结果,需要注意,这里只对检测结果进行处理。
        // 不可调用ML Kit提供的其他检测相关接口。
    }
    @Override
    public void destroy() {
        // 检测结束回调方法,用于释放资源等。
    }
}

3.3アナライザーと結果プロセッサーのバインドを実現するように、認識結果プロセッサーを設定します。

analyzer.setTransactor(new SceneDetectionAnalyzerTransactor());
// 创建LensEngine,该类由ML Kit SDK提供,用于捕捉相机动态视频流并传入分析器。
Context context = this.getApplicationContext();
LensEngine lensEngine = new LensEngine.Creator(context, this.analyzer)
    .setLensType(LensEngine.BACK_LENS)
    .applyDisplayDimension(1440, 1080)
    .applyFps(30.0f)
    .enableAutomaticFocus(true)
    .create();

3.4 runメソッドを呼び出し、カメラを起動し、ビデオストリームを読み取り、識別します。

// 请自行实现SurfaceView控件的其他逻辑。
SurfaceView mSurfaceView = findViewById(R.id.surface_view);
try {
    lensEngine.run(mSurfaceView.getHolder());
} catch (IOException e) {
    // 异常处理逻辑。
}

3.5検出が完了したら、アナライザーを停止し、検出リソースを解放します。

if (analyzer != null) {
    analyzer.stop();
}
if (lensEngine != null) {
    lensEngine.release();
}

DEMO展示

ここに写真の説明を挿入


元のリンク:https://developer.huawei.com/consumer/cn/forum/topic/0201404868263200225?fid=18

著者:こんにちはと言う

おすすめ

転載: blog.51cto.com/14772288/2551461