├── .gitignore ├── README.md ├── app ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── ttv │ │ └── fingerdemo │ │ └── ExampleInstrumentedTest.kt │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── ttv │ │ │ └── fingerdemo │ │ │ ├── FingerCaptureActivity.java │ │ │ ├── MainActivity.kt │ │ │ └── PermissionsDelegate.java │ └── res │ │ ├── drawable │ │ ├── ic_launcher.png │ │ └── ic_overlay.PNG │ │ ├── layout │ │ ├── activity_camera.xml │ │ └── activity_main.xml │ │ ├── mipmap-hdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-mdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxxhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── values-night │ │ └── themes.xml │ │ └── values │ │ ├── colors.xml │ │ ├── strings.xml │ │ └── themes.xml │ └── test │ └── java │ └── com │ └── ttv │ └── fingerdemo │ └── ExampleUnitTest.kt ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── openCVLibrary3414 ├── .gitignore ├── .idea │ ├── gradle.xml │ ├── misc.xml │ ├── modules.xml │ └── workspace.xml ├── build.gradle ├── lint.xml └── src │ └── main │ ├── AndroidManifest.xml │ ├── aidl │ └── org │ │ └── opencv │ │ └── engine │ │ └── OpenCVEngineInterface.aidl │ ├── java │ └── org │ │ └── opencv │ │ ├── android │ │ ├── AsyncServiceHelper.java │ │ ├── BaseLoaderCallback.java │ │ ├── Camera2Renderer.java │ │ ├── CameraBridgeViewBase.java │ │ ├── CameraGLRendererBase.java │ │ ├── CameraGLSurfaceView.java │ │ ├── CameraRenderer.java │ │ ├── FpsMeter.java │ │ ├── InstallCallbackInterface.java │ │ ├── JavaCamera2View.java │ │ ├── JavaCameraView.java │ │ ├── LoaderCallbackInterface.java │ │ ├── OpenCVLoader.java │ │ ├── StaticHelper.java │ │ └── Utils.java │ │ ├── calib3d │ │ ├── Calib3d.java │ │ ├── StereoBM.java │ │ ├── StereoMatcher.java │ │ └── StereoSGBM.java │ │ ├── core │ │ ├── Algorithm.java │ │ ├── Core.java │ │ ├── CvException.java │ │ ├── CvType.java │ │ ├── DMatch.java │ │ ├── KeyPoint.java │ │ ├── Mat.java │ │ ├── MatOfByte.java │ │ ├── MatOfDMatch.java │ │ ├── MatOfDouble.java │ │ ├── MatOfFloat.java │ │ ├── MatOfFloat4.java │ │ ├── MatOfFloat6.java │ │ ├── MatOfInt.java │ │ ├── MatOfInt4.java │ │ ├── MatOfKeyPoint.java │ │ ├── MatOfPoint.java │ │ ├── MatOfPoint2f.java │ │ ├── MatOfPoint3.java │ │ ├── MatOfPoint3f.java │ │ ├── MatOfRect.java │ │ ├── MatOfRect2d.java │ │ ├── MatOfRotatedRect.java │ │ ├── Point.java │ │ ├── Point3.java │ │ ├── Range.java │ │ ├── Rect.java │ │ ├── Rect2d.java │ │ ├── RotatedRect.java │ │ ├── Scalar.java │ │ ├── Size.java │ │ ├── TermCriteria.java │ │ └── TickMeter.java │ │ ├── dnn │ │ ├── DictValue.java │ │ ├── Dnn.java │ │ ├── Layer.java │ │ └── Net.java │ │ ├── features2d │ │ ├── AKAZE.java │ │ ├── AffineFeature.java │ │ ├── AgastFeatureDetector.java │ │ ├── BFMatcher.java │ │ ├── BOWImgDescriptorExtractor.java │ │ ├── BOWKMeansTrainer.java │ │ ├── BOWTrainer.java │ │ ├── BRISK.java │ │ ├── DescriptorExtractor.java │ │ ├── DescriptorMatcher.java │ │ ├── FastFeatureDetector.java │ │ ├── Feature2D.java │ │ ├── FeatureDetector.java │ │ ├── Features2d.java │ │ ├── FlannBasedMatcher.java │ │ ├── GFTTDetector.java │ │ ├── KAZE.java │ │ ├── MSER.java │ │ ├── ORB.java │ │ ├── Params.java │ │ ├── SIFT.java │ │ └── SimpleBlobDetector.java │ │ ├── imgcodecs │ │ └── Imgcodecs.java │ │ ├── imgproc │ │ ├── CLAHE.java │ │ ├── GeneralizedHough.java │ │ ├── GeneralizedHoughBallard.java │ │ ├── GeneralizedHoughGuil.java │ │ ├── Imgproc.java │ │ ├── LineSegmentDetector.java │ │ ├── Moments.java │ │ └── Subdiv2D.java │ │ ├── ml │ │ ├── ANN_MLP.java │ │ ├── ANN_MLP_ANNEAL.java │ │ ├── Boost.java │ │ ├── DTrees.java │ │ ├── EM.java │ │ ├── KNearest.java │ │ ├── LogisticRegression.java │ │ ├── Ml.java │ │ ├── NormalBayesClassifier.java │ │ ├── ParamGrid.java │ │ ├── RTrees.java │ │ ├── SVM.java │ │ ├── SVMSGD.java │ │ ├── StatModel.java │ │ └── TrainData.java │ │ ├── objdetect │ │ ├── BaseCascadeClassifier.java │ │ ├── CascadeClassifier.java │ │ ├── HOGDescriptor.java │ │ ├── Objdetect.java │ │ └── QRCodeDetector.java │ │ ├── osgi │ │ ├── OpenCVInterface.java │ │ └── OpenCVNativeLoader.java │ │ ├── photo │ │ ├── AlignExposures.java │ │ ├── AlignMTB.java │ │ ├── CalibrateCRF.java │ │ ├── CalibrateDebevec.java │ │ ├── CalibrateRobertson.java │ │ ├── MergeDebevec.java │ │ ├── MergeExposures.java │ │ ├── MergeMertens.java │ │ ├── MergeRobertson.java │ │ ├── Photo.java │ │ ├── Tonemap.java │ │ ├── TonemapDrago.java │ │ ├── TonemapMantiuk.java │ │ └── TonemapReinhard.java │ │ ├── utils │ │ └── Converters.java │ │ ├── video │ │ ├── BackgroundSubtractor.java │ │ ├── BackgroundSubtractorKNN.java │ │ ├── BackgroundSubtractorMOG2.java │ │ ├── DenseOpticalFlow.java │ │ ├── DualTVL1OpticalFlow.java │ │ ├── FarnebackOpticalFlow.java │ │ ├── KalmanFilter.java │ │ ├── SparseOpticalFlow.java │ │ ├── SparsePyrLKOpticalFlow.java │ │ └── Video.java │ │ └── videoio │ │ ├── VideoCapture.java │ │ ├── VideoWriter.java │ │ └── Videoio.java │ └── res │ └── values │ └── attrs.xml ├── ringprogresslibrary ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── ldoublem │ │ └── ringPregressLibrary │ │ └── ExampleInstrumentedTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── ldoublem │ │ │ └── ringPregressLibrary │ │ │ ├── OnSelectRing.java │ │ │ ├── Ring.java │ │ │ └── RingProgress.java │ └── res │ │ └── values │ │ ├── ringprogress_style.xml │ │ └── strings.xml │ └── test │ └── java │ └── com │ └── ldoublem │ └── ringPregressLibrary │ └── ExampleUnitTest.java └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/caches 5 | /.idea/libraries 6 | /.idea/modules.xml 7 | /.idea/workspace.xml 8 | /.idea/navEditor.xml 9 | /.idea/assetWizardSettings.xml 10 | .DS_Store 11 | /build 12 | /captures 13 | .externalNativeBuild 14 | .cxx 15 | local.properties 16 | /.idea/ 17 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 | Slack 3 | · 4 | Website 5 | · 6 | Portfolio 7 | · 8 | Hugging Face 9 | · 10 | Free APIs 11 | · 12 | OpenKYC 13 | · 14 | Face Attendance 15 | · 16 | Contact 17 |
18 |

Touchless Fingerprint Recognition SDK For Android

19 |

Robust, Realtime, On-Device FingerID

20 | 21 | ## :tada: Try It Yourself 22 | 23 | Get it on Google Play 24 | 25 |
26 |
27 | 28 | 29 | https://user-images.githubusercontent.com/91896009/157453554-2aa2eb22-e92c-4f99-9600-1b317696ef5c.mp4 30 | 31 | 32 | ## :clap: Supporters 33 | [![Stargazers repo roster for @faceonlive/Face-Anti-Spoofing-SDK-Android](https://reporoster.com/stars/faceonlive/Touchless-Fingerprint-Recognition-SDK-Android)](https://github.com/faceonlive/Touchless-Fingerprint-Recognition-SDK-Android/stargazers) 34 | [![Forkers repo roster for @faceonlive/Touchless-Fingerprint-Recognition-SDK-Android](https://reporoster.com/forks/faceonlive/Touchless-Fingerprint-Recognition-SDK-Android)](https://github.com/faceonlive/Touchless-Fingerprint-Recognition-SDK-Android/network/members) 35 |

Animated footer bars

36 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'com.android.application' 3 | id 'kotlin-android' 4 | } 5 | 6 | android { 7 | compileSdk 31 8 | 9 | defaultConfig { 10 | applicationId "com.ttv.fingerdemo" 11 | minSdk 21 12 | targetSdk 31 13 | versionCode 1 14 | versionName "1.0" 15 | 16 | testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" 17 | 18 | ndk { 19 | abiFilters 'arm64-v8a' 20 | } 21 | } 22 | 23 | buildTypes { 24 | release { 25 | minifyEnabled false 26 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' 27 | } 28 | } 29 | compileOptions { 30 | sourceCompatibility JavaVersion.VERSION_1_8 31 | targetCompatibility JavaVersion.VERSION_1_8 32 | } 33 | kotlinOptions { 34 | jvmTarget = '1.8' 35 | } 36 | } 37 | 38 | dependencies { 39 | 40 | implementation 'androidx.core:core-ktx:1.7.0' 41 | implementation 'androidx.appcompat:appcompat:1.4.0' 42 | implementation 'com.google.android.material:material:1.4.0' 43 | implementation 'androidx.constraintlayout:constraintlayout:2.1.2' 44 | implementation project(path: ':ringprogresslibrary') 45 | testImplementation 'junit:junit:4.+' 46 | androidTestImplementation 'androidx.test.ext:junit:1.1.3' 47 | androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' 48 | 49 | implementation files('libs/ttvfinger.aar') 50 | implementation 'org.tensorflow:tensorflow-lite:2.4.0' 51 | implementation project(path: ':openCVLibrary3414') 52 | 53 | // CameraX core library 54 | def camerax_version = '1.0.0-beta12' 55 | implementation "androidx.camera:camera-core:$camerax_version" 56 | implementation "androidx.camera:camera-camera2:$camerax_version" 57 | implementation "androidx.camera:camera-lifecycle:$camerax_version" 58 | implementation 'androidx.camera:camera-view:1.0.0-alpha19' 59 | } -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /app/src/androidTest/java/com/ttv/fingerdemo/ExampleInstrumentedTest.kt: -------------------------------------------------------------------------------- 1 | package com.ttv.fingerdemo 2 | 3 | import androidx.test.platform.app.InstrumentationRegistry 4 | import androidx.test.ext.junit.runners.AndroidJUnit4 5 | 6 | import org.junit.Test 7 | import org.junit.runner.RunWith 8 | 9 | import org.junit.Assert.* 10 | 11 | /** 12 | * Instrumented test, which will execute on an Android device. 13 | * 14 | * See [testing documentation](http://d.android.com/tools/testing). 15 | */ 16 | @RunWith(AndroidJUnit4::class) 17 | class ExampleInstrumentedTest { 18 | @Test 19 | fun useAppContext() { 20 | // Context of the app under test. 21 | val appContext = InstrumentationRegistry.getInstrumentation().targetContext 22 | assertEquals("com.ttv.fingerdemo", appContext.packageName) 23 | } 24 | } -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 19 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /app/src/main/java/com/ttv/fingerdemo/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.ttv.fingerdemo 2 | 3 | import android.content.Intent 4 | import android.graphics.Bitmap 5 | import androidx.appcompat.app.AppCompatActivity 6 | import android.os.Bundle 7 | import android.util.Log 8 | import android.view.View 9 | import android.widget.Button 10 | import android.widget.Toast 11 | import com.ttv.finger.FingerSDK 12 | import android.widget.TextView 13 | 14 | class MainActivity : AppCompatActivity() { 15 | 16 | private val permissionsDelegate = PermissionsDelegate(this) 17 | private var hasPermission: Boolean = false; 18 | 19 | override fun onCreate(savedInstanceState: Bundle?) { 20 | super.onCreate(savedInstanceState) 21 | setContentView(R.layout.activity_main) 22 | 23 | val fingreSDK = FingerSDK.createInstance(this); 24 | Log.e("TestEngine", "hwid: " + fingreSDK.currentHWID); 25 | 26 | val ret = fingreSDK.setActivation("") 27 | Log.e("TestEngine", "activation: " + ret); 28 | if(ret != 0) { 29 | findViewById(R.id.txtState).text = "No Activated!" 30 | } 31 | 32 | fingreSDK.init() 33 | 34 | val btnRegister = findViewById