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

网站免费诊断怎么用2级目录做网站

网站免费诊断,怎么用2级目录做网站,医院网站建设联系方式,电子商务网站有哪些功能核心功能: 打开摄像头(可支持外接摄像头)检测翻页(后续考虑添加图像差异算法)拍照后用 识图自动用 TextToSpeech 朗读文字内容 📌 说明:使用了 CameraX(Android Jetpack)…

核心功能:

  • 打开摄像头(可支持外接摄像头)
  • 检测翻页(后续考虑添加图像差异算法)
  • 拍照后用 识图
  • 自动用 TextToSpeech 朗读文字内容

📌 说明:

  • 使用了 CameraX(Android Jetpack)处理摄像头输入

  • 使用 ML Kit 做文字识别

  • 使用 TextToSpeech 实现朗读

// Project: StoryBookReaderApp
// MainActivity.java — Android Studio 项目主类package com.example.storybookreaderapp;import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.speech.tts.TextToSpeech;
import android.util.Log;
import android.view.SurfaceView;
import android.widget.Toast;import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.camera.core.CameraSelector;
import androidx.camera.core.ImageAnalysis;
import androidx.camera.core.ImageCapture;
import androidx.camera.core.ImageCaptureException;
import androidx.camera.core.ImageProxy;
import androidx.camera.lifecycle.ProcessCameraProvider;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;import com.google.common.util.concurrent.ListenableFuture;
import com.google.mlkit.vision.common.InputImage;
import com.google.mlkit.vision.text.TextRecognition;
import com.google.mlkit.vision.text.TextRecognizer;import java.util.Locale;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;public class MainActivity extends AppCompatActivity {private static final int REQUEST_CODE_PERMISSIONS = 10;private static final String[] REQUIRED_PERMISSIONS = new String[]{Manifest.permission.CAMERA};private ExecutorService cameraExecutor;private ImageCapture imageCapture;private TextToSpeech tts;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);SurfaceView view = new SurfaceView(this);setContentView(view);if (allPermissionsGranted()) {startCamera();} else {ActivityCompat.requestPermissions(this, REQUIRED_PERMISSIONS, REQUEST_CODE_PERMISSIONS);}cameraExecutor = Executors.newSingleThreadExecutor();tts = new TextToSpeech(this, status -> {if (status != TextToSpeech.ERROR) {tts.setLanguage(Locale.US);}});}private boolean allPermissionsGranted() {for (String permission : REQUIRED_PERMISSIONS) {if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {return false;}}return true;}private void startCamera() {ListenableFuture<ProcessCameraProvider> cameraProviderFuture = ProcessCameraProvider.getInstance(this);cameraProviderFuture.addListener(() -> {try {ProcessCameraProvider cameraProvider = cameraProviderFuture.get();imageCapture = new ImageCapture.Builder().build();ImageAnalysis imageAnalysis = new ImageAnalysis.Builder().build();imageAnalysis.setAnalyzer(cameraExecutor, image -> {detectPageTurn(image);image.close();});CameraSelector cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA;cameraProvider.unbindAll();cameraProvider.bindToLifecycle(this, cameraSelector, imageCapture, imageAnalysis);} catch (Exception e) {Log.e("CameraX", "Binding failed", e);}}, ContextCompat.getMainExecutor(this));}private void detectPageTurn(ImageProxy image) {takePhotoAndRead();}private void takePhotoAndRead() {imageCapture.takePicture(ContextCompat.getMainExecutor(this), new ImageCapture.OnImageCapturedCallback() {@Overridepublic void onCaptureSuccess(@NonNull ImageProxy image) {InputImage inputImage = InputImage.fromMediaImage(image.getImage(), image.getImageInfo().getRotationDegrees());TextRecognizer recognizer = TextRecognition.getClient();recognizer.process(inputImage).addOnSuccessListener(result -> {String text = result.getText();tts.speak(text, TextToSpeech.QUEUE_FLUSH, null, null);}).addOnFailureListener(e -> Toast.makeText(MainActivity.this, "Text recognition failed", Toast.LENGTH_SHORT).show());image.close();}@Overridepublic void onError(@NonNull ImageCaptureException exception) {Log.e("CameraX", "Capture failed", exception);}});}@Overrideprotected void onDestroy() {if (tts != null) {tts.stop();tts.shutdown();}cameraExecutor.shutdown();super.onDestroy();}@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {if (requestCode == REQUEST_CODE_PERMISSIONS) {if (allPermissionsGranted()) {startCamera();} else {Toast.makeText(this, "Permissions not granted", Toast.LENGTH_SHORT).show();finish();}}}
} // End of class
http://www.dtcms.com/wzjs/813025.html

相关文章:

  • wordpress加音乐播放器网站优化的学习
  • 创意网站建设做房地产用什么网站好
  • 网站定做系统繁忙是什么原因
  • 网站建设html5模板周口搜索引擎优化
  • 怎么做优惠券的网站网站备案多少天
  • 如何入侵网站后台密码Wordpress标签与分类
  • 建设网站的企业多少钱中信建设有限责任公司崔玮
  • 网站预约挂号怎么做wordpress卢松松2019
  • wordpress网站备份还原百度收录关键词查询
  • php个人网站简洁微信哪个公司开发
  • 福建工程建设网站网站的主题
  • 网站开发能赚多少钱建盏的好处
  • 网站哪些付款二维码是怎么做的网站底部导航制作
  • 深圳网站设计公司费用大概多少网站开发制作心得
  • 电子政务网站建设总结网络企业推广
  • 多种五屏网站建设wordpress纯首页
  • 网站模板破解下载龙岗区建设工程交易服务中心
  • 做电商网站企业网站模板下载模板下载
  • 河南住房和建设厅网站视频怎么转成网址链接
  • asp网站 打开株洲seo优化公司
  • 医院建网站百度账号注销
  • 合肥 网站建设公司哪家好大宇网络做网站怎么样
  • 盐山联通大厦 网站建设西宁网站建设报价
  • 有没有专门教做扯面的网站做彩票网站违法吗
  • 安徽城乡建设厅官网站建模培训机构
  • 怎么在本地安装网站怎么做网页站点
  • 网站推广工具网络做的网站是怎么被收录
  • app开发定制外包22金华网站建设seo
  • 美食欣赏网站河北省保定市唐县城乡建设网站
  • 网站备案核验单怎么选智慧团建密码只能是8位吗