├── .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 |
18 | Touchless Fingerprint Recognition SDK For Android
19 | Robust, Realtime, On-Device FingerID
20 |
21 | ## :tada: Try It Yourself
22 |
23 |
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 | [](https://github.com/faceonlive/Touchless-Fingerprint-Recognition-SDK-Android/stargazers)
34 | [](https://github.com/faceonlive/Touchless-Fingerprint-Recognition-SDK-Android/network/members)
35 | 
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