TTS 无法在 tensorflow 中用于手势检测 android 应用
TTS not working in tensorflow for gesture detection android app
我正在制作一个手势检测应用程序,如果您执行 ASL,它会检测您正在执行的手势并显示如下结果。
我还实现了一个 EditText
字段,用于检索结果。我正在尝试 Text-To-Speech
或 TTS
.
我正在使用 Log.i("Recognitionss", String.valueOf(results.get(0).getTitle()));
将结果记录到 DetectorActivity.java
生成的日志结果如下所示,它给了我手势,我已将其传递给 XML
文件
2021-04-14 19:34:24.826 29814-29924/org.tensorflow.lite.examples.detection I/Recognitionss: L
2021-04-14 19:34:24.835 29814-29924/org.tensorflow.lite.examples.detection I/tensorflow: MultiBoxTracker: Processing 1 results from 123
2021-04-14 19:34:24.855 29814-29814/org.tensorflow.lite.examples.detection I/tensorflow: DetectorActivity: Preparing image 128 for detection in bg thread.
2021-04-14 19:34:24.876 29814-29924/org.tensorflow.lite.examples.detection I/tensorflow: DetectorActivity: Running detection on image 128
- 我已将
Button
和 EditText
添加到我的 bottom sheet
导航中。
<Button
android:id="@+id/btnSpeak"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView1"
android:layout_below="@+id/textView1"
android:layout_marginTop="10dp"
android:text="Voice Conversion" />
<EditText
android:id="@+id/txtText"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:inputType="text"/>
- Java
TTS
代码
package org.tensorflow.lite.examples.detection;
import android.os.Build;
import android.speech.tts.TextToSpeech;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import java.util.Locale;
public class AndroidTextToSpeechActivity extends AppCompatActivity {
Button btnSpeak;
EditText editText;
TextToSpeech textToSpeech;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tfe_od_layout_bottom_sheet);
// Init TextToSpeech
textToSpeech = new TextToSpeech(this, new TextToSpeech.OnInitListener() {
@Override
public void onInit(int status) {
if (status == TextToSpeech.SUCCESS) {
int result = textToSpeech.setLanguage(Locale.ENGLISH);
if (result == TextToSpeech.LANG_MISSING_DATA ||
result == TextToSpeech.LANG_NOT_SUPPORTED) {
Toast.makeText(getApplicationContext(), "This language is not supported!",
Toast.LENGTH_SHORT);
} else {
btnSpeak.setEnabled(true);
textToSpeech.setPitch(0.6f);
textToSpeech.setSpeechRate(1.0f);
speak();
}
}
}
});
// Init View
btnSpeak = (Button)findViewById(R.id.btnSpeak);
editText = (EditText)findViewById(R.id.txtText);
btnSpeak.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
speak();
}
});
}
private void speak() {
String text = editText.getText().toString();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
textToSpeech.speak(text, TextToSpeech.QUEUE_FLUSH, null, null);
} else {
textToSpeech.speak(text, TextToSpeech.QUEUE_FLUSH, null);
}
}
@Override
protected void onDestroy() {
if (textToSpeech != null) {
textToSpeech.stop();
textToSpeech.shutdown();
}
super.onDestroy();
}
}
- 问题是当我点击按钮时没有语音反馈,控制台也没有报错或者logcat。
- 解决方案
- 添加了下面的代码,其中添加了一个
textview
和一个 imageview
你可以使用按钮或任何你喜欢使用的东西,这给了我下面的输出。
- 然后在
CameraActivity.java
下定义ImageView
private speakImageView;
speakImageView = findViewById(R.id.speak1);
// set onClick listener
speakImageView.setOnClickListener(this);
- 然后在onClick方法下我定义了如果遇到特定的字母播放那个字母的声音。我使用了
mp3
声音文件,因为我无法实现 TTS
,所以我选择使用 mp3
。
@Override
public void onClick(View v) {
// some code
...
// voice for the detected alphabet
else if (v.getId() == R.id.speak1) {
// this is the value we are showing
EditText mEdit = findViewById(R.id.editText);
String letter = mEdit.getText().toString();
if (letter.equalsIgnoreCase("A")) {
final MediaPlayer mp100 = MediaPlayer.create(this, R.raw.letter_a);
mp100.start();
}
else if (letter.equalsIgnoreCase("B")) {
final MediaPlayer mp100 = MediaPlayer.create(this, R.raw.letter_b);
mp100.start();
}
// similarly you can do the same for other alphabets also
}
}
- 这不是理想的方法,但由于 ```TTS`` 对我不起作用,因为我是 android.[=30 的新手,几乎搜索了一周或两周后使用了此方法=]
我正在制作一个手势检测应用程序,如果您执行 ASL,它会检测您正在执行的手势并显示如下结果。
我还实现了一个
EditText
字段,用于检索结果。我正在尝试Text-To-Speech
或TTS
.我正在使用
Log.i("Recognitionss", String.valueOf(results.get(0).getTitle()));
将结果记录到DetectorActivity.java
生成的日志结果如下所示,它给了我手势,我已将其传递给
XML
文件
2021-04-14 19:34:24.826 29814-29924/org.tensorflow.lite.examples.detection I/Recognitionss: L
2021-04-14 19:34:24.835 29814-29924/org.tensorflow.lite.examples.detection I/tensorflow: MultiBoxTracker: Processing 1 results from 123
2021-04-14 19:34:24.855 29814-29814/org.tensorflow.lite.examples.detection I/tensorflow: DetectorActivity: Preparing image 128 for detection in bg thread.
2021-04-14 19:34:24.876 29814-29924/org.tensorflow.lite.examples.detection I/tensorflow: DetectorActivity: Running detection on image 128
- 我已将
Button
和EditText
添加到我的bottom sheet
导航中。
<Button
android:id="@+id/btnSpeak"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView1"
android:layout_below="@+id/textView1"
android:layout_marginTop="10dp"
android:text="Voice Conversion" />
<EditText
android:id="@+id/txtText"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:inputType="text"/>
- Java
TTS
代码
package org.tensorflow.lite.examples.detection;
import android.os.Build;
import android.speech.tts.TextToSpeech;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import java.util.Locale;
public class AndroidTextToSpeechActivity extends AppCompatActivity {
Button btnSpeak;
EditText editText;
TextToSpeech textToSpeech;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tfe_od_layout_bottom_sheet);
// Init TextToSpeech
textToSpeech = new TextToSpeech(this, new TextToSpeech.OnInitListener() {
@Override
public void onInit(int status) {
if (status == TextToSpeech.SUCCESS) {
int result = textToSpeech.setLanguage(Locale.ENGLISH);
if (result == TextToSpeech.LANG_MISSING_DATA ||
result == TextToSpeech.LANG_NOT_SUPPORTED) {
Toast.makeText(getApplicationContext(), "This language is not supported!",
Toast.LENGTH_SHORT);
} else {
btnSpeak.setEnabled(true);
textToSpeech.setPitch(0.6f);
textToSpeech.setSpeechRate(1.0f);
speak();
}
}
}
});
// Init View
btnSpeak = (Button)findViewById(R.id.btnSpeak);
editText = (EditText)findViewById(R.id.txtText);
btnSpeak.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
speak();
}
});
}
private void speak() {
String text = editText.getText().toString();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
textToSpeech.speak(text, TextToSpeech.QUEUE_FLUSH, null, null);
} else {
textToSpeech.speak(text, TextToSpeech.QUEUE_FLUSH, null);
}
}
@Override
protected void onDestroy() {
if (textToSpeech != null) {
textToSpeech.stop();
textToSpeech.shutdown();
}
super.onDestroy();
}
}
- 问题是当我点击按钮时没有语音反馈,控制台也没有报错或者logcat。
- 解决方案
- 添加了下面的代码,其中添加了一个
textview
和一个imageview
你可以使用按钮或任何你喜欢使用的东西,这给了我下面的输出。 - 然后在
CameraActivity.java
下定义ImageView
private speakImageView;
speakImageView = findViewById(R.id.speak1);
// set onClick listener
speakImageView.setOnClickListener(this);
- 然后在onClick方法下我定义了如果遇到特定的字母播放那个字母的声音。我使用了
mp3
声音文件,因为我无法实现TTS
,所以我选择使用mp3
。
@Override
public void onClick(View v) {
// some code
...
// voice for the detected alphabet
else if (v.getId() == R.id.speak1) {
// this is the value we are showing
EditText mEdit = findViewById(R.id.editText);
String letter = mEdit.getText().toString();
if (letter.equalsIgnoreCase("A")) {
final MediaPlayer mp100 = MediaPlayer.create(this, R.raw.letter_a);
mp100.start();
}
else if (letter.equalsIgnoreCase("B")) {
final MediaPlayer mp100 = MediaPlayer.create(this, R.raw.letter_b);
mp100.start();
}
// similarly you can do the same for other alphabets also
}
}
- 这不是理想的方法,但由于 ```TTS`` 对我不起作用,因为我是 android.[=30 的新手,几乎搜索了一周或两周后使用了此方法=]