MLKit
ML Kit是一个极其简单易用的封装包,能够将谷歌专业的机器学习知识带到应用中。无论您是否有机器学习经验,都可以通过几行代码实现所需功能。即使您对神经网络或模型优化没有深入了解,也能完成您想要做的事情。
基于现有的API,您可以轻松实现文字识别、条码识别、图像标签、人脸检测、对象检测等功能;另一方面,如果您是经验丰富的ML开发人员,ML Kit还提供了便利的API,可帮助您在移动应用中使用自定义的TensorFlow Lite模型。
GIF 展示
由于功能太多,仅录制演示了部分功能
您可以直接下载演示App体验效果
各Module相关说明
app
示例App:主要用于提供MLKit各个子库的演示效果
mlkit-camera-core 已移除(从2.0.0版本开始改用 CameraScan)
Camera:为各个子库提供相机预览分析的核心库
参见CameraX
mlkit-common
公共库:介于Camera与各个子库之间,为各个子库提供公共业务,从而简化各子库的实现
mlkit-barcode-scanning
条码扫描:通过分析图像能够识别条码的内容信息
mlkit-face-detection
人脸检测:通过分析图像能够检测到人脸和分析面部轮廓关键点信息
人脸网格检测:通过分析图像能够检测到人脸网格信息
mlkit-image-labeling
图像标签:通过分析图像能够标记一般对象、场所、动物种类、产品等
请参阅图像标注
mlkit-object-detection
对象检测:通过分析图像可以检测出图像中对象的位置信息(每张图最多可以检测五个对象)
请参阅对象检测
mlkit-pose-detection
姿势检测:通过分析图像可以检测人物姿势的关键点信息
请参阅姿势检测
mlkit-pose-detection-accurate
姿势检测(精确版):通过分析图像可以检测人物姿势的关键点信息(精确版的依赖库稍大一些)
请参阅姿势检测
mlkit-segmentation-selfie
自拍分割:通过分析图像可以对自拍照的人物特征进行分割
请参阅自拍分割
mlkit-text-recognition
文字识别:识别图像中的文字信息
请参阅文字识别
引入
Gradle:
-
在Project的 build.gradle 或 setting.gradle 中添加远程仓库
repositories { //... mavenCentral() }
-
在Module的 build.gradle 中添加引入依赖项
//公共库(*必须) implementation 'com.github.jenly1314.MLKit:mlkit-common:2.2.1' //-------------------------- //条码扫描(可选) implementation 'com.github.jenly1314.MLKit:mlkit-barcode-scanning:2.2.1' //人脸检测(可选) implementation 'com.github.jenly1314.MLKit:mlkit-face-detection:2.2.1' //人脸网格检测(可选) implementation 'com.github.jenly1314.MLKit:mlkit-face-mesh-detection:2.2.1' //图像标注(可选) implementation 'com.github.jenly1314.MLKit:mlkit-image-labeling:2.2.1' //对象检测(可选) implementation 'com.github.jenly1314.MLKit:mlkit-object-detection:2.2.1' //姿势检测(可选) implementation 'com.github.jenly1314.MLKit:mlkit-pose-detection:2.2.1' //姿势检测精确版(可选) implementation 'com.github.jenly1314.MLKit:mlkit-pose-detection-accurate:2.2.1' //自拍分割(可选) implementation 'com.github.jenly1314.MLKit:mlkit-segmentation-selfie:2.2.1' //文字识别(可选) implementation 'com.github.jenly1314.MLKit:mlkit-text-recognition:2.2.1'
温馨提示
关于MLKit版本与编译SDK版本要求
使用 v2.1.x 及以上版本时,要求 compileSdkVersion >= 34
使用 v2.0.x 及以上版本时,要求 compileSdkVersion >= 33
如果 compileSdkVersion < 33,请使用 v1.x版本
使用
版本变化说明
2.x版本的变化
从 1.x 到 2.x 的主要变化如下:
- 1.x版本的 mlkit-camera-core 核心基础库被移除了;
从2.0.0版本开始改为依赖CameraScan;(CameraScan是一个独立的库,单独进行维护)
- 1.x版本的mlkit-barcode-scanning中的ViewfinderView已被移除;
从2.0.0版本开始改为依赖ViewfinderView;(ViewfinderView是一个独立的库,单独进行维护)
基于以上两点主要差异:2.x的主要使用方式和1.x基本类似,部分细节有所变更。
如果你是从1.x版本升级至2.x版本,那么你需要了解上述差异;特别是独立出去单独维护的库,其包名都有所变化,这一点需要注意,大部分变动只需更改导入的包名即可完成升级。
如果你使用的是1.x版本,请直接查看v1.x分支版本
2.x版本的使用
2.x的实现主要是以CameraScan作为基础库来实现具体的分析检测功能,所以你可以直接查看CameraScan的使用说明,只要了解了CameraScan的使用方法,自然就会使用MLKit中所有子模块了。
各个子模块的核心类说明
下面列出各个子模块实现的具体功能和核心类;主要包括实现对应功能的Analyzer和便于快速实现扫描检测的BaseCameraScanActivity或BaseCameraScanFragment的子类。
功能 | 所属子模块 | 对应的Analyzer实现 | 对应的BaseCameraScanActivity子类 |
---|---|---|---|
条码扫描 | mlkit-barcode-scanning | BarcodeScanningAnalyzer | BarcodeCameraScanActivity/QRCodeCameraScanActivity |
人脸检测 | mlkit-face-detection | FaceDetectionAnalyzer | FaceCameraScanActivity |
人脸网格检测 | mlkit-face-mesh-detection | FaceMeshDetectionAnalyzer | FaceMeshCameraScanActivity |
图像标签 | mlkit-image-labeling | ImageLabelingAnalyzer | ImageCameraScanActivity |
对象检测 | mlkit-object-detection | ObjectDetectionAnalyzer | ObjectCameraScanActivity |
姿势检测 | mlkit-pose-detection | PoseDetectionAnalyzer | PoseCameraScanActivity |
姿势检测(精确版) | mlkit-pose-detection-accurate | AccuratePoseDetectionAnalyzer | AccuratePoseCameraScanActivity |
自拍分割 | mlkit-segmentation-selfie | SegmentationAnalyzer | SegmentationCameraScanActivity |
文字识别 | mlkit-text-recognition | TextRecognitionAnalyzer | TextCameraScanActivity |
xxxCameraScanActivity和xxxBaseCameraScanFragment在上面只列出了一个,因为有一个xxxCameraScanActivity就有一个与之对应的xxxCameraScanFragment;命名前缀一样,使用方式也基本一样。
条形码检测分析示例(mlkit-barcode-scanning)
支持检测识别的条形码格式主要有:
- 线性格式:Codabar, Code 39, Code 93, Code 128, EAN-8, EAN-13, ITF, UPC-A, UPC-E
- 2D格式:Aztec, Data Matrix, PDF417, QR Code
BarcodeDecoder.process(bitmap).addOnSuccessListener(this) {
if (it.isNotEmpty()) {
// TODO 成功;此处可获取识别的结果
} else {
// TODO 没有结果
}
}.addOnFailureListener(this) {
// TODO 失败;出现异常
}
各个module的使用示例
mlkit-common (1.3.0新增)
公共库:介于Camera与各个子库之间,为各个子库提供公共业务,从而简化各子库的实现。
mlkit-barcode-scanning
扫描条形码/二维码实现示例:通过直接继承 BarcodeCameraScanActivity 实现的示例 BarcodeScanningActivity
扫描二维码实现示例:通过间接继承 BarcodeCameraScanActivity 实现的示例 QRCodeScanningActivity
扫描二维码(多个结果)实现示例:通过间接继承 BarcodeCameraScanActivity 实现的示例 MultipleQRCodeScanningActivity
mlkit-face-detection
人脸检测实现示例:通过直接继承 FaceCameraScanActivity 实现的示例 FaceDetectionActivity
多人脸检测实现示例:通过间接继承 FaceCameraScanActivity 实现的示例 MultipleFaceDetectionActivity
mlkit-face-mesh-detection (1.2.0新增)
人脸网格检测实现示例:通过直接继承 FaceMeshCameraScanActivity 实现的示例 FaceMeshDetectionActivity
mlkit-image-labeling
图像标签实现示例:通过直接继承 ImageCameraScanActivity 实现的示例 ImageLabelingActivity
mlkit-object-detection
对象检测实现示例:通过直接继承 ObjectCameraScanActivity 实现的示例 ObjectDetectionActivity
多对象检测实现示例:通过间接继承 ObjectCameraScanActivity 实现的示例 MultipleObjectDetectionActivity
mlkit-pose-detection
姿势检测实现示例:通过直接继承 PoseCameraScanActivity 实现的示例 PoseDetectionActivity
mlkit-pose-detection-accurate
姿势检测(精确版)实现示例:通过间接继承 AccuratePoseCameraScanActivity 实现的示例 AccuratePoseDetectionActivity
mlkit-segmentation-selfie
自拍分割实现示例:通过直接继承 SegmentationCameraScanActivity 实现的示例 SelfieSegmentationActivity
mlkit-text-recognition
文字识别实现示例:通过直接继承 TextCameraScanActivity 实现的示例 TextRecognitionActivity
模型配置(可选)
关于依赖项下载模型(如果选择使用 Google Play Services 中的模型)则可以通过在AndroidManifest中声明配置
<meta-data android:name="com.google.firebase.ml.vision.DEPENDENCIES"
android:value="ocr" /><!-- 使用多个模型: android:value="ocr,model2,model3" -->
例如:配置条形码模型、人脸模型、OCR模型等等~
<meta-data android:name="com.google.firebase.ml.vision.DEPENDENCIES"
android:value="barcode,face,ocr" />
更多使用详情,请查看app中的源码使用示例或直接查看API帮助文档
其他
ABI过滤
在Module的 build.gradle 文件的 android{} 块中设置支持的 SO 库架构(可选,支持多个平台的 so,支持的平台越多,APK体积越大)
defaultConfig {
//...
ndk {
//设置支持的 SO 库架构(开发者可以根据需要,选择一个或多个平台的 so)
abiFilters 'armeabi-v7a' // , 'arm64-v8a', 'x86', 'x86_64'
}
}
JDK版本
需使用JDK8+编译,在项目的build.gradle文件的android{}块中添加配置:
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
相关推荐
ZXingLite 基于zxing实现的扫码库,优化扫码和生成二维码/条形码功能。
WeChatQRCode 基于OpenCV开源的微信二维码引擎移植的扫码识别库。
CameraScan 一个简化扫描识别流程的通用基础库。
ViewfinderView ViewfinderView一个取景视图:主要用于渲染扫描相关的动画效果。
版本日志
v2.2.1:2024-8-8
- 优化细节
v2.2.0:2024-7-11
- 更新CameraScan至v1.2.0
- 更新ViewfinderView至v1.2.0
- 更新MLKit相关依赖库版本
v2.1.0:2023-12-31
- 更新CameraScan至v1.1.0
- 更新compileSdkVersion至34
- 更新Gradle至v8.0
v2.0.1:2023-9-13
- 更新CameraScan至v1.0.1
- 更新ViewfinderView至v1.1.0
v2.0.0:2023-8-13
- 移除相机核心库(mlkit-camera-core),改为依赖CameraScan
- 移除mlkit-barcode-scanning中的 ViewfinderView ,改为依赖ViewfinderView
- 优化扫描分析过程的性能体验
- 更新MLKit相关依赖库版本
v1.4.0:2023-4-15
- 优化CameraScan的缺省配置(CameraConfig相关配置)
- 优化ViewfinderView自定义属性(新增laserDrawableRatio)
- 更新MLKit相关依赖库版本
- 更新CameraX至v1.2.2
查看更多版本日志
赞赏
如果您喜欢MLKit,或感觉MLKit帮助到了您,可以点右上角"Star"支持一下,您的支持就是我的动力,谢谢 :smiley:
您也可以扫描下面的二维码,请作者喝杯咖啡 :coffee: