当前位置: 首页 > news >正文

优质网站建设报价婺源网站建设

优质网站建设报价,婺源网站建设,网页制作工具的应用及页面制作实验报告,专业东莞网站制作公司随着移动设备的普及和摄像头的高像素化,利用相机进行文本识别成为了一种流行的方式。MLKit 是 Google 提供的一款机器学习工具包,其中包含了丰富的图像和语言处理功能,包括文本识别。PreviewView 是 Android Jetpack 的一部分,它提…

在这里插入图片描述
随着移动设备的普及和摄像头的高像素化,利用相机进行文本识别成为了一种流行的方式。MLKit 是 Google 提供的一款机器学习工具包,其中包含了丰富的图像和语言处理功能,包括文本识别。PreviewView 是 Android Jetpack 的一部分,它提供了一个方便的预览相机图像的视图组件。结合 MLKit 和 PreviewView,我们可以轻松构建出一个功能强大的文本识别应用程序。

添加依赖

为了使用 MLKit 和 PreviewView,我们需要在项目的 build.gradle 文件中添加相应的依赖项。以下是所需的依赖项:

// camera
def camerax_version = "1.2.1"
implementation "androidx.camera:camera-core:${camerax_version}"
implementation "androidx.camera:camera-camera2:${camerax_version}"
implementation "androidx.camera:camera-lifecycle:${camerax_version}"
implementation "androidx.camera:camera-video:${camerax_version}"
implementation "androidx.camera:camera-view:${camerax_version}"
implementation "androidx.camera:camera-extensions:${camerax_version}"// To recognize Chinese script
implementation 'com.google.mlkit:text-recognition-chinese:16.0.0'

以上依赖项包含了与相机操作和中文文本识别相关的库。

XML 布局

在布局文件中,我们需要添加一个 PreviewView(相机预览视图),一个按钮用于开始/停止文本识别,以及一个用于显示识别结果的 TextView。以下是布局文件的示例代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MainActivity"><androidx.camera.view.PreviewViewandroid:id="@+id/pre_view"android:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1" /><Buttonandroid:id="@+id/btn_operation"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="点击停止文本识别"android:layout_marginHorizontal="16dp" /><TextViewandroid:id="@+id/tv_content"android:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1"android:padding="6dp" /></LinearLayout>

上述布局文件包含了一个垂直排列的 LinearLayout,其中包含了一个 PreviewView、一个按钮和一个用于显示识别结果的 TextView。

代码实现

在代码实现部分,首先检查相机权限

<manifest xmlns:android="http://schemas.android.com/apk/res/android"><uses-permission android:name="android.permission.CAMERA"/>
</manifest>

在权限被授予时初始化相机,进行文本识别。我们设置按钮的点击事件监听器,根据当前相机的状态执行相应的操作。当按钮被点击时,我们会根据相机的状态开始或停止文本识别,默认处于识别状态中。

class MainActivity : AppCompatActivity() {private lateinit var binding: ActivityMainBindingprivate var cameraProvider: ProcessCameraProvider? = nulloverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)binding = ActivityMainBinding.inflate(layoutInflater)setContentView(binding.root)requestPermission()binding.btnOperation.setOnClickListener {cameraProvider?.let {binding.btnOperation.text = "点击开始文本识别"cameraProvider?.unbindAll()cameraProvider = null} ?: run {binding.btnOperation.text = "点击停止文本识别"setupCamera()}}}// 其他方法和实现代码...}

onCreate() 方法中,我们设置了按钮的点击事件监听器。当按钮被点击时,我们根据当前的相机状态执行相应的操作。如果相机已经初始化并正在运行,我们会停止文本识别并释放相机资源。如果相机未初始化或已停止,我们将开始文本识别并设置相机。

接下来,我们实现了请求相机权限的方法 requestPermission(),并在 onCreate() 方法中调用它。在 onRequestPermissionsResult() 方法中,我们检查相机权限的授权结果。如果权限被授予,我们将调用 setupCamera() 方法初始化相机。如果权限被拒绝,我们将显示一个简短的提示消息。

/**
* 申请相机权限
*/
private fun requestPermission() {if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.CAMERA), CAMERA_PERMISSION_CODE)} else {setupCamera()}
}override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {super.onRequestPermissionsResult(requestCode, permissions, grantResults)if (requestCode == CAMERA_PERMISSION_CODE) {if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {setupCamera()} else {Toast.makeText(this, "权限被拒绝", Toast.LENGTH_SHORT).show()}}
}

requestPermission() 方法中,我们检查相机权限并请求授权。如果权限已被授予,我们将调用 setupCamera() 方法初始化相机。

/**
* 设置相机
*/
private fun setupCamera() {val cameraProviderFuture = ProcessCameraProvider.getInstance(this)cameraProviderFuture.addListener({val cameraProvider = cameraProviderFuture.get()bindPreview(cameraProvider)}, ContextCompat.getMainExecutor(this))
}

setupCamera() 方法中,我们使用 ProcessCameraProvider 获取相机实例,并通过 bindPreview() 方法将相机与 PreviewView 绑定。

/**
* 绑定 preview
*/
private fun bindPreview(cameraProvider: ProcessCameraProvider) {this.cameraProvider = cameraProviderval preview = Preview.Builder().build()val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERApreview.setSurfaceProvider(binding.preView.surfaceProvider)val analysis = ImageAnalysis.Builder().setOutputImageFormat(ImageAnalysis.OUTPUT_IMAGE_FORMAT_YUV_420_888).setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST).build()analysis.setAnalyzer(Executors.newSingleThreadExecutor(), this::analyzeImage)cameraProvider.bindToLifecycle(this, cameraSelector, preview, analysis)
}

bindPreview() 方法中,我们创建了一个 Preview 实例,并将其与默认后置摄像头绑定。然后,我们设置 PreviewView 的 SurfaceProvider,并创建一个 ImageAnalysis 实例用于图像分析。通过设置图像分析器的回调方法,我们可以在每帧图像上执行文本识别。

/**
* 解析文本
*/
@SuppressLint("UnsafeOptInUsageError")
private fun analyzeImage(imageProxy: ImageProxy) {val image = imageProxy.image ?: returnval inputImage = InputImage.fromMediaImage(image, imageProxy.imageInfo.rotationDegrees)val recognizer = TextRecognition.getClient(ChineseTextRecognizerOptions.Builder().build())recognizer.process(inputImage).addOnSuccessListener { result ->binding.tvContent.text = result.text}.addOnCompleteListener {// 释放ImageProxy对象 imageProxy.close()}.addOnFailureListener {// 处理识别过程中的错误it.printStackTrace()imageProxy.close()}
}

通过实现了 analyzeImage() 方法,用于分析图像并执行文本识别。在该方法中,我们首先将 ImageProxy 转换为 InputImage,然后创建一个中文文本识别器。接下来,我们使用识别器对图像进行处理,并在成功完成时更新 TextView 的内容。无论成功与否,最后都会关闭 ImageProxy。这里如果我们想识别图片(Bitmap)中的文字可以调用 InputImage.fromBitmap 方法即可。

演示

Ok,到这里我们文本识别的功能 demo 就实现了, 看看效果吧:

textreconition.gif

总结

通过结合 MLKit 和 PreviewView,我们可以轻松实现 Android 应用程序中的文本识别功能。在本篇文章中,我们详细讲解了如何使用 MLKit 和 PreviewView 实现文本识别。感兴趣的小伙伴可参考 Demo 地址:TextRecognition

http://www.yayakq.cn/news/836764/

相关文章:

  • 黄冈免费网站推广平台汇总手机制作网站软件下载
  • wordpress 关闭网站中国电信云服务器
  • 微信网站建设方案ppt产品设计流程
  • 网站建设价格便宜扬州网站建设icp备
  • 网站搭建工作怎么样xampp配置wordpress
  • 网站开发建设赚钱吗网站开发老板排名
  • 公司网站主页排版手机网站的页面大小
  • 网站模板提供源码中山做百度网站的公司
  • 张掖市建设局网站苏州做企业网站公司
  • 长春网站建设同信中江县 网站建设
  • html5网站有哪些织梦分类信息做的网站
  • 苏州企业网站公司都有哪些html制作一个个人主页网站
  • 网站开发常用问题中国建设银行 网站登录
  • 项目建设网站大全桂林市建设局网站
  • wordpress 全站 下载千库网ppt模板
  • 网站开发有什么注意的网络公司网站源码 网络建设工作室网站模板 织梦广告设计公司源码
  • 怎么做动漫原创视频网站建设网站 莆田
  • 网站建设公司公司介绍网站pc端网址和手机端网址建设
  • 省内注销二建 建设部网站更新慢深圳网站营销推广公司电话
  • 公司做的网站访问很慢北辰做网站
  • 网站建设大概费用网站建设与管理 期末
  • 北京网络建站网站要有可留言功能 怎么做
  • 高端网站开发程wordpress 裁剪
  • 那种漂亮的网站怎么做怎么劝客户做网站
  • 深圳网站建 1设骏域网站建设有关网站建设合同
  • 百度站长工具怎么用淘宝天猫优惠券网站怎么做
  • 网站买了服务器后该怎么做网页该如何推广
  • 视觉做的比较好的国外网站免费游戏不用登录直接玩
  • 哪里建网站性价比高成都市建设路小学网站
  • 网站设计包含哪些技术百度直播平台