Может ли кто-нибудь сказать мне, как преобразовать обнаруженный текст с живой камеры в речь. До сих пор я могу обнаружить текст, но не знаю, как преобразовать его в речь

#android #text-to-speech

Вопрос:

Это код для обнаружения текста с камеры.

Я новичок в платформе Android. Сейчас я работаю над TTS(Преобразование текста в речь).До сих пор я обнаруживал текст из изображения и хотел бы, чтобы он был преобразован в речь. кто-нибудь может мне помочь?

   package com.example.textdemo;
  import androidx.annotation.NonNull;
  import androidx.annotation.Nullable;
  import androidx.appcompat.app.AppCompatActivity;
  import android.Manifest;
  import android.content.Intent;
  import android.content.pm.PackageManager;
  import android.graphics.Bitmap;
  import android.os.Bundle;
  import android.provider.MediaStore;
  import android.view.View;
  import android.widget.ImageView;
  import android.widget.TextView;
  import android.widget.Toast;
  import com.google.android.gms.tasks.OnFailureListener;
  import com.google.android.gms.tasks.OnSuccessListener;
  import com.google.android.gms.tasks.Task;
  import com.google.firebase.ml.vision.FirebaseVision;
  import com.google.firebase.ml.vision.common.FirebaseVisionImage;
  import com.google.firebase.ml.vision.text.FirebaseVisionText;
  import com.google.firebase.ml.vision.text.FirebaseVisionTextRecognizer;


public class MainActivity extends AppCompatActivity {
ImageView imageView;
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //find imageview
    imageView = findViewById(R.id.imageId);
    //find textview
    textView = findViewById(R.id.textId);
    //check app level permission is granted for Camera
    if (checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED){
        //grant the permission
        requestPermissions(new String[]{Manifest.permission.CAMERA}, 101);
    }
}


public void doProcess(View view) {
    //open the camera => create an Intent object
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(intent, 101);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Bundle bundle = data.getExtras();
    //from bundle, extract the image
    Bitmap bitmap = (Bitmap) bundle.get("data");
    //set image in imageview
    imageView.setImageBitmap(bitmap);
    //process the image
    //1. create a FirebaseVisionImage object from a Bitmap object
    FirebaseVisionImage firebaseVisionImage = FirebaseVisionImage.fromBitmap(bitmap);
    //2. Get an instance of FirebaseVision
    FirebaseVision firebaseVision = FirebaseVision.getInstance();
    //3. Create an instance of FirebaseVisionTextRecognizer
    FirebaseVisionTextRecognizer firebaseVisionTextRecognizer = 
    firebaseVision.getOnDeviceTextRecognizer();
    //4. Create a task to process the image
    Task<FirebaseVisionText> task = 
   firebaseVisionTextRecognizer.processImage(firebaseVisionImage);
    //5. if task is success
    task.addOnSuccessListener(new OnSuccessListener<FirebaseVisionText>() {
        @Override
        public void onSuccess(FirebaseVisionText firebaseVisionText) {
            String s = firebaseVisionText.getText();
            textView.setText(s);
        }
    });

    //6. if task is failure
    task.addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show();
        }
    });
}
}
    
        
 

Это мой xml-код преобразования изображения в текст

  <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:app="http://schemas.android.com/apk/res-auto"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical"
 tools:context=".MainActivity">

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@ id/imageId"/>
<Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="take pic"
    android:onClick="doProcess"/>
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@ id/textId"/>

</LinearLayout>
 

Должен ли я добавлять текст в речевой код только в этом упражнении?

Ответ №1:

Существует класс под названием TextToSpeech (TTS), который вы можете использовать для выполнения базовых TTS, или вы можете сделать это по сетевому вызову, используя Api TTS, такие как Google Cloud TTS здесь

Вот статья, которую я написал об этом.

Комментарии:

1. Это здорово, вы можете отметить этот ответ как действительный.