Skip to content

Commit

Permalink
更新CameraX至v1.0.2
Browse files Browse the repository at this point in the history
  • Loading branch information
jenly1314 committed Oct 18, 2021
1 parent 7eb642a commit 71dbadc
Show file tree
Hide file tree
Showing 33 changed files with 1,004 additions and 111 deletions.
89 changes: 69 additions & 20 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,8 +77,46 @@ Pose检测:通过分析图像能够检测人物摆姿势的关键点信息(

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

> 参见[text-recognition](https://developers.google.cn/ml-kit/vision/text-recognition)
> 参见[text-recognition](https://developers.google.cn/ml-kit/vision/text-recognition/v2)
## ViewfinderView相关字段说明
| 字段 | 字段类型 | 默认值 | 字段说明 |
| :------| :------ | :------ | :------ |
| maskColor | color |<font color=#000000>#60000000</font>| 扫描区外遮罩的颜色 |
| frameColor | color |<font color=#1FB3E2>#7F1FB3E2</font>| 扫描区边框的颜色 |
| cornerColor | color |<font color=#1FB3E2>#FF1FB3E2</font>| 扫描区边角的颜色 |
| laserColor | color |<font color=#1FB3E2>#FF1FB3E2</font>| 扫描区激光线的颜色 |
| labelText | string | | 扫描提示文本信息 |
| labelTextColor | color |<font color=#C0C0C0>#FFC0C0C0</font>| 提示文本字体颜色 |
| labelTextSize | dimension |14sp| 提示文本字体大小 |
| labelTextPadding | dimension |24dp| 提示文本距离扫描区的间距 |
| labelTextWidth | dimension | | 提示文本的宽度,默认为View的宽度 |
| labelTextLocation | enum |bottom| 提示文本显示位置 |
| frameWidth | dimension | | 扫码框宽度 |
| frameHeight | dimension | | 扫码框高度 |
| laserStyle | enum | line | 扫描激光的样式 |
| gridColumn | integer | 20 | 网格扫描激光列数 |
| gridHeight | integer | 40dp | 网格扫描激光高度,为0dp时,表示动态铺满 |
| cornerRectWidth | dimension | 4dp | 扫描区边角的宽 |
| cornerRectHeight | dimension | 16dp | 扫描区边角的高 |
| scannerLineMoveDistance | dimension | 2dp | 扫描线每次移动距离 |
| scannerLineHeight | dimension | 5dp | 扫描线高度 |
| frameLineWidth | dimension | 1dp | 边框线宽度 |
| scannerAnimationDelay | integer | 20 | 扫描动画延迟间隔时间,单位:毫秒 |
| frameRatio | float | 0.625f | 扫码框与屏幕占比 |
| framePaddingLeft | dimension | 0 | 扫码框左边的内间距 |
| framePaddingTop | dimension | 0 | 扫码框上边的内间距 |
| framePaddingRight | dimension | 0 | 扫码框右边的内间距 |
| framePaddingBottom | dimension | 0 | 扫码框下边的内间距 |
| frameGravity | enum | center | 扫码框对齐方式 |
| pointColor | color | <font color=#1FB3E2>#FF1FB3E2</font> | 结果点的颜色 |
| pointStrokeColor | color | <font color=#FFFFFF>#FFFFFFFF</font> | 结果点描边的颜色 |
| pointRadius | dimension | 15dp | 结果点的半径 |
| pointStrokeRatio | float | 1.2 | 结果点描边半径与结果点半径的比例 |
| pointDrawable | reference | | 结果点自定义图片 |
| showPointAnim | boolean | true | 是否显示结果点的动画 |
| laserDrawable | reference | | 扫描激光自定义图片 |
| viewfinderStyle | enum | classic | 取景框样式;支持:classic:经典样式(带扫码框那种)、popular:流行样式(不带扫码框) |

## 引入

Expand Down Expand Up @@ -110,32 +148,32 @@ allprojects {
2. 在Module的 **build.gradle** 里面添加引入依赖项
```gradle
//Camera核心 (*必须项)
implementation 'com.github.jenly1314.MLKit:mlkit-camera-core:1.0.2'
//Camera核心 (*必须)
implementation 'com.github.jenly1314.MLKit:mlkit-camera-core:1.0.3'
//条码识别 (可选项)
implementation 'com.github.jenly1314.MLKit:mlkit-barcode-scanning:1.0.2'
//条码识别 (可选)
implementation 'com.github.jenly1314.MLKit:mlkit-barcode-scanning:1.0.3'
//人脸检测 (可选项)
implementation 'com.github.jenly1314.MLKit:mlkit-face-detection:1.0.2'
//人脸检测 (可选)
implementation 'com.github.jenly1314.MLKit:mlkit-face-detection:1.0.3'
//图像标记 (可选项)
implementation 'com.github.jenly1314.MLKit:mlkit-image-labeling:1.0.2'
//图像标记 (可选)
implementation 'com.github.jenly1314.MLKit:mlkit-image-labeling:1.0.3'
//对象检测 (可选项)
implementation 'com.github.jenly1314.MLKit:mlkit-object-detection:1.0.2'
//对象检测 (可选)
implementation 'com.github.jenly1314.MLKit:mlkit-object-detection:1.0.3'
//Pose检测 (可选项)
implementation 'com.github.jenly1314.MLKit:mlkit-pose-detection:1.0.2'
//Pose检测 (可选)
implementation 'com.github.jenly1314.MLKit:mlkit-pose-detection:1.0.3'
//Pose检测精确版 (可选项)
implementation 'com.github.jenly1314.MLKit:mlkit-pose-detection-accurate:1.0.2'
//Pose检测精确版 (可选)
implementation 'com.github.jenly1314.MLKit:mlkit-pose-detection-accurate:1.0.3'
//自拍分割 (可选项)
implementation 'com.github.jenly1314.MLKit:mlkit-segmentation-selfie:1.0.2'
//自拍分割 (可选)
implementation 'com.github.jenly1314.MLKit:mlkit-segmentation-selfie:1.0.3'
//文字识别 (可选项)
implementation 'com.github.jenly1314.MLKit:mlkit-text-recognition:1.0.2'
//文字识别 (可选)
implementation 'com.github.jenly1314.MLKit:mlkit-text-recognition:1.0.3'
```

Expand Down Expand Up @@ -219,6 +257,11 @@ Camera核心:为各个子库提供相机预览分析的核心库。
扫二维码实现示例:通过间接继承 **BarcodeCameraScanActivity** 实现的示例
[QRCodeScanningActivity](app/src/main/java/com/king/mlkit/vision/app/barcode/QRCodeScanningActivity.kt)


扫二维码(多个结果)实现示例:通过间接继承 **BarcodeCameraScanActivity** 实现的示例
[MultipleQRCodeScanningActivity](app/src/main/java/com/king/mlkit/vision/app/barcode/MultipleQRCodeScanningActivity.kt)


#### mlkit-face-detection

人脸检测实现示例:通过直接继承 **FaceCameraScanActivity** 实现的示例
Expand Down Expand Up @@ -305,6 +348,12 @@ compileOptions {

## 版本记录

#### 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的一些默认配置
Expand Down
1 change: 0 additions & 1 deletion app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ android {
abortOnError false
}


compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
Expand Down
Binary file modified app/release/app-release.apk
Binary file not shown.
4 changes: 2 additions & 2 deletions app/release/output-metadata.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@
{
"type": "SINGLE",
"filters": [],
"versionCode": 3,
"versionName": "1.0.2",
"versionCode": 4,
"versionName": "1.0.3",
"outputFile": "app-release.apk"
}
]
Expand Down
4 changes: 4 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,10 @@
</intent-filter>
</activity>

<activity android:name=".barcode.MultipleQRCodeScanningActivity"
android:screenOrientation="portrait"
android:theme="@style/CameraScanTheme"/>

<activity android:name=".barcode.QRCodeScanningActivity"
android:screenOrientation="portrait"
android:theme="@style/CameraScanTheme"/>
Expand Down
13 changes: 12 additions & 1 deletion app/src/main/java/com/king/mlkit/vision/app/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import com.king.app.dialog.AppDialogConfig
import com.king.mlkit.vision.app.`object`.MultipleObjectDetectionActivity
import com.king.mlkit.vision.app.`object`.ObjectDetectionActivity
import com.king.mlkit.vision.app.barcode.BarcodeScanningActivity
import com.king.mlkit.vision.app.barcode.MultipleQRCodeScanningActivity
import com.king.mlkit.vision.app.barcode.QRCodeScanningActivity
import com.king.mlkit.vision.app.face.FaceDetectionActivity
import com.king.mlkit.vision.app.face.MultipleFaceDetectionActivity
Expand All @@ -38,6 +39,7 @@ import com.king.mlkit.vision.app.pose.PoseDetectionActivity
import com.king.mlkit.vision.app.segmentation.SelfieSegmentationActivity
import com.king.mlkit.vision.app.text.TextRecognitionActivity
import com.king.mlkit.vision.barcode.BarcodeDecoder
import com.king.mlkit.vision.camera.CameraScan
import com.king.mlkit.vision.camera.analyze.Analyzer.OnAnalyzeListener
import com.king.mlkit.vision.camera.util.LogUtils
import com.king.mlkit.vision.camera.util.PermissionUtils
Expand All @@ -52,6 +54,8 @@ class MainActivity : AppCompatActivity() {

const val REQUEST_CODE_PHOTO = 1
const val REQUEST_CODE_REQUEST_EXTERNAL_STORAGE = 2

const val REQUEST_CODE_SCAN_CODE = 3
}

override fun onCreate(savedInstanceState: Bundle?) {
Expand All @@ -64,6 +68,7 @@ class MainActivity : AppCompatActivity() {
if(resultCode == RESULT_OK){
when(requestCode){
REQUEST_CODE_PHOTO -> processPhoto(data)
REQUEST_CODE_SCAN_CODE -> processScanResult(data)
}
}
}
Expand All @@ -77,6 +82,11 @@ class MainActivity : AppCompatActivity() {

fun getContext() = this

private fun processScanResult(data: Intent?){
val text = CameraScan.parseScanResult(data)
Toast.makeText(this,text,Toast.LENGTH_SHORT).show()
}

private fun processPhoto(data: Intent?){
data?.let {
try{
Expand Down Expand Up @@ -143,7 +153,8 @@ class MainActivity : AppCompatActivity() {

fun onClick(v: View){
when (v.id){
R.id.btn0 -> startActivity(QRCodeScanningActivity::class.java)
R.id.btn -> startActivityForResult(Intent(this,QRCodeScanningActivity::class.java),REQUEST_CODE_SCAN_CODE)
R.id.btn0 -> startActivity(MultipleQRCodeScanningActivity::class.java)
R.id.btn1 -> startActivity(BarcodeScanningActivity::class.java)
R.id.btn2 -> pickPhotoClicked(true)
R.id.btn3 -> pickPhotoClicked(false)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,9 @@
*/
package com.king.mlkit.vision.app.barcode

import android.annotation.SuppressLint
import android.widget.ImageView
import androidx.camera.core.CameraX
import com.google.mlkit.vision.barcode.Barcode
import com.king.app.dialog.AppDialog
import com.king.app.dialog.AppDialogConfig
Expand Down Expand Up @@ -60,7 +62,6 @@ class BarcodeScanningActivity : BarcodeCameraScanActivity() {
val imageView = config.getView<ImageView>(R.id.ivDialogContent)
imageView.setImageBitmap(bitmap)
AppDialog.INSTANCE.showDialog(config,false)

}


Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
/*
* Copyright (C) Jenly, MLKit Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.king.mlkit.vision.app.barcode

import android.widget.ImageView
import com.google.mlkit.vision.barcode.Barcode
import com.king.app.dialog.AppDialog
import com.king.app.dialog.AppDialogConfig
import com.king.mlkit.vision.app.R
import com.king.mlkit.vision.app.drawRect
import com.king.mlkit.vision.barcode.QRCodeCameraScanActivity
import com.king.mlkit.vision.camera.AnalyzeResult
import java.lang.StringBuilder

/**
* @author <a href="mailto:[email protected]">Jenly</a>
*/
class MultipleQRCodeScanningActivity : QRCodeCameraScanActivity() {


override fun initCameraScan() {
super.initCameraScan()
cameraScan.setPlayBeep(true)
.setVibrate(true)
}

override fun getLayoutId(): Int {
return R.layout.multiple_qrcode_scan_activity
}

override fun onScanResultCallback(result: AnalyzeResult<MutableList<Barcode>>) {

cameraScan.setAnalyzeImage(false)

val buffer = StringBuilder()
val bitmap = result.bitmap.drawRect {canvas,paint ->
for ((index,data) in result.result.withIndex()) {
buffer.append("[$index] ").append(data.displayValue).append("\n")
canvas.drawRect(data.boundingBox,paint)
}
}

val config = AppDialogConfig(this, R.layout.barcode_result_dialog)
config.setContent(buffer).setOnClickOk {
AppDialog.INSTANCE.dismissDialog()
cameraScan.setAnalyzeImage(true)
}.setOnClickCancel {
AppDialog.INSTANCE.dismissDialog()
finish()
}
val imageView = config.getView<ImageView>(R.id.ivDialogContent)
imageView.setImageBitmap(bitmap)
AppDialog.INSTANCE.showDialog(config,false)
}


}
Loading

0 comments on commit 71dbadc

Please sign in to comment.