Почему объект преобразования текста в речь (TTS) становится нулевым даже после инициализации? - PullRequest
0 голосов
/ 09 марта 2019

У меня проблемы с tts переменной.Он становится нулевым, даже если объект «Текст в речь» был инициализирован.

Внутри ShowLabel() функции, я хочу использовать tts для текстов переменной firstObject.ShowLabel() функция получает List<> из FirebaseVisionImageLabel объектов.У меня проблема с произнесением текста внутри ShowLabel().Хотя консоль регистрирует логическое значение true и speak() внутри OnInit() работает.

Я установил проверку ttsIsInitialized, которая имеет логический тип, поэтому она должна быть истинной, прежде чем speak() на showLabel() запустится.Но это дает мне ноль.Любая помощь будет отличной.Если есть лучший способ сделать это, пожалуйста, скажите мне.

Итак, сейчас моя проблема 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...