MLKit 是一个强大易用的工具包。通过 ML Kit 您可以很轻松的实现文字识别条码识别图像标记人脸检测对象检测等功能

Posted Wei_Leng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MLKit 是一个强大易用的工具包。通过 ML Kit 您可以很轻松的实现文字识别条码识别图像标记人脸检测对象检测等功能相关的知识,希望对你有一定的参考价值。

MLKit

项目地址:jenly1314/MLKit 

简介: 🌝 MLKit 是一个强大易用的工具包。通过 ML Kit 您可以很轻松的实现文字识别、条码识别、图像标记、人脸检测、对象检测等功能。 更多:作者   提 Bug    标签:

正在上传…重新上传取消 正在上传…重新上传取消 正在上传…重新上传取消 正在上传…重新上传取消 正在上传…重新上传取消 正在上传…重新上传取消 正在上传…重新上传取消 正在上传…重新上传取消

ML Kit 是一个能够将谷歌专业的机器学习知识带到应用中的极其简单易用的封装包。无论您是否有机器学习的经验,您都可以在几行代码中实现您想要的功能。甚至,您无需对神经网络或者模型优化有多深入的了解,也能完成您想要做的事情。 基于现有的 API 您可以很轻松的实现文字识别、条码识别、图像标记、人脸检测、对象检测等功能;另一方面,如果您是一位经验丰富的 ML 开发人员,ML kit 甚至提供了便利的 API,可帮助您在移动应用中使用自定义的 TensorFlow Lit 模型。

GIF 展示

因为功能太多,暂时没有录制 GIF

你可以直接下载 演示 App 体验效果

各 Module 相关说明

app

示例 App:主要用于提供 MLKit 各个子库的演示效果

mlkit-camera-core

Camera:为各个子库提供相机预览分析的核心库

参见CameraX

mlkit-barcode-scanning

条码扫描:通过分析图像能够识别条码的内容信息

参见barcode-scanning

mlkit-face-detection

人脸检测:通过分析图像能够检测到人脸和分析面部轮廓关键点信息

参见face-detection

mlkit-image-labeling

图像标记:通过分析图像能够标记一般对象、场所、动物种类、产品等

参见image-labeling

mlkit-object-detection

对象检测:通过分析图像能够检测出图像中的对象的位置信息(一张图最多可以检测五个对象)

参见object-detection

mlkit-pose-detection

Pose 检测:通过分析图像能够检测人物摆姿势的关键点信息

参见pose-detection

mlkit-pose-detection-accurate

Pose 检测:通过分析图像能够检测人物摆姿势的关键点信息(精确版,依赖包也更大)

参见pose-detection

mlkit-segmentation-selfie

自拍分割:通过分析图像能够将自拍照的人物特征进行分割

参见selfie-segmentation

mlkit-text-recognition

文字识别:识别图像中的文字信息(需 ML 模型)

参见text-recognition

ViewfinderView 相关字段说明

字段字段类型默认值字段说明
maskColorcolor#60000000扫描区外遮罩的颜色
frameColorcolor#7F1FB3E2扫描区边框的颜色
cornerColorcolor#FF1FB3E2扫描区边角的颜色
laserColorcolor#FF1FB3E2扫描区激光线的颜色
labelTextstring扫描提示文本信息
labelTextColorcolor#FFC0C0C0提示文本字体颜色
labelTextSizedimension14sp提示文本字体大小
labelTextPaddingdimension24dp提示文本距离扫描区的间距
labelTextWidthdimension提示文本的宽度,默认为 View 的宽度
labelTextLocationenumbottom提示文本显示位置
frameWidthdimension扫码框宽度
frameHeightdimension扫码框高度
laserStyleenumline扫描激光的样式
gridColumninteger20网格扫描激光列数
gridHeightinteger40dp网格扫描激光高度,为 0dp 时,表示动态铺满
cornerRectWidthdimension4dp扫描区边角的宽
cornerRectHeightdimension16dp扫描区边角的高
scannerLineMoveDistancedimension2dp扫描线每次移动距离
scannerLineHeightdimension5dp扫描线高度
frameLineWidthdimension1dp边框线宽度
scannerAnimationDelayinteger20扫描动画延迟间隔时间,单位:毫秒
frameRatiofloat0.625f扫码框与屏幕占比
framePaddingLeftdimension0扫码框左边的内间距
framePaddingTopdimension0扫码框上边的内间距
framePaddingRightdimension0扫码框右边的内间距
framePaddingBottomdimension0扫码框下边的内间距
frameGravityenumcenter扫码框对齐方式
pointColorcolor#FF1FB3E2结果点的颜色
pointStrokeColorcolor#FFFFFFFF结果点描边的颜色
pointRadiusdimension15dp结果点的半径
pointStrokeRatiofloat1.2结果点描边半径与结果点半径的比例
pointDrawablereference结果点自定义图片
showPointAnimbooleantrue是否显示结果点的动画
laserDrawablereference扫描激光自定义图片
viewfinderStyleenumclassic取景框样式;支持:classic:经典样式(带扫码框那种)、popular:流行样式(不带扫码框)

引入

Gradle:

  1. 在 Project 的 build.gradle 里面添加远程仓库
allprojects 
    repositories 
        //...
        mavenCentral()
    

  1. 在 Module 的 build.gradle 里面添加引入依赖项 ```gradle

//Camera 核心 (*必须) implementation 'com.github.jenly1314.MLKit:mlkit-camera-core:1.0.3'

//条码识别 (可选) implementation 'com.github.jenly1314.MLKit:mlkit-barcode-scanning:1.0.3'

//人脸检测 (可选) implementation 'com.github.jenly1314.MLKit:mlkit-face-detection:1.0.3'

//图像标记 (可选) implementation 'com.github.jenly1314.MLKit:mlkit-image-labeling:1.0.3'

//对象检测 (可选) implementation 'com.github.jenly1314.MLKit:mlkit-object-detection:1.0.3'

//Pose 检测 (可选) implementation 'com.github.jenly1314.MLKit:mlkit-pose-detection:1.0.3'

//Pose 检测精确版 (可选) implementation 'com.github.jenly1314.MLKit:mlkit-pose-detection-accurate:1.0.3'

//自拍分割 (可选) implementation 'com.github.jenly1314.MLKit:mlkit-segmentation-selfie:1.0.3'

//文字识别 (可选) implementation 'com.github.jenly1314.MLKit:mlkit-text-recognition:1.0.3'


## 示例

布局示例
>  可自定义布局(覆写 getLayoutId 方法),布局内至少要保证有 PreviewView,然后自己可根据需要添加的控件。

> PreviewView 用来预览,布局内至少要保证有 PreviewView,如果是继承 BaseCameraScanActivity 或 BaseCameraScanFragment,控件 id 可覆写 getPreviewViewId 方法自定义

```Xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <androidx.camera.view.PreviewView
        android:id="@+id/previewView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
    <!-- 只需保证有布局内有 PreviewView 即可,然后自己可根据需要添加的控件 -->
</FrameLayout>

如:扫二维码的布局示例 (ViewfinderView 是 mlkit-barcode-scanning中的)

<?xml version="1.0" encoding="UTF-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <androidx.camera.view.PreviewView
        android:id="@+id/previewView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
    <com.king.mlkit.vision.barcode.ViewfinderView
        android:id="@+id/viewfinderView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
    <ImageView
        android:id="@+id/ivFlashlight"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:src="@drawable/ml_flashlight_selector"
        android:layout_marginTop="@dimen/ml_flashlight_margin_top" />
</FrameLayout>

CameraScan 配置示例

        //获取 CameraScan,扫码相关的配置设置。CameraScan 里面包含部分支持链式调用的方法,即调用返回是 CameraScan 本身的一些配置建议在 startCamera 之前调用。
        getCameraScan().setPlayBeep(true)//设置是否播放音效,默认为 false
            .setVibrate(true)//设置是否震动,默认为 false
            .setCameraConfig(new CameraConfig())//设置相机配置信息,CameraConfig 可覆写 options 方法自定义配置
            .setNeedTouchZoom(true)//支持多指触摸捏合缩放,默认为 true
            .setDarkLightLux(45f)//设置光线足够暗的阈值(单位:lux),需要通过@link #bindFlashlightView(View)绑定手电筒才有效
            .setBrightLightLux(100f)//设置光线足够明亮的阈值(单位:lux),需要通过@link #bindFlashlightView(View)绑定手电筒才有效
            .bindFlashlightView(ivFlashlight)//绑定手电筒,绑定后可根据光线传感器,动态显示或隐藏手电筒按钮
            .setOnScanResultCallback(this)//设置扫码结果回调,需要自己处理或者需要连扫时,可设置回调,自己去处理相关逻辑
            .setAnalyzer(new BarcodeScanningAnalyzer())//设置分析器,如这里使用条码分析器,BarcodeScanningAnalyzer 是 mlkit-barcode-scanning 中的
            .setAnalyzeImage(true)//设置是否分析图片,默认为 true。如果设置为 false,相当于关闭了扫码识别功能
            .startCamera();//启动预览(如果是通过直接或间接继承 BaseCameraScanActivity 或 BaseCameraScanFragment 实现的则无需调用这句)


        //设置闪光灯(手电筒)是否开启,需在 startCamera 之后调用才有效
        getCameraScan().enableTorch(torch);

各个 module 的使用

mlkit-camera-core

Camera 核心:为各个子库提供相机预览分析的核心库。

如果 MLKit 支持的衍生库没有满足你的需求,你也可以通过依赖 mlkit-camera-core 去拓展实现任何与相机预览和分析相关的衍生库。

mlkit-barcode-scanning

扫条形码/二维码实现示例:通过直接继承 BarcodeCameraScanActivity 实现的示例 BarcodeScanningActivity

扫二维码实现示例:通过间接继承 BarcodeCameraScanActivity 实现的示例 QRCodeScanningActivity

扫二维码(多个结果)实现示例:通过间接继承 BarcodeCameraScanActivity 实现的示例MultipleQRCodeScanningActivity

mlkit-face-detection

人脸检测实现示例:通过直接继承 FaceCameraScanActivity 实现的示例 FaceDetectionActivity

多人脸检测实现示例:通过间接继承 FaceCameraScanActivity 实现的示例 MultipleFaceDetectionActivity

mlkit-image-labeling

图像标记实现示例:通过直接继承 ImageCameraScanActivity 实现的示例 ImageLabelingActivity

mlkit-image-labeling

对象检测实现示例:通过直接继承 ObjectCameraScanActivity 实现的示例 ObjectDetectionActivity

多对象检测实现示例:通过间接继承 ObjectCameraScanActivity 实现的示例 MultipleObjectDetectionActivity

mlkit-pose-detection

Pose 检测实现示例:通过直接继承 PoseCameraScanActivity 实现的示例 PoseDetectionActivity

mlkit-pose-detection-accurate

Pose 检测精确版实现示例:通过间接继承 AccuratePoseCameraScanActivity 实现的示例AccuratePoseDetectionActivity

mlkit-segmentation-selfie

自拍分割实现示例:通过直接继承 SegmentationCameraScanActivity 实现的示例 SelfieSegmentationActivity

mlkit-text-recognition

文字识别实现示例:通过直接继承 TextCameraScanActivity 实现的示例 TextRecognitionActivity

模型配置

关于自动下载模型,可选项但推荐:在 AndroidManifest 中申明配置

    <meta-data
        android:name="com.google.firebase.ml.vision.DEPENDENCIES"
        android:value="ocr" />
    <!-- To use multiple models: android:value="ocr,model2,model3" -->

如:配置 Barcode 模型,Face 模型,OCR 模型

    <meta-data
        android:name="com.google.firebase.ml.vision.DEPENDENCIES"
        android:value="barcode,face,ocr" />

更多使用详情,请查看app中的源码使用示例或直接查看 API 帮助文档

其他

需使用 JDK8+编译,在你项目中的 build.gradle 的 android中添加配置:

compileOptions 
    targetCompatibility JavaVersion.VERSION_1_8
    sourceCompatibility JavaVersion.VERSION_1_8

特别说明

关于mlkit-camera-core的核心代码是基于ZXingLite抽离修改而成,所以在 Camera 预览相关 API 的使用上有很多相似。 各个 mlkit 相关的 Module 主要是基于mlkit-camera-core提供相机的预览帧来做不同的分析处理,所以如果 MLKit 当前不满足您的需求,您可以自定义拓展去实现。

相关推荐

ZXingLite 基于 ZXing 库优化扫码和生成二维码/条形码功能,扫码界面完全支持自定义。

WeChatQRCode 基于 OpenCV 开源的微信二维码引擎移植的扫码识别库。

版本记录

v1.0.3:2021-10-18

  • 更新 CameraX 至 v1.0.2
  • ViewfinderView 新增支持显示结果点相关
  • 新增扫二维码有多个结果时可选实现示例(类似于新版微信效果)
  • 文字识别(text recognition)改为静态(即:使用 v2)

v1.0.2:2021-8-4

  • 更新 CameraX 至 v1.0.1
  • 优化 CameraConfig 的一些默认配置

v1.0.1:2021-7-2

  • 更新 MLKit 相关依赖库版本
  • 优化细节

v1.0.0:2021-4-7

  • MLKit 初始版本

赞赏

如果您喜欢 MLKit,或感觉 MLKit 帮助到了您,可以点右上角“Star”支持一下,您的支持就是我的动力,谢谢 :smiley:

您也可以扫描下面的二维码,请作者喝杯咖啡 :coffee:

  

关于我

Name: Jenly

Email: jenly1314#gmail.com / jenly1314#vip.qq.com

CSDN: jenly121

CNBlogs: jenly

GitHub: jenly1314

Gitee: jenly1314

加入 QQ 群: 20867961

 

以上是关于MLKit 是一个强大易用的工具包。通过 ML Kit 您可以很轻松的实现文字识别条码识别图像标记人脸检测对象检测等功能的主要内容,如果未能解决你的问题,请参考以下文章

ML Kit 条码扫描仪有时会收到错误的扫描

为啥 Google 的 ML 人脸检测工具包在 .process() 上崩溃

Android实战图像识别:Compose + MLKit + CameraX

ML Kit 正式版现已发布!新增自拍人像抠图功能

Google ML Kit:等待下载文本识别模型

性能不佳的 ML Kit 条码扫描