我遇到tts
variable的问题。即使“文字转语音”对象已初始化,它也为空。
在ShowLabel()
函数中,我想对tts
变量的文本使用firstObject
。 ShowLabel()
函数接收List<>
个对象中的FirebaseVisionImageLabel
个。我在说ShowLabel()
内的文字时遇到问题。尽管控制台将布尔值记录为true,但speak()
内部的OnInit()
仍然有效。
我已将检查器ttsIsInitialized
设置为布尔型,因此在speak()
上的showLabel()
运行之前,它必须为true。但这给了我空。任何帮助都会很棒。如果有最佳方法,请告诉我。
所以,现在我的问题是tts
中的Showlabel()
总是为空。有人可以指出我的错误在哪里吗?
这是FirebaseQuickStart上的项目
https://github.com/firebase/quickstart-android/tree/master/mlkit
LivePreviewActivity
class LivePreviewActivity : AppCompatActivity(), OnRequestPermissionsResultCallback, TextToSpeech.OnInitListener {
private var cameraSource: CameraSource? = null
private var tts: TextToSpeech? = null
var firstObject = ""
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_live_preview)
tts = TextToSpeech(this, this)
}
fun showLabel(labels: List<FirebaseVisionImageLabel>?) {
if (!ttsIsInitialized) {
Log.d(TAG, "TTS not Initialized")
Log.d("Boolean", ttsIsInitialized.toString())
} else {
firstObject = labels!!.first().text
tts!!.speak(firstObject, TextToSpeech.QUEUE_FLUSH, null, "")
Log.d("Boolean", ttsIsInitialized.toString())
}
}
override fun onInit(status: Int) {
if (status == TextToSpeech.SUCCESS) {
val result = tts!!.setLanguage(Locale.US)
if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) {
Log.e("TTS","The Language specified is not supported!")
} else {
Log.d("TTS", "Initilization Successful")
tts!!.speak("This is a test", TextToSpeech.QUEUE_FLUSH, null, "")
cameraSource?.setMachineLearningFrameProcessor(ImageLabelingProcessor())
ttsIsInitialized = true
}
} else {
Log.e("TTS", "Initilization Failed!")
}
}
ImageLabelingProcessor
class ImageLabelingProcessor : VisionProcessorBase<List<FirebaseVisionImageLabel>>() {
private val detector: FirebaseVisionImageLabeler = FirebaseVision.getInstance().onDeviceImageLabeler
override fun stop() {
try {
detector.close()
} catch (e: IOException) {
Log.e(TAG, "Exception thrown while trying to close Text Detector: $e")
}
}
override fun detectInImage(image: FirebaseVisionImage): Task<List<FirebaseVisionImageLabel>> {
return detector.processImage(image)
}
override fun onSuccess(
originalCameraImage: Bitmap?,
labels: List<FirebaseVisionImageLabel>,
frameMetadata: FrameMetadata,
graphicOverlay: GraphicOverlay
) {
graphicOverlay.clear()
originalCameraImage.let { image ->
val imageGraphic = CameraImageGraphic(graphicOverlay, image)
graphicOverlay.add(imageGraphic)
}
val labelGraphic = LabelGraphic(graphicOverlay, labels)
graphicOverlay.add(labelGraphic)
graphicOverlay.postInvalidate()
val livePreview = LivePreviewActivity()
livePreview.showLabel(labels)
livePreview.labels = labels
}
override fun onFailure(e: Exception) {
Log.w(TAG, "Label detection failed.$e")
}
companion object {
private const val TAG = "ImageLabelingProcessor"
}
}
Logcat
2019-03-09 14:54:50.979 9658-9658/com.google.firebase.samples.apps.mlkit E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.google.firebase.samples.apps.mlkit, PID: 9658
kotlin.KotlinNullPointerException
at com.google.firebase.samples.apps.mlkit.kotlin.LivePreviewActivity.showLabel(LivePreviewActivity.kt:76)
at com.google.firebase.samples.apps.mlkit.kotlin.imagelabeling.ImageLabelingProcessor.onSuccess(ImageLabelingProcessor.kt:51)
at com.google.firebase.samples.apps.mlkit.kotlin.imagelabeling.ImageLabelingProcessor.onSuccess(ImageLabelingProcessor.kt:19)
at com.google.firebase.samples.apps.mlkit.kotlin.VisionProcessorBase$detectInVisionImage$1.onSuccess(VisionProcessorBase.kt:98)
at com.google.android.gms.tasks.zzn.run(Unknown Source:4)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
2019-03-09 14:54:50.983 1881-1952/system_process W/ActivityManager: Force finishing activity com.google.firebase.samples.apps.mlkit/.kotlin.LivePreviewActivity
2019-03-09 14:54:50.997 9658-9658/com.google.firebase.samples.apps.mlkit I/Process: Sending signal. PID: 9658 SIG: 9
2019-03-09 14:54:51.004 1596-1596/? E/lowmemorykiller: Error writing /proc/9658/oom_score_adj; errno=22
2019-03-09 14:54:51.026 1712-9704/? E/Camera3-OutputStream: getBufferLockedCommon: Stream 0: Can't dequeue next output buffer: Broken pipe (-32)
2019-03-09 14:54:51.026 1712-9704/? E/Camera3-Device: RequestThread: Can't get output buffer, skipping request: Broken pipe (-32)