Skip to content

Instantly share code, notes, and snippets.

@siddhantkushwaha
Created November 17, 2020 15:45
Show Gist options
  • Save siddhantkushwaha/e99da1ac5174e49564aaedf9f9fbcb42 to your computer and use it in GitHub Desktop.
Save siddhantkushwaha/e99da1ac5174e49564aaedf9f9fbcb42 to your computer and use it in GitHub Desktop.
implementation 'com.google.mlkit:language-id:16.1.1'
implementation 'com.google.mlkit:translate:16.1.1'
package com.siddhantkushwaha.carolyn.ml
import com.google.android.gms.tasks.Tasks
import com.google.mlkit.nl.languageid.LanguageIdentification
import kotlin.Exception
class LanguageId {
companion object {
public fun getLanguage(body: String): String {
try {
val languageIdentifier = LanguageIdentification.getClient()
return Tasks.await(languageIdentifier.identifyLanguage(body))
} catch (exception: Exception) {
exception.printStackTrace()
}
return "und"
}
}
}
package com.siddhantkushwaha.carolyn.ml
import com.google.android.gms.tasks.Tasks
import com.google.mlkit.common.model.DownloadConditions
import com.google.mlkit.common.model.RemoteModelManager
import com.google.mlkit.nl.translate.*
import com.siddhantkushwaha.carolyn.ml.LanguageId.Companion.getLanguage
class LanguageTranslator {
companion object {
private fun downloadModel() {
val modelManager = RemoteModelManager.getInstance()
val hindiToEnglishModel = TranslateRemoteModel.Builder(TranslateLanguage.HINDI).build()
val conditions = DownloadConditions.Builder().build()
Tasks.await(modelManager.download(hindiToEnglishModel, conditions))
}
private fun getTranslator(): Translator {
val options = TranslatorOptions.Builder().setSourceLanguage(TranslateLanguage.HINDI)
.setTargetLanguage(TranslateLanguage.ENGLISH).build()
return Translation.getClient(options)
}
private fun loadModel(forceDownload: Boolean = false): Translator {
return if (isModelDownloaded() && !forceDownload) {
getTranslator()
} else {
downloadModel()
getTranslator()
}
}
public fun isModelDownloaded(): Boolean {
val modelManager = RemoteModelManager.getInstance()
val hindiToEnglishModel = TranslateRemoteModel.Builder(TranslateLanguage.HINDI).build()
return Tasks.await(modelManager.isModelDownloaded(hindiToEnglishModel))
}
public fun translate(body: String, skipIfNotDownloaded: Boolean = true): String? {
try {
if (skipIfNotDownloaded && !isModelDownloaded()) {
return null
}
val language = getLanguage(body)
if (language == "en" || language == "und")
return null
val translator = loadModel()
return Tasks.await(translator.translate(body))
} catch (exception: Exception) {
exception.printStackTrace()
}
return null
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment