Skip to content

Commit fe11e07

Browse files
committed
upate: add wrapper functions to help get text embdder, image embedder and object detector
1 parent cf1bf6b commit fe11e07

1 file changed

Lines changed: 63 additions & 0 deletions

File tree

ml/src/main/java/com/fpf/smartscansdk/ml/models/ModelManager.kt

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,15 @@ import android.content.Intent
55
import android.net.Uri
66
import androidx.core.net.toUri
77
import com.fpf.smartscansdk.core.SmartScanException
8+
import com.fpf.smartscansdk.core.detector.DetectorProvider
9+
import com.fpf.smartscansdk.core.embeddings.ImageEmbeddingProvider
10+
import com.fpf.smartscansdk.core.embeddings.TextEmbeddingProvider
11+
import com.fpf.smartscansdk.ml.providers.detectors.FaceDetector
12+
import com.fpf.smartscansdk.ml.providers.embeddings.clip.ClipImageEmbedder
13+
import com.fpf.smartscansdk.ml.providers.embeddings.clip.ClipTextEmbedder
14+
import com.fpf.smartscansdk.ml.providers.embeddings.dino.DinoV2SmallImageEmbedder
15+
import com.fpf.smartscansdk.ml.providers.embeddings.inception.InceptionResnetFaceEmbedder
16+
import com.fpf.smartscansdk.ml.providers.embeddings.minilm.MiniLMTextEmbedder
817
import kotlinx.coroutines.Dispatchers
918
import kotlinx.coroutines.withContext
1019
import java.io.File
@@ -144,6 +153,60 @@ object ModelManager {
144153
return File(File(context.filesDir, ROOT_DIR), modelInfo.path)
145154
}
146155

156+
fun getTextEmbedder(context: Context, modelName: ModelName): TextEmbeddingProvider{
157+
val modelInfo = ModelRegistry[modelName]!!
158+
val modelDir = getModelFile(context, modelInfo)
159+
if(!modelExists(context, modelName)) throw SmartScanException.ModelNotDownloaded()
160+
161+
return when(modelName){
162+
ModelName.ALL_MINILM_L6_V2 -> {
163+
val modelFile = File(modelDir, modelInfo.resourceFiles!![0] )
164+
val vocabFile = File(modelDir, modelInfo.resourceFiles[1] )
165+
val configFile = File(modelDir, modelInfo.resourceFiles[2] )
166+
MiniLMTextEmbedder(context, modelSource = ModelAssetSource.LocalFile(modelFile), vocabSource = ModelAssetSource.LocalFile(vocabFile), configSource = ModelAssetSource.LocalFile(configFile))
167+
}
168+
ModelName.CLIP_VIT_B_32_TEXT -> {
169+
val modelFile = File(modelDir, modelInfo.resourceFiles!![0] )
170+
val vocabFile = File(modelDir, modelInfo.resourceFiles[1] )
171+
val mergesFile = File(modelDir, modelInfo.resourceFiles[2] )
172+
ClipTextEmbedder(context, modelSource = ModelAssetSource.LocalFile(modelFile), vocabSource = ModelAssetSource.LocalFile(vocabFile), mergesSource = ModelAssetSource.LocalFile(mergesFile))
173+
}
174+
else -> throw SmartScanException.InvalidModelType("Expected model type ${ModelType.TEXT_ENCODER}, but got $modelInfo.type")
175+
}
176+
}
177+
178+
fun getImageEmbedder(context: Context, modelName: ModelName): ImageEmbeddingProvider{
179+
val modelInfo = ModelRegistry[modelName]!!
180+
val modelFile = getModelFile(context, modelInfo)
181+
if(!modelExists(context, modelName)) throw SmartScanException.ModelNotDownloaded()
182+
183+
return when(modelName){
184+
ModelName.DINOV2_SMALL -> {
185+
DinoV2SmallImageEmbedder(context, modelSource = ModelAssetSource.LocalFile(modelFile))
186+
}
187+
ModelName.CLIP_VIT_B_32_IMAGE -> {
188+
ClipImageEmbedder(context, modelSource = ModelAssetSource.LocalFile(modelFile))
189+
}
190+
ModelName.INCEPTION_RESNET_V1 -> {
191+
InceptionResnetFaceEmbedder(context, modelSource = ModelAssetSource.LocalFile(modelFile))
192+
}
193+
else -> throw SmartScanException.InvalidModelType("Expected model type ${ModelType.IMAGE_ENCODER}, but got $modelInfo.type")
194+
}
195+
}
196+
197+
fun getObjectDetector(context: Context, modelName: ModelName): DetectorProvider{
198+
val modelInfo = ModelRegistry[modelName]!!
199+
val modelFile = getModelFile(context, modelInfo)
200+
if(!modelExists(context, modelName)) throw SmartScanException.ModelNotDownloaded()
201+
202+
return when(modelName){
203+
ModelName.ULTRA_LIGHT_FACE_DETECTOR -> {
204+
FaceDetector(context, modelSource = ModelAssetSource.LocalFile(modelFile))
205+
}
206+
else -> throw SmartScanException.InvalidModelType("Expected model type ${ModelType.OBJECT_DETECTOR}, but got $modelInfo.type")
207+
}
208+
}
209+
147210
private suspend fun unzipFiles(zipFile: File, targetDir: File): List<File> =
148211
withContext(Dispatchers.IO) {
149212
if (!targetDir.exists()) targetDir.mkdirs()

0 commit comments

Comments
 (0)