#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. Это здорово, вы можете отметить этот ответ как действительный.