序文
「景勝地に行く前に撮った写真をお見せしましょう。景色はとてもいいです」
「ええ、私もたまたま遊びに行っています。すぐに共有してください」
……
「写真はどうですか、見つけませんでしたか?」
「ちょっと待ってください。電話に写真が多すぎます。しばらく待ってください。」
これは多くの人にとって当たり前のことですか?
電話で数百または数千の写真を見て、特定の写真を見つけようとすることは、干し草の山から針を見つけるようなものであり、時間と労力がかかります。アルバムを最初から最後まで閲覧することしかできず、写真のアイテムのカテゴリで検索することはできませんか?
もちろん、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
著者:こんにちはと言う