Kotlin की मदद से, Android पर LiteRT Next चलाना

LiteRT Next APIs, Kotlin में उपलब्ध हैं. इससे Android डेवलपर को बेहतर एपीआई का ऐक्सेस मिलता है और ऐप्लिकेशन डेवलप करने में आसानी होती है.

Kotlin में LiteRT Next ऐप्लिकेशन का उदाहरण देखने के लिए, Kotlin के साथ इमेज सेगमेंटेशन का डेमो देखें.

शुरू करें

अपने Android ऐप्लिकेशन में LiteRT Next जोड़ने के लिए, यह तरीका अपनाएं.

Maven पैकेज जोड़ना

अपने ऐप्लिकेशन में LiteRT Next डिपेंडेंसी जोड़ें:

dependencies {
  ...
  implementation `com.google.ai.edge.litert:litert:2.0.0-alpha`
}

कंपाइल किया गया मॉडल बनाना

CompiledModel एपीआई का इस्तेमाल करके, किसी मॉडल और अपनी पसंद के हार्डवेयर ऐक्सेलरेटर के साथ रनटाइम को शुरू करें:

val  model =
  CompiledModel.create(
    context.assets,
    "mymodel.tflite",
    CompiledModel.Options(Accelerator.CPU),
    env,
  )

इनपुट और आउटपुट बफ़र बनाना

अनुमान लगाने के लिए मॉडल में डाले जाने वाले इनपुट डेटा और अनुमान लगाने के बाद मॉडल से मिलने वाले आउटपुट डेटा को सेव करने के लिए, ज़रूरी डेटा स्ट्रक्चर (बफ़र) बनाएं.

val inputBuffers = model.createInputBuffers()
val outputBuffers = model.createOutputBuffers()

अगर सीपीयू मेमोरी का इस्तेमाल किया जा रहा है, तो सीधे पहले इनपुट बफ़र में डेटा लिखकर इनपुट भरें.

inputBuffers[0].writeFloat(FloatArray(data_size) { data_value /* your data */ })

मॉडल को ट्रिगर करना

इनपुट और आउटपुट बफ़र देकर, कंपाइल किया गया मॉडल चलाएं.

model.run(inputBuffers, outputBuffers)

आउटपुट वापस पाना

मेमोरी से मॉडल के आउटपुट को सीधे पढ़कर, आउटपुट पाएं.

val outputFloatArray = outputBuffers[0].readFloat()

मुख्य कॉन्सेप्ट और कॉम्पोनेंट

LiteRT Next Kotlin API के मुख्य कॉन्सेप्ट और कॉम्पोनेंट के बारे में जानने के लिए, यहां दिए गए सेक्शन देखें.

बुनियादी अनुमान (सीपीयू)

यहां LiteRT Next के साथ अनुमान लगाने की सुविधा को कम शब्दों में और आसान तरीके से लागू किया गया है.

// Load model and initialize runtime
val  model =
    CompiledModel.create(
        context.assets,
        "mymodel.tflite"
    )

// Preallocate input/output buffers
val inputBuffers = model.createInputBuffers()
val outputBuffers = model.createOutputBuffers()

// Fill the first input
inputBuffers[0].writeFloat(FloatArray(data_size) { data_value /* your data */ })

// Invoke
model.run(inputBuffers, outputBuffers)

// Read the output
val outputFloatArray = outputBuffers[0].readFloat()

// Clean up buffers and model
inputBuffers.forEach { it.close() }
outputBuffers.forEach { it.close() }
model.close()

कंपाइल किया गया मॉडल (CompiledModel)

Compiled Model API (CompiledModel), मॉडल को लोड करने, हार्डवेयर एक्सेलेरेशन लागू करने, रनटाइम को इंस्टैंशिएट करने, इनपुट और आउटपुट बफ़र बनाने, और अनुमान लगाने के लिए ज़िम्मेदार है.

यहां दिए गए आसान कोड स्निपेट में दिखाया गया है कि Compiled Model API, LiteRT मॉडल (.tflite) को कैसे लेता है और अनुमान लगाने के लिए तैयार एक कंपाइल किया गया मॉडल बनाता है.

val  model =
  CompiledModel.create(
    context.assets,
    "mymodel.tflite"
  )

यहां दिए गए आसान कोड स्निपेट में दिखाया गया है कि CompiledModel एपीआई, इनपुट और आउटपुट बफ़र को कैसे लेता है और कंपाइल किए गए मॉडल के साथ अनुमान कैसे लगाता है.

// Preallocate input/output buffers
val inputBuffers = model.createInputBuffers()
val outputBuffers = model.createOutputBuffers()

// Fill the first input
inputBuffers[0].writeFloat(FloatArray(data_size) { data_value /* your data */ })
// Invoke
model.run(inputBuffers, outputBuffers)
// Read the output
val outputFloatArray = outputBuffers[0].readFloat()

// Clean up buffers and model
inputBuffers.forEach { it.close() }
outputBuffers.forEach { it.close() }
model.close()

CompiledModel API को लागू करने के तरीके के बारे में ज़्यादा जानने के लिए, Model.kt में सोर्स कोड देखें.

टेंसर बफ़र (TensorBuffer)

LiteRT Next, I/O बफ़र के साथ काम करने की सुविधा पहले से उपलब्ध कराता है. इसके लिए, CompiledModel में डेटा के फ़्लो को मैनेज करने के लिए, टेन्सर बफ़र एपीआई (TensorBuffer) का इस्तेमाल किया जाता है. Tensor Buffer API, लिखने (Write<T>()), पढ़ने (Read<T>()), और बफ़र को लॉक करने की सुविधा देता है.

Tensor Buffer API को लागू करने के तरीके के बारे में ज़्यादा जानने के लिए, TensorBuffer.kt पर सोर्स कोड देखें.