前言

“给你看下我之前去景区玩拍的照片,风光很好”

”嗯嗯,我正好也筹备出去玩,快分享下“

……

”照片呢,还没找到吗?“

”等会啊,手机里太多照片了,给我点工夫找找“

这是不是很多人的常态?

看着手机里上百张甚至上千张照片,想要找到某张特定的照片,几乎堪比海底捞针,费时又费劲。难道只能在相册里从头到尾浏览一遍,不能依照照片中物品类别进行查找吗?

当然能够了,华为机器学习服务场景辨认性能就能够通过辨认、标签图片中的物品,将照片精准分类,建设智能相册。有了这个性能,咱们就能够疾速定位、查找指标照片了。

性能个性

华为场景辨认服务反对对图片的场景内容进行分类并增加标注信息,如美食、花朵、绿植、猫、狗、厨房、山峰、洗衣机等102种场景,并基于辨认到的信息,构建更智能的相册利用体验。

场景辨认具备以下性能个性:

  • 多类场景辨认

反对102种场景的辨认,并继续减少。

  • 辨认准确率高

可辨认多种物品、场景,辨认准确率高。

  • 辨认响应速度快

毫秒级响应速度,并一直优化性能体现。

  • 集成简略高效

提供API接口和SDK包,不便客户集成,操作简略,缩小开发成本。

利用场景

场景辨认除了利用于建设智能相册、照片检索和分类外,还能够辨认拍摄场景主动抉择相应的场景滤镜和相机参数,帮忙用户拍摄出更好看的照片。

开发代码

1 开发筹备工作

1.1 配置AppGallery Connect。

在开发利用前,须要在AppGallery Connect中配置相干信息。
具体操作步骤,请参考下方链接:
https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides-V5/config-agc-0000001050990353-V5

1.2 配置HMS Core SDK的Maven仓地址,并实现本服务的SDK集成。

(1)关上Android Studio我的项目级“build.gradle”文件。


(2)增加HUAWEI agcp插件以及Maven代码库。

  • 在“allprojects > repositories”中配置HMS Core SDK的Maven仓地址。
  • 在“buildscript > repositories”中配置HMS Core SDK的Maven仓地址。
  • 如果App中增加了“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 开发者创立辨认后果解决类“SceneDetectionAnalyzerTransactor”,该类实现MLAnalyzer.MLTransactor<T>接口,应用该接口中的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

原作者:say hi