fritz

本文介绍如何使用Fritz.ai将机器学习应用于Android 。 在深入探讨如何开发机器学习Android应用程序的细节之前,简要介绍一下什么是Fritz.ai平台很有用。 如您所知,机器学习是一个有趣的话题,它正变得越来越重要,并有望改变几个领域,包括我们与Android应用程序交互的方式。

为了实验如何使用Fritz.ai将机器学习应用于Android,我们将开发一个使用机器学习图像分类的Android应用

机器学习是AI的一种应用,它使系统无需使用明确的指令即可完成任务,而可以从数据中学习并从经验中获得改进。

什么是Fritz.ai机器学习平台?

Fritz.ai是适用于Android和iOS的机器学习平台,可简化Android机器学习应用程序的开发。 在开发机器学习Android应用程序时,通常需要创建将由Android应用程序使用的ML模型。 建立ML模型的过程既繁琐又困难。 Fritz.ai提供了一组可供使用的内置模型,这些模型可以加快机器学习Android应用的开发速度。

Fritz.ai提供的内置ML模型是:

  • 图像标注
  • 物体检测
  • 风格转移
  • 图像分割
  • 姿势刺激

此外,如果我们要使用特定模型,则可以上传自定义模型。

如何配置Fritz.ai

使用Fritz.ai机器学习平台的第一步是创建一个免费帐户,然后创建一个新的机器学习Android项目,如下图所示:

现在,可以添加一个新项目:

您必须提供项目名称。 创建项目后,有必要提供项目包:

如何使用Fritz.ai设置Android项目

在Fritz.ai控制台中正确配置项目后,我们可以将Android项目设置为包括Fritz.ai。 在项目级别,必须以这种方式修改build.gradle

...
allprojects {repositories {google()jcenter()maven { url "https://raw.github.com/fritzlabs/fritz-repository/master" }}
}
...

并在应用程序级别的build.gradle中:

dependencies {....implementation 'ai.fritz:core:3.0.1'implementation 'ai.fritz:vision:3.0.1'
}

最后一步是注册服务,以便Android应用可以接收模型更新。 为此,需要在Manifest.xml中添加:

<service            android:name="ai.fritz.core.FritzCustomModelService"android:exported="true"android:permission="android.permission.BIND_JOB_SERVICE" />

就这样。 现在,我们准备开始开发我们的机器学习Android应用程序。

更多有用的资源

Firebase ML Kit:使用人脸检测API构建人脸特征检测应用

机器学习正在革新供应链管理的9种方式

在Android中实现机器学习图像标签

要实现使用机器学习图像标签的Android应用,请执行以下步骤:

  • 在Android应用中配置Fritz.ai SDK
  • 标记检测到的图像

在Android应用中配置Fritz.ai SDK

第一步是在我们的Android应用程序中配置Fritz.ai SDK,以便以后需要标记所捕获图像时可以使用它。 让我们创建一个活动,并在onCreate()方法中添加以下行:

protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Fritz.configure(this, "your_fritz.ai_key");downloadModel();}

在第4行中,有必要使用控制台中设置项目期间获得的API_KEY配置Fritz。 下一步,它是从云下载模型:

private void downloadModel() {FritzManagedModel model = new ImageLabelManagedModel();Log.d(TAG, "Download model...");FritzVision.ImageLabeling.loadPredictor(model, new PredictorStatusListener<FritzVisionLabelPredictor>() {@Overridepublic void onPredictorReady(FritzVisionLabelPredictor predictor) {Log.d(TAG, "Model downloaded");MainActivity.this.predictor = predictor;}});
}

在这种情况下,Android应用程序使用ImageLabelManageModel因为我们要使用机器学习来标记图像。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><TextureViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentTop="true"android:id="@+id/preview"/><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/btnLabel"android:text="Label it"android:layout_alignParentBottom="true"/></RelativeLayout>

TextureView

将保留来自相机的图像流,同时该按钮将用于标记图像,我们将在后面看到。

如何使用机器学习标记图像

要使用机器学习对图像进行分类,一旦我们获得了相机的图像,就必须创建FritzVisionImage的实例。 现在,让我们假设我们有一个ImageReader实例,该实例保存从相机捕获的图像。 有必要将其转换为位图,然后使用预测变量标记图像:

Image image = reader.acquireLatestImage();
ByteBuffer buffer = image.getPlanes()[0].getBuffer();
byte[] bytes = new byte[buffer.capacity()];
buffer.get(bytes);
Bitmap bitmapImage = BitmapFactory.decodeByteArray(bytes, 0, bytes.length, null);FritzVisionImage fvi = FritzVisionImage.fromBitmap(bitmapImage);

最后,在第8行,可以标记图像的预测变量已准备就绪。 现在,Android应用程序可以使用

相对的准确性:

FritzVisionLabelResult labels = predictor.predict(fvi);
List<FritzVisionLabel> labelList = labels.getVisionLabels();
if (labelList != null && labelList.size() > 0) {FritzVisionLabel label = labels.getVisionLabels().get(0);System.out.println("Label [" + label.getText() + "]");
}

该应用程序获取列表中的第一个元素,该元素具有更高的准确性。 现在我们可以描述如何在Android中使用相机捕获图像。

在Android中处理相机

机器学习引擎准备就绪后,我们必须将注意力集中在如何捕获图像上。 如前所述,

TextureView

保持来自相机的图像流。 有必要在TextureView中添加一个侦听器,以了解何时可以使用相机:

TextureView.SurfaceTextureListener surfaceListener = new TextureView.SurfaceTextureListener() {@Overridepublic void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {Log.d(TAG, "Surface available");openCamera();}@Overridepublic void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {}@Overridepublic boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {return false;}@Overridepublic void onSurfaceTextureUpdated(SurfaceTexture surface) {}};

准备好表面后,应用程序可以打开相机并开始使用。 请注意:

preview = (TextureView) findViewById(R.id.preview);
preview.setSurfaceTextureListener(surfaceListener);

现在可以打开相机了:

private void openCamera() {CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);// We get the first available cameratry {cameraId = manager.getCameraIdList()[0];CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId);StreamConfigurationMap streamConfMap = characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);imageDimension = streamConfMap.getOutputSizes(SurfaceTexture.class)[0];// We can open the camera nowmanager.openCamera(cameraId, new cameraDevice.StateCallback() {@Overridepublic void onOpened(@NonNull CameraDevice camera) {Log.i(TAG, "Camera opened");cameraDevice = camera;createPreview();}@Overridepublic void onDisconnected(@NonNull CameraDevice camera) {      }@Overridepublic void onError(@NonNull CameraDevice camera, int error) {Log.e(TAG, "Error opening the camera");}}, null);}catch(CameraAccessException cae) {// Let us handle the error}catch(SecurityException se) {}}

打开相机并准备使用它时,Android应用可以开始流式传输图像:

private void createPreview() {SurfaceTexture surfaceTexture = preview.getSurfaceTexture();surfaceTexture.setDefaultBufferSize(imageDimension.getWidth(), imageDimension.getHeight());Surface surface = new Surface(surfaceTexture);try {previewRequestBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);previewRequestBuilder.addTarget(surface);cameraDevice.createCaptureSession(Arrays.asList(surface),new CameraCaptureSession.StateCallback() {public void onConfigured(@NonNull CameraCaptureSession cameraCaptureSession) {cameraSession = cameraCaptureSession;previewRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE,CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);// Flash is automatically enabled when necessary.previewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE,CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH);// Finally, we start displaying the camera preview.CaptureRequest previewRequest = previewRequestBuilder.build();try {cameraSession.setRepeatingRequest(previewRequest, new CameraCaptureSession.CaptureCallback() {@Overridepublic void onCaptureProgressed(final CameraCaptureSession session,final CaptureRequest request,final CaptureResult partialResult) {}@Overridepublic void onCaptureCompleted(final CameraCaptureSession session,final CaptureRequest request,final TotalCaptureResult result) {}}, backgroundHandler);}catch(CameraAccessException cae) {}}@Overridepublic void onConfigureFailed(@NonNull CameraCaptureSession cameraCaptureSession) {Log.e(TAG, "Configuration failed");}}, null);}catch (CameraAccessException cae) {}}

标记相机拍摄的图像

在最后一步中,有必要捕获图像并使用机器学习对其进行标记。 为此,Android应用程序使用先前布局中定义的按钮:

labelBtn = (Button) findViewById(R.id.btnLabel);
labelBtn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {takePicture();}
});

takePicture

方法,Android应用程序会拍照并标记标签(如上所示)。 如果您想获得完整的代码,可以转到Github并下载。

概要

在本文的最后,您希望获得有关如何使用Fritz.ai将机器学习应用于Android的知识。 您已经发现了如何使用机器学习图像分类来标记相机拍摄的图像。

翻译自: https://www.javacodegeeks.com/2019/03/machine-learning-android-using-fritz-ai.html

fritz

fritz_如何使用Fritz.ai将机器学习应用于Android相关推荐

  1. 2020上半年收集到的优质AI文章 – 机器学习和深度学习

    2020上半年收集到的优质AI文章 – 机器学习和深度学习 一文读懂机器学习 机器学习应补充哪些数学基础? 简单梳理一下机器学习可解释性(Interpretability) 什么是CNN?机器学习入门 ...

  2. AI和机器学习对云计算的安全有何影响?

    正如其他许多新兴技术一样,AI是一把双刃剑,它对于云计算的安全影响是双重的:这项技术可以使工作负载变得更加安全,但也可能会为新的威胁打开大门. 出现这种分歧的部分原因是,AI和机器学习正融入到主要的公 ...

  3. 词袋模型 matlab,【火炉炼AI】机器学习051-视觉词袋模型+极端随机森林建立图像分类器...

    [火炉炼AI]机器学习051-视觉词袋模型+极端随机森林建立图像分类器 (本文所使用的Python库和版本号: Python 3.6, Numpy 1.14, scikit-learn 0.19, m ...

  4. 机器学习中qa测试_如何使用AI和机器学习的QA测试软件

    智能手机,智能扬声器,智能汽车,智能咖啡机......这个名单还在继续.看起来我们周围的一切都变得生机勃勃,变得聪明起来.尽管科幻类型依赖于我们对敌对机器人接管的恐惧,但智能设备绝不是反乌托邦 - 它 ...

  5. 资源 | 2018年14个顶级AI和机器学习会议名录

    编译 | AI [AI科技大本营导读]人工智能和机器学习已经跳出科幻小说的范畴,冲进了现实.不管是技术层面还是商业环境方面,这些领域都在迅速发展,紧跟潮流的步伐是非常重要的. 无论你是技术参与者还是战 ...

  6. 资源|2018年14个顶级AI和机器学习会议名录

    编译 | AI [AI科技大本营导读]人工智能和机器学习已经跳出科幻小说的范畴,冲进了现实.不管是技术层面还是商业环境方面,这些领域都在迅速发展,紧跟潮流的步伐是非常重要的. 无论你是技术参与者还是战 ...

  7. 收藏 | 一文打尽AI、机器学习网络资源!

    来源:大数据文摘 本文约3000字,建议阅读7分钟. 本文为大家从16个角度找到一些人工智能相关领域的学习资源. 昨天,谷歌刚刚上线的机器学习课程刷屏科技媒体头条.激动过后,多数AI学习者会陷入焦虑: ...

  8. 年终总结:2021年五大人工智能(AI)和机器学习(ML)发展趋势

    明年,人工智能技术将在企业运营中更加根深蒂固. 人工智能(AI)和机器学习(ML)一直在改变着我们的世界,但是2020年给这两个改变游戏规则的人带来了新的机遇和紧迫性-预计2021年会有更大的发展. ...

  9. 应用丨AI和机器学习如何改变美国政府决策方式

    在每个联邦机构中,重要的见解都隐藏在多年来收集的大量数据集中.但是由于联邦政府数据科学家的短缺,从这些数据中提取价值是非常耗时的.然而,随着数据科学,人工智能(AI)和机器学习的进步,各机构现在可以使 ...

最新文章

  1. Typora输出表情 Typora_Smile
  2. 顺序表-元素逆置(首尾交换)
  3. Linux下常用的压缩与解压命令
  4. boost::hana::empty用法的测试程序
  5. QT的QTimer类的使用
  6. WINCE Driver 心得总结
  7. C++:12---运算符重载
  8. 方法~作用于对象~失败_消息三:ActiveMQ Topic 消息失败重发
  9. js检查元素是否包括在数组中
  10. html5移动端开发(rem和媒体查询@media)
  11. 多版本号并发控制(MVCC)在实际项目中的应用
  12. 十二月十六日鸿蒙,华为12月16日举行鸿蒙 2.0 手机开发者Beta活动,分享鸿蒙OS2.0设计理念...
  13. [笔记]使用API函数 GetACP 获取Windows系统当前代码页
  14. Django-admin源码流程
  15. 火狐浏览器 for MacFirefox
  16. python空格转义字符_python空格转义
  17. Prege(图计算框架)
  18. 微信小程npm相关问题
  19. 13 款开源的全文检索引擎
  20. Ubuntu下基于Wine环境安装Visio2007

热门文章

  1. 传统服务化(SOA)与微服务(Micro Service)的融合之道
  2. 不可不知的Python模块: collections
  3. hive 数据迁移SQL
  4. zabbix企业应用之报表功能
  5. 不知道当前谁激活键盘时的隐藏键盘方法
  6. 【哈佛商学院和斯坦福要求学生必看的20部电影】中/英字幕
  7. 如何在Visual Studio中直接使用示例代码浏览器搜索下载和管理代码示例
  8. 如何正确的选择适合自己的WEB报表工具
  9. 正确使用硬盘的方法与维护
  10. 个人所得税计算,计算器.