Skip to content

Commit 71dbadc

Browse files
committed
更新CameraX至v1.0.2
1 parent 7eb642a commit 71dbadc

File tree

33 files changed

+1004
-111
lines changed

33 files changed

+1004
-111
lines changed

README.md

Lines changed: 69 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,46 @@ Pose检测:通过分析图像能够检测人物摆姿势的关键点信息(
7777

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

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

83121
## 引入
84122

@@ -110,32 +148,32 @@ allprojects {
110148
2. 在Module的 **build.gradle** 里面添加引入依赖项
111149
```gradle
112150
113-
//Camera核心 (*必须项)
114-
implementation 'com.github.jenly1314.MLKit:mlkit-camera-core:1.0.2'
151+
//Camera核心 (*必须)
152+
implementation 'com.github.jenly1314.MLKit:mlkit-camera-core:1.0.3'
115153
116-
//条码识别 (可选项)
117-
implementation 'com.github.jenly1314.MLKit:mlkit-barcode-scanning:1.0.2'
154+
//条码识别 (可选)
155+
implementation 'com.github.jenly1314.MLKit:mlkit-barcode-scanning:1.0.3'
118156
119-
//人脸检测 (可选项)
120-
implementation 'com.github.jenly1314.MLKit:mlkit-face-detection:1.0.2'
157+
//人脸检测 (可选)
158+
implementation 'com.github.jenly1314.MLKit:mlkit-face-detection:1.0.3'
121159
122-
//图像标记 (可选项)
123-
implementation 'com.github.jenly1314.MLKit:mlkit-image-labeling:1.0.2'
160+
//图像标记 (可选)
161+
implementation 'com.github.jenly1314.MLKit:mlkit-image-labeling:1.0.3'
124162
125-
//对象检测 (可选项)
126-
implementation 'com.github.jenly1314.MLKit:mlkit-object-detection:1.0.2'
163+
//对象检测 (可选)
164+
implementation 'com.github.jenly1314.MLKit:mlkit-object-detection:1.0.3'
127165
128-
//Pose检测 (可选项)
129-
implementation 'com.github.jenly1314.MLKit:mlkit-pose-detection:1.0.2'
166+
//Pose检测 (可选)
167+
implementation 'com.github.jenly1314.MLKit:mlkit-pose-detection:1.0.3'
130168
131-
//Pose检测精确版 (可选项)
132-
implementation 'com.github.jenly1314.MLKit:mlkit-pose-detection-accurate:1.0.2'
169+
//Pose检测精确版 (可选)
170+
implementation 'com.github.jenly1314.MLKit:mlkit-pose-detection-accurate:1.0.3'
133171
134-
//自拍分割 (可选项)
135-
implementation 'com.github.jenly1314.MLKit:mlkit-segmentation-selfie:1.0.2'
172+
//自拍分割 (可选)
173+
implementation 'com.github.jenly1314.MLKit:mlkit-segmentation-selfie:1.0.3'
136174
137-
//文字识别 (可选项)
138-
implementation 'com.github.jenly1314.MLKit:mlkit-text-recognition:1.0.2'
175+
//文字识别 (可选)
176+
implementation 'com.github.jenly1314.MLKit:mlkit-text-recognition:1.0.3'
139177
140178
```
141179

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

260+
261+
扫二维码(多个结果)实现示例:通过间接继承 **BarcodeCameraScanActivity** 实现的示例
262+
[MultipleQRCodeScanningActivity](app/src/main/java/com/king/mlkit/vision/app/barcode/MultipleQRCodeScanningActivity.kt)
263+
264+
222265
#### mlkit-face-detection
223266

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

306349
## 版本记录
307350

351+
#### v1.0.3:2021-10-18
352+
* 更新CameraX至v1.0.2
353+
* ViewfinderView新增支持显示结果点相关
354+
* 新增扫二维码有多个结果时可选实现示例(类似于新版微信效果)
355+
* 文字识别(text recognition)改为静态(即:使用v2)
356+
308357
#### v1.0.2:2021-8-4
309358
* 更新CameraX至v1.0.1
310359
* 优化CameraConfig的一些默认配置

app/build.gradle

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ android {
2525
abortOnError false
2626
}
2727

28-
2928
compileOptions {
3029
sourceCompatibility JavaVersion.VERSION_1_8
3130
targetCompatibility JavaVersion.VERSION_1_8

app/release/app-release.apk

23.1 MB
Binary file not shown.

app/release/output-metadata.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
{
1111
"type": "SINGLE",
1212
"filters": [],
13-
"versionCode": 3,
14-
"versionName": "1.0.2",
13+
"versionCode": 4,
14+
"versionName": "1.0.3",
1515
"outputFile": "app-release.apk"
1616
}
1717
]

app/src/main/AndroidManifest.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@
2727
</intent-filter>
2828
</activity>
2929

30+
<activity android:name=".barcode.MultipleQRCodeScanningActivity"
31+
android:screenOrientation="portrait"
32+
android:theme="@style/CameraScanTheme"/>
33+
3034
<activity android:name=".barcode.QRCodeScanningActivity"
3135
android:screenOrientation="portrait"
3236
android:theme="@style/CameraScanTheme"/>

app/src/main/java/com/king/mlkit/vision/app/MainActivity.kt

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import com.king.app.dialog.AppDialogConfig
2929
import com.king.mlkit.vision.app.`object`.MultipleObjectDetectionActivity
3030
import com.king.mlkit.vision.app.`object`.ObjectDetectionActivity
3131
import com.king.mlkit.vision.app.barcode.BarcodeScanningActivity
32+
import com.king.mlkit.vision.app.barcode.MultipleQRCodeScanningActivity
3233
import com.king.mlkit.vision.app.barcode.QRCodeScanningActivity
3334
import com.king.mlkit.vision.app.face.FaceDetectionActivity
3435
import com.king.mlkit.vision.app.face.MultipleFaceDetectionActivity
@@ -38,6 +39,7 @@ import com.king.mlkit.vision.app.pose.PoseDetectionActivity
3839
import com.king.mlkit.vision.app.segmentation.SelfieSegmentationActivity
3940
import com.king.mlkit.vision.app.text.TextRecognitionActivity
4041
import com.king.mlkit.vision.barcode.BarcodeDecoder
42+
import com.king.mlkit.vision.camera.CameraScan
4143
import com.king.mlkit.vision.camera.analyze.Analyzer.OnAnalyzeListener
4244
import com.king.mlkit.vision.camera.util.LogUtils
4345
import com.king.mlkit.vision.camera.util.PermissionUtils
@@ -52,6 +54,8 @@ class MainActivity : AppCompatActivity() {
5254

5355
const val REQUEST_CODE_PHOTO = 1
5456
const val REQUEST_CODE_REQUEST_EXTERNAL_STORAGE = 2
57+
58+
const val REQUEST_CODE_SCAN_CODE = 3
5559
}
5660

5761
override fun onCreate(savedInstanceState: Bundle?) {
@@ -64,6 +68,7 @@ class MainActivity : AppCompatActivity() {
6468
if(resultCode == RESULT_OK){
6569
when(requestCode){
6670
REQUEST_CODE_PHOTO -> processPhoto(data)
71+
REQUEST_CODE_SCAN_CODE -> processScanResult(data)
6772
}
6873
}
6974
}
@@ -77,6 +82,11 @@ class MainActivity : AppCompatActivity() {
7782

7883
fun getContext() = this
7984

85+
private fun processScanResult(data: Intent?){
86+
val text = CameraScan.parseScanResult(data)
87+
Toast.makeText(this,text,Toast.LENGTH_SHORT).show()
88+
}
89+
8090
private fun processPhoto(data: Intent?){
8191
data?.let {
8292
try{
@@ -143,7 +153,8 @@ class MainActivity : AppCompatActivity() {
143153

144154
fun onClick(v: View){
145155
when (v.id){
146-
R.id.btn0 -> startActivity(QRCodeScanningActivity::class.java)
156+
R.id.btn -> startActivityForResult(Intent(this,QRCodeScanningActivity::class.java),REQUEST_CODE_SCAN_CODE)
157+
R.id.btn0 -> startActivity(MultipleQRCodeScanningActivity::class.java)
147158
R.id.btn1 -> startActivity(BarcodeScanningActivity::class.java)
148159
R.id.btn2 -> pickPhotoClicked(true)
149160
R.id.btn3 -> pickPhotoClicked(false)

app/src/main/java/com/king/mlkit/vision/app/barcode/BarcodeScanningActivity.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@
1515
*/
1616
package com.king.mlkit.vision.app.barcode
1717

18+
import android.annotation.SuppressLint
1819
import android.widget.ImageView
20+
import androidx.camera.core.CameraX
1921
import com.google.mlkit.vision.barcode.Barcode
2022
import com.king.app.dialog.AppDialog
2123
import com.king.app.dialog.AppDialogConfig
@@ -60,7 +62,6 @@ class BarcodeScanningActivity : BarcodeCameraScanActivity() {
6062
val imageView = config.getView<ImageView>(R.id.ivDialogContent)
6163
imageView.setImageBitmap(bitmap)
6264
AppDialog.INSTANCE.showDialog(config,false)
63-
6465
}
6566

6667

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
/*
2+
* Copyright (C) Jenly, MLKit Open Source Project
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package com.king.mlkit.vision.app.barcode
17+
18+
import android.widget.ImageView
19+
import com.google.mlkit.vision.barcode.Barcode
20+
import com.king.app.dialog.AppDialog
21+
import com.king.app.dialog.AppDialogConfig
22+
import com.king.mlkit.vision.app.R
23+
import com.king.mlkit.vision.app.drawRect
24+
import com.king.mlkit.vision.barcode.QRCodeCameraScanActivity
25+
import com.king.mlkit.vision.camera.AnalyzeResult
26+
import java.lang.StringBuilder
27+
28+
/**
29+
* @author <a href="mailto:jenly1314@gmail.com">Jenly</a>
30+
*/
31+
class MultipleQRCodeScanningActivity : QRCodeCameraScanActivity() {
32+
33+
34+
override fun initCameraScan() {
35+
super.initCameraScan()
36+
cameraScan.setPlayBeep(true)
37+
.setVibrate(true)
38+
}
39+
40+
override fun getLayoutId(): Int {
41+
return R.layout.multiple_qrcode_scan_activity
42+
}
43+
44+
override fun onScanResultCallback(result: AnalyzeResult<MutableList<Barcode>>) {
45+
46+
cameraScan.setAnalyzeImage(false)
47+
48+
val buffer = StringBuilder()
49+
val bitmap = result.bitmap.drawRect {canvas,paint ->
50+
for ((index,data) in result.result.withIndex()) {
51+
buffer.append("[$index] ").append(data.displayValue).append("\n")
52+
canvas.drawRect(data.boundingBox,paint)
53+
}
54+
}
55+
56+
val config = AppDialogConfig(this, R.layout.barcode_result_dialog)
57+
config.setContent(buffer).setOnClickOk {
58+
AppDialog.INSTANCE.dismissDialog()
59+
cameraScan.setAnalyzeImage(true)
60+
}.setOnClickCancel {
61+
AppDialog.INSTANCE.dismissDialog()
62+
finish()
63+
}
64+
val imageView = config.getView<ImageView>(R.id.ivDialogContent)
65+
imageView.setImageBitmap(bitmap)
66+
AppDialog.INSTANCE.showDialog(config,false)
67+
}
68+
69+
70+
}

0 commit comments

Comments
 (0)