@@ -5,6 +5,15 @@ import android.content.Intent
55import android.net.Uri
66import androidx.core.net.toUri
77import 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
817import kotlinx.coroutines.Dispatchers
918import kotlinx.coroutines.withContext
1019import 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