Giter VIP home page Giter VIP logo

greyovo / picquery Goto Github PK

View Code? Open in Web Editor NEW
184.0 2.0 18.0 50.17 MB

🔍 Search local images with natural language on Android, powered by OpenAI's CLIP model. / 在 Android 上用自然语言搜索本地图片 (基于 OpenAI 的 CLIP 模型)

Home Page: https://greyovo.github.io/PicQuery/

License: MIT License

Kotlin 89.50% Python 9.65% PureBasic 0.10% TypeScript 0.68% CSS 0.06%
android clip image-text-retrieval material-design-3 openai image-text-search jetpack-compose

picquery's Introduction

PicQuery

中文| English

cover_en

🔍 Search for your local images with natural language, running completely offline. For example, "a laptop on the desk", "sunset by the sea", "kitty in the grass", and so on.

  • Totally free, NO in-app purchases
  • Support both English and Chinese
  • Indexing and searching of images works completely offline without worrying about privacy
  • Show results in less than 1 second when searching for 8,000+ photos
  • Wait for indexing on the first time you launch, and search immediately afterward

Installation

  • Google Play - Search for “PicQuery”
  • Download APK from Release
  • If you have trouble accessing the above resources, please see here

🍎 For iOS users, please refer to Queryable (Code), the inspiration behind this application, developed by @mazzzystar.

Implementation

Thanks to @mazzzystar and @Young-Flash for their assistance during the development. The discussion can be viewed here.

PicQuery is powered by OpenAI's CLIP model.

First, the images to be searched are encoded into vectors using an image encoder and stored in a database. The text provided by the user during the search is also encoded into a vector. The encoded text vector is then compared with the indexed image vectors to calculate the similarity. The top K images with the highest similarity scores are selected as the query results.

Build & Run

To build this project, you need to obtain a quantized CLIP model.

Run the scripts in this jupyter notebook step by step. When you run into the "You are done" section, you should get the following model files in ./result directory:

  • clip-image-int8.ort
  • clip-text-int8.ort

If you don't want to run the scripts, you may directly download them from Google Drive.

Put them into app\src\main\assets and you're ready to go.

Acknowledgment

License

This project is open-source under an MIT license. All rights reserved.

picquery's People

Contributors

greyovo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

picquery's Issues

表情或图标

请问能否在用表情或者图标进行搜索的时候,也能得到相应的图片

Crashed while showing albums for indexing selection

来自 @huangysh55 的反馈:

首次启动在选择相册环节闪退,无法继续。
手机型号是红米note11pro,操作系统版本为MIUI14.0.6,为安卓13;是到达索引相册的环节就自动闪退,无法做任何选择。

以下为log:

java.lang.NullPointerException: albumLabel must not be null
     at me.grey.picquery.data.CursorUtil$Companion.getPhoto(CursorUtil.kt:31)
     at me.grey.picquery.data.data_source.AlbumRepository.getAllAlbums(AlbumRepository.kt:58)
     at me.grey.picquery.domain.AlbumManager$initAllAlbumList$2.invokeSuspend(AlbumManager.kt:48)
     at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
     at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
     at kotlinx.coroutines.internal.LimitedDispatcher$Worker.run(LimitedDispatcher.kt:115)
     at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:100)
     at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:584)
     at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:793)
     at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:697)
     at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:684)
     Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [androidx.compose.ui.platform.MotionDurationScaleImpl@b79a7c6, androidx.compose.runtime.BroadcastFrameClock@d0ef387, StandaloneCoroutine{Cancelling}@efb02b4, AndroidUiDispatcher@6eb2edd]

增加smb文件夹

大佬能否支持局域网smb文件夹或者webdav啥的,因为图片都是放到群晖里面的

您好,图片识别不准,能手动纠正吗?

您好:
我的图搜APP存在以下几个问题:
1、搜出来的图片不全(我已经完整扫描了);
2、搜索精度有待提升,如下图,我搜索猫头鹰,出现的图片各种各样都有

⚠️ 含有不适宜工作时浏览的内容

Improve photo view screen functionality

Currently, users can only simply view the photo without other features.

It's expected to add some practical features, like:

  • Sharing images to other app
  • Opening with system gallery
  • Adding images to favourite collection in the app

Crashed while indexing albums

Exception java.io.FileNotFoundException:
  at android.database.DatabaseUtils.readExceptionWithFileNotFoundExceptionFromParcel (DatabaseUtils.java:149)
  at android.content.ContentProviderProxy.openTypedAssetFile (ContentProviderNative.java:705)
  at android.content.ContentResolver.openTypedAssetFileDescriptor (ContentResolver.java:1689)
  at android.content.ContentResolver.openTypedAssetFile (ContentResolver.java:1594)
  at android.content.ContentResolver.lambda$loadThumbnail$0 (ContentResolver.java:3593)
  at android.content.-$$Lambda$ContentResolver$7ILY1SWNxC2xhk-fQUG6tAXW9Ik.call
  at android.graphics.ImageDecoder$CallableSource.createImageDecoder (ImageDecoder.java:550)
  at android.graphics.ImageDecoder.decodeBitmapImpl (ImageDecoder.java:1847)
  at android.graphics.ImageDecoder.decodeBitmap (ImageDecoder.java:1840)
  at android.content.ContentResolver.loadThumbnail (ContentResolver.java:3592)
  at android.content.ContentResolver.loadThumbnail (ContentResolver.java:3576)
  at me.grey.picquery.domain.ImageSearcher.encodePhotoList (ImageSearcher.kt:116)
  at me.grey.picquery.domain.ImageSearcher$encodePhotoList$1.invokeSuspend
  at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith (ContinuationImpl.kt:33)
  at kotlinx.coroutines.DispatchedTask.run (DispatchedTask.kt:106)
  at kotlinx.coroutines.EventLoopImplBase.processNextEvent (EventLoop.common.kt:280)
  at kotlinx.coroutines.BlockingCoroutine.joinBlocking (Builders.kt:85)
  at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking (Builders.kt:59)
  at kotlinx.coroutines.BuildersKt.runBlocking
  at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking$default (Builders.kt:38)
  at kotlinx.coroutines.BuildersKt.runBlocking$default
  at me.grey.picquery.domain.AlbumManager$encodeAlbums$2.invokeSuspend (AlbumManager.kt:103)
  at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith (ContinuationImpl.kt:33)
  at kotlinx.coroutines.DispatchedTask.run (DispatchedTask.kt:106)
  at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely (CoroutineScheduler.kt:584)
  at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask (CoroutineScheduler.kt:793)
  at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker (CoroutineScheduler.kt:697)
  at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run (CoroutineScheduler.kt:684)

Instance creation error : could not create instance for '[Singleton:'me.grey.picquery.domain.encoder.ImageEncoder']': ai.onnxruntime.OrtException: Error code - ORT_INVALID_ARGUMENT - message: Invalid fd was supplied: -1

first build source code ,crash。

[Koin] me.grey.picquery E * Instance creation error : could not create instance for '[Singleton:'me.grey.picquery.domain.encoder.ImageEncoder']': ai.onnxruntime.OrtException: Error code - ORT_INVALID_ARGUMENT - message: Invalid fd was supplied: -1 ai.onnxruntime.OrtSession.createSession(Native Method) ai.onnxruntime.OrtSession.<init>(OrtSession.java:74) ai.onnxruntime.OrtEnvironment.createSession(OrtEnvironment.java:234) ai.onnxruntime.OrtEnvironment.createSession(OrtEnvironment.java:219) me.grey.picquery.domain.encoder.ImageEncoder.<init>(ImageEncoder.kt:36) me.grey.picquery.common.AppModulesKt$domainModules$1$3.invoke(AppModules.kt:68) me.grey.picquery.common.AppModulesKt$domainModules$1$3.invoke(AppModules.kt:68) org.koin.core.instance.InstanceFactory.create(InstanceFactory.kt:50) org.koin.core.instance.SingleInstanceFactory.create(SingleInstanceFactory.kt:46) org.koin.core.instance.SingleInstanceFactory$get$1.invoke(SingleInstanceFactory.kt:55) org.koin.core.instance.SingleInstanceFactory$get$1.invoke(SingleInstanceFactory.kt:53) org.koin.mp.KoinPlatformTools.synchronized(KoinPlatformTools.kt:36) org.koin.core.instance.SingleInstanceFactory.get(SingleInstanceFactory.kt:53) org.koin.core.registry.InstanceRegistry.resolveInstance$koin_core(InstanceRegistry.kt:116) org.koin.core.scope.Scope.resolveValue(Scope.kt:247) org.koin.core.scope.Scope.resolveInstance(Scope.kt:233) org.koin.core.scope.Scope.get(Scope.kt:212) me.grey.picquery.common.AppModulesKt$domainModules$1$1.invoke(AppModules.kt:81) me.grey.picquery.common.AppModulesKt$domainModules$1$1.invoke(AppModules.kt:51) org.koin.core.instance.InstanceFactory.create(InstanceFactory.kt:50) org.koin.core.instance.SingleInstanceFactory.create(SingleInstanceFactory.kt:46) org.koin.core.instance.SingleInstanceFactory$get$1.invoke(SingleInstanceFactory.kt:55) org.koin.core.instance.SingleInstanceFactory$get$1.invoke(SingleInstanceFactory.kt:53) org.koin.mp.KoinPlatformTools.synchronized(KoinPlatformTools.kt:36) org.koin.core.instance.SingleInstanceFactory.get(SingleInstanceFactory.kt:53) org.koin.core.registry.InstanceRegistry.resolveInstance$koin_core(InstanceRegistry.kt:116) org.koin.core.scope.Scope.resolveValue(Scope.kt:247) org.koin.core.scope.Scope.resolveInstance(Scope.kt:233) org.koin.core.scope.Scope.get(Scope.kt:212) me.grey.picquery.common.AppModulesKt$domainModules$1$2.invoke(AppModules.kt:91) me.grey.picquery.common.AppModulesKt$domainModules$1$2.invoke(AppModules.kt:60) org.koin.core.instance.InstanceFactory.create(InstanceFactory.kt:50) org.koin.core.instance.SingleInstanceFactory.create(SingleInstanceFactory.kt:46) org.koin.core.instance.SingleInstanceFactory$get$1.invoke(SingleInstanceFactory.kt:55) org.koin.core.instance.SingleInstanceFactory$get$1.invoke(SingleInstanceFactory.kt:53) org.koin.mp.KoinPlatformTools.synchronized(KoinPlatformTools.kt:36) org.koin.core.instance.SingleInstanceFactory.get(SingleInstanceFactory.kt:53) org.koin.core.registry.InstanceRegistry.resolveInstance$koin_core(InstanceRegistry.kt:116) org.koin.core.scope.Scope.resolveValue(Scope.kt:247) org.koin.core.scope.Scope.resolveInstance(Scope.kt:233) org.koin.core.scope.Scope.get(Scope.kt:212) me.grey.picquery.common.AppModulesKt$viewModelModules$1$1.invoke(AppModules.kt:81) me.grey.picquery.common.AppModulesKt$viewModelModules$1$1.invoke(AppModules.kt:22) org.koin.core.instance.InstanceFactory.create(InstanceFactory.kt:50) org.koin.core.instance.FactoryInstanceFactory.get(FactoryInstanceFactory.kt:38) org.koin.core.registry.InstanceRegistry.resolveInstance$koin_core(InstanceRegistry.kt:116) org.koin.core.scope.Scope.resolveValue(Scope.kt:247) org.koin.core.scope.Scope.resolveInstance(Scope.kt:233) org.koin.core.scope.Scope.get(Scope.kt:212) org.koin.androidx.viewmodel.factory.KoinViewModelFactory.create(KoinViewModelFactory.kt:25) androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.kt:187) androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.kt:153) org.koin.androidx.viewmodel.GetViewModelKt.resolveViewModel 2023-10-13 20:29:18.983 30179-30179 [Koin] me.grey.picquery E * Instance creation error : could not create instance for '[Singleton:'me.grey.picquery.domain.ImageSearcher']': org.koin.core.error.InstanceCreationException: Could not create instance for '[Singleton:'me.grey.picquery.domain.encoder.ImageEncoder']' org.koin.core.instance.InstanceFactory.create(InstanceFactory.kt:57) org.koin.core.instance.SingleInstanceFactory.create(SingleInstanceFactory.kt:46) org.koin.core.instance.SingleInstanceFactory$get$1.invoke(SingleInstanceFactory.kt:55) org.koin.core.instance.SingleInstanceFactory$get$1.invoke(SingleInstanceFactory.kt:53) org.koin.mp.KoinPlatformTools.synchronized(KoinPlatformTools.kt:36) org.koin.core.instance.SingleInstanceFactory.get(SingleInstanceFactory.kt:53) org.koin.core.registry.InstanceRegistry.resolveInstance$koin_core(InstanceRegistry.kt:116) org.koin.core.scope.Scope.resolveValue(Scope.kt:247) org.koin.core.scope.Scope.resolveInstance(Scope.kt:233) org.koin.core.scope.Scope.get(Scope.kt:212) me.grey.picquery.common.AppModulesKt$domainModules$1$1.invoke(AppModules.kt:81) me.grey.picquery.common.AppModulesKt$domainModules$1$1.invoke(AppModules.kt:51) org.koin.core.instance.InstanceFactory.create(InstanceFactory.kt:50) org.koin.core.instance.SingleInstanceFactory.create(SingleInstanceFactory.kt:46) org.koin.core.instance.SingleInstanceFactory$get$1.invoke(SingleInstanceFactory.kt:55) org.koin.core.instance.SingleInstanceFactory$get$1.invoke(SingleInstanceFactory.kt:53) org.koin.mp.KoinPlatformTools.synchronized(KoinPlatformTools.kt:36) org.koin.core.instance.SingleInstanceFactory.get(SingleInstanceFactory.kt:53) org.koin.core.registry.InstanceRegistry.resolveInstance$koin_core(InstanceRegistry.kt:116) org.koin.core.scope.Scope.resolveValue(Scope.kt:247) org.koin.core.scope.Scope.resolveInstance(Scope.kt:233) org.koin.core.scope.Scope.get(Scope.kt:212) me.grey.picquery.common.AppModulesKt$domainModules$1$2.invoke(AppModules.kt:91) me.grey.picquery.common.AppModulesKt$domainModules$1$2.invoke(AppModules.kt:60) org.koin.core.instance.InstanceFactory.create(InstanceFactory.kt:50) org.koin.core.instance.SingleInstanceFactory.create(SingleInstanceFactory.kt:46) org.koin.core.instance.SingleInstanceFactory$get$1.invoke(SingleInstanceFactory.kt:55) org.koin.core.instance.SingleInstanceFactory$get$1.invoke(SingleInstanceFactory.kt:53) org.koin.mp.KoinPlatformTools.synchronized(KoinPlatformTools.kt:36) org.koin.core.instance.SingleInstanceFactory.get(SingleInstanceFactory.kt:53) org.koin.core.registry.InstanceRegistry.resolveInstance$koin_core(InstanceRegistry.kt:116) org.koin.core.scope.Scope.resolveValue(Scope.kt:247) org.koin.core.scope.Scope.resolveInstance(Scope.kt:233) org.koin.core.scope.Scope.get(Scope.kt:212) me.grey.picquery.common.AppModulesKt$viewModelModules$1$1.invoke(AppModules.kt:81) me.grey.picquery.common.AppModulesKt$viewModelModules$1$1.invoke(AppModules.kt:22) org.koin.core.instance.InstanceFactory.create(InstanceFactory.kt:50) org.koin.core.instance.FactoryInstanceFactory.get(FactoryInstanceFactory.kt:38) org.koin.core.registry.InstanceRegistry.resolveInstance$koin_core(InstanceRegistry.kt:116) org.koin.core.scope.Scope.resolveValue(Scope.kt:247) org.koin.core.scope.Scope.resolveInstance(Scope.kt:233) org.koin.core.scope.Scope.get(Scope.kt:212) org.koin.androidx.viewmodel.factory.KoinViewModelFactory.create(KoinViewModelFactory.kt:25) androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.kt:187) androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.kt:153) org.koin.androidx.viewmodel.GetViewModelKt.resolveViewModel(GetViewModel.kt:44) me.grey.picquery.ui.home.HomeScreenKt.HomeScreen(HomeScreen.kt:264) me.grey.picquery.ui.AppNavHostKt$AppNavHost$3$1.invoke(AppNavHost.kt:34) me.grey.picquery.ui.AppNavHostKt$AppNavHost$3$1.invoke(AppNavHost.kt:33) androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:138) androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:35) androidx.navigation.compose.NavHos 2023-10-13 20:29:18.985 30179-30179 [Koin] me.grey.picquery E * Instance creation error : could not create instance for '[Singleton:'me.grey.picquery.domain.AlbumManager']': org.koin.core.error.InstanceCreationException: Could not create instance for '[Singleton:'me.grey.picquery.domain.ImageSearcher']' org.koin.core.instance.InstanceFactory.create(InstanceFactory.kt:57) org.koin.core.instance.SingleInstanceFactory.create(SingleInstanceFactory.kt:46) org.koin.core.instance.SingleInstanceFactory$get$1.invoke(SingleInstanceFactory.kt:55) org.koin.core.instance.SingleInstanceFactory$get$1.invoke(SingleInstanceFactory.kt:53) org.koin.mp.KoinPlatformTools.synchronized(KoinPlatformTools.kt:36) org.koin.core.instance.SingleInstanceFactory.get(SingleInstanceFactory.kt:53) org.koin.core.registry.InstanceRegistry.resolveInstance$koin_core(InstanceRegistry.kt:116) org.koin.core.scope.Scope.resolveValue(Scope.kt:247) org.koin.core.scope.Scope.resolveInstance(Scope.kt:233) org.koin.core.scope.Scope.get(Scope.kt:212) me.grey.picquery.common.AppModulesKt$domainModules$1$2.invoke(AppModules.kt:91) me.grey.picquery.common.AppModulesKt$domainModules$1$2.invoke(AppModules.kt:60) org.koin.core.instance.InstanceFactory.create(InstanceFactory.kt:50) org.koin.core.instance.SingleInstanceFactory.create(SingleInstanceFactory.kt:46) org.koin.core.instance.SingleInstanceFactory$get$1.invoke(SingleInstanceFactory.kt:55) org.koin.core.instance.SingleInstanceFactory$get$1.invoke(SingleInstanceFactory.kt:53) org.koin.mp.KoinPlatformTools.synchronized(KoinPlatformTools.kt:36) org.koin.core.instance.SingleInstanceFactory.get(SingleInstanceFactory.kt:53) org.koin.core.registry.InstanceRegistry.resolveInstance$koin_core(InstanceRegistry.kt:116) org.koin.core.scope.Scope.resolveValue(Scope.kt:247) org.koin.core.scope.Scope.resolveInstance(Scope.kt:233) org.koin.core.scope.Scope.get(Scope.kt:212) me.grey.picquery.common.AppModulesKt$viewModelModules$1$1.invoke(AppModules.kt:81) me.grey.picquery.common.AppModulesKt$viewModelModules$1$1.invoke(AppModules.kt:22) org.koin.core.instance.InstanceFactory.create(InstanceFactory.kt:50) org.koin.core.instance.FactoryInstanceFactory.get(FactoryInstanceFactory.kt:38) org.koin.core.registry.InstanceRegistry.resolveInstance$koin_core(InstanceRegistry.kt:116) org.koin.core.scope.Scope.resolveValue(Scope.kt:247) org.koin.core.scope.Scope.resolveInstance(Scope.kt:233) org.koin.core.scope.Scope.get(Scope.kt:212) org.koin.androidx.viewmodel.factory.KoinViewModelFactory.create(KoinViewModelFactory.kt:25) androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.kt:187) androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.kt:153) org.koin.androidx.viewmodel.GetViewModelKt.resolveViewModel(GetViewModel.kt:44) me.grey.picquery.ui.home.HomeScreenKt.HomeScreen(HomeScreen.kt:264) me.grey.picquery.ui.AppNavHostKt$AppNavHost$3$1.invoke(AppNavHost.kt:34) me.grey.picquery.ui.AppNavHostKt$AppNavHost$3$1.invoke(AppNavHost.kt:33) androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:138) androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:35) androidx.navigation.compose.NavHostKt$NavHost$14$1.invoke(NavHost.kt:320) androidx.navigation.compose.NavHostKt$NavHost$14$1.invoke(NavHost.kt:318) androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:108) androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:35) androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:248) androidx.compose.runtime.saveable.SaveableStateHolderImpl.SaveableStateProvider(SaveableStateHolder.kt:84) androidx.navigation.compose.NavBackStackEntryProviderKt.SaveableStateProvider(NavBackStackEntryProvider.kt:65) androidx.navigation.compose.NavBackStackEntryProviderKt.access$SaveableStateProvider(NavBackStackEntryProvider.kt:1) androidx.navigation.compose.NavBackStackEntryProviderKt$LocalOwnersProvider$1.invoke(NavBackStackEntryProvider.kt:52) androidx.navigation.compose.NavBackStackEnt 2023-10-13 20:29:18.987 30179-30179 [Koin] me.grey.picquery E * Instance creation error : could not create instance for '[Factory:'me.grey.picquery.ui.home.HomeViewModel']': org.koin.core.error.InstanceCreationException: Could not create instance for '[Singleton:'me.grey.picquery.domain.AlbumManager']' org.koin.core.instance.InstanceFactory.create(InstanceFactory.kt:57) org.koin.core.instance.SingleInstanceFactory.create(SingleInstanceFactory.kt:46) org.koin.core.instance.SingleInstanceFactory$get$1.invoke(SingleInstanceFactory.kt:55) org.koin.core.instance.SingleInstanceFactory$get$1.invoke(SingleInstanceFactory.kt:53) org.koin.mp.KoinPlatformTools.synchronized(KoinPlatformTools.kt:36) org.koin.core.instance.SingleInstanceFactory.get(SingleInstanceFactory.kt:53) org.koin.core.registry.InstanceRegistry.resolveInstance$koin_core(InstanceRegistry.kt:116) org.koin.core.scope.Scope.resolveValue(Scope.kt:247) org.koin.core.scope.Scope.resolveInstance(Scope.kt:233) org.koin.core.scope.Scope.get(Scope.kt:212) me.grey.picquery.common.AppModulesKt$viewModelModules$1$1.invoke(AppModules.kt:81) me.grey.picquery.common.AppModulesKt$viewModelModules$1$1.invoke(AppModules.kt:22) org.koin.core.instance.InstanceFactory.create(InstanceFactory.kt:50) org.koin.core.instance.FactoryInstanceFactory.get(FactoryInstanceFactory.kt:38) org.koin.core.registry.InstanceRegistry.resolveInstance$koin_core(InstanceRegistry.kt:116) org.koin.core.scope.Scope.resolveValue(Scope.kt:247) org.koin.core.scope.Scope.resolveInstance(Scope.kt:233) org.koin.core.scope.Scope.get(Scope.kt:212) org.koin.androidx.viewmodel.factory.KoinViewModelFactory.create(KoinViewModelFactory.kt:25) androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.kt:187) androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.kt:153) org.koin.androidx.viewmodel.GetViewModelKt.resolveViewModel(GetViewModel.kt:44) me.grey.picquery.ui.home.HomeScreenKt.HomeScreen(HomeScreen.kt:264) me.grey.picquery.ui.AppNavHostKt$AppNavHost$3$1.invoke(AppNavHost.kt:34) me.grey.picquery.ui.AppNavHostKt$AppNavHost$3$1.invoke(AppNavHost.kt:33) androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:138) androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:35) androidx.navigation.compose.NavHostKt$NavHost$14$1.invoke(NavHost.kt:320) androidx.navigation.compose.NavHostKt$NavHost$14$1.invoke(NavHost.kt:318) androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:108) androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:35) androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:248) androidx.compose.runtime.saveable.SaveableStateHolderImpl.SaveableStateProvider(SaveableStateHolder.kt:84) androidx.navigation.compose.NavBackStackEntryProviderKt.SaveableStateProvider(NavBackStackEntryProvider.kt:65) androidx.navigation.compose.NavBackStackEntryProviderKt.access$SaveableStateProvider(NavBackStackEntryProvider.kt:1) androidx.navigation.compose.NavBackStackEntryProviderKt$LocalOwnersProvider$1.invoke(NavBackStackEntryProvider.kt:52) androidx.navigation.compose.NavBackStackEntryProviderKt$LocalOwnersProvider$1.invoke(NavBackStackEntryProvider.kt:51) androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:108) androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:35) androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:228) androidx.navigation.compose.NavBackStackEntryProviderKt.LocalOwnersProvider(NavBackStackEntryProvider.kt:47) androidx.navigation.compose.NavHostKt$NavHost$14.invoke(NavHost.kt:318) androidx.navigation.compose.NavHostKt$NavHost$14.invoke(NavHost.kt:302) androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:138) androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:35) androidx.compose.animation.AnimatedContentKt$PopulateContentFor$5.invoke(AnimatedContent.kt:94

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.