├── .gitignore ├── .idea ├── codeStyles │ └── Project.xml ├── misc.xml ├── modules.xml ├── runConfigurations.xml └── vcs.xml ├── LICENSE ├── README.md ├── app ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── example │ │ └── root │ │ └── opencvobjecttracking │ │ └── ExampleInstrumentedTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── example │ │ │ └── root │ │ │ └── opencvobjecttracking │ │ │ ├── CameraRawData.java │ │ │ ├── Constant.java │ │ │ ├── MainActivity.java │ │ │ └── ResizeRectangleView.java │ ├── jniLibs │ │ ├── armeabi-v7a │ │ │ └── libopencv_java3.so │ │ └── armeabi │ │ │ └── libopencv_java3.so │ └── res │ │ ├── drawable-v24 │ │ └── ic_launcher_foreground.xml │ │ ├── drawable │ │ └── ic_launcher_background.xml │ │ ├── layout │ │ └── activity_main.xml │ │ ├── mipmap-anydpi-v26 │ │ ├── ic_launcher.xml │ │ └── ic_launcher_round.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 │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml │ └── test │ └── java │ └── com │ └── example │ └── root │ └── opencvobjecttracking │ └── ExampleUnitTest.java ├── build.gradle ├── cameraModule ├── .gitignore ├── build.gradle ├── gradle.properties ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── example │ │ └── root │ │ └── cameramodule │ │ └── ExampleInstrumentedTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── example │ │ │ └── root │ │ │ └── cameramodule │ │ │ ├── Camera2Api.java │ │ │ ├── CameraApi.java │ │ │ ├── DensityUtils.java │ │ │ ├── ICameraApiCallback.java │ │ │ └── MainActivity.java │ ├── manifest │ │ └── AndroidManifest.xml │ └── res │ │ ├── drawable-v24 │ │ └── ic_launcher_foreground.xml │ │ ├── drawable │ │ └── ic_launcher_background.xml │ │ ├── layout │ │ └── activity_main.xml │ │ ├── mipmap-anydpi-v26 │ │ ├── ic_launcher.xml │ │ └── ic_launcher_round.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 │ │ ├── colors.xml │ │ ├── strings.xml │ │ └── styles.xml │ └── test │ └── java │ └── com │ └── example │ └── root │ └── cameramodule │ └── ExampleUnitTest.java ├── effect-image ├── 1536483646303_video.gif └── 1536483860136_video.gif ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── import-summary.txt ├── openCVLibrary342dev ├── 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 │ │ ├── aruco │ │ ├── Aruco.java │ │ ├── Board.java │ │ ├── CharucoBoard.java │ │ ├── DetectorParameters.java │ │ ├── Dictionary.java │ │ └── GridBoard.java │ │ ├── bgsegm │ │ ├── BackgroundSubtractorCNT.java │ │ ├── BackgroundSubtractorGMG.java │ │ ├── BackgroundSubtractorGSOC.java │ │ ├── BackgroundSubtractorLSBP.java │ │ ├── BackgroundSubtractorLSBPDesc.java │ │ ├── BackgroundSubtractorMOG.java │ │ ├── Bgsegm.java │ │ └── SyntheticSequenceGenerator.java │ │ ├── bioinspired │ │ ├── Bioinspired.java │ │ ├── Retina.java │ │ ├── RetinaFastToneMapping.java │ │ └── TransientAreasSegmentationModule.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 │ │ ├── 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 │ │ ├── face │ │ ├── BIF.java │ │ ├── BasicFaceRecognizer.java │ │ ├── EigenFaceRecognizer.java │ │ ├── Face.java │ │ ├── FaceRecognizer.java │ │ ├── Facemark.java │ │ ├── FacemarkAAM.java │ │ ├── FacemarkKazemi.java │ │ ├── FacemarkLBF.java │ │ ├── FacemarkTrain.java │ │ ├── FisherFaceRecognizer.java │ │ ├── LBPHFaceRecognizer.java │ │ ├── MACE.java │ │ ├── PredictCollector.java │ │ └── StandardCollector.java │ │ ├── features2d │ │ ├── AKAZE.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 │ │ ├── img_hash │ │ ├── AverageHash.java │ │ ├── BlockMeanHash.java │ │ ├── ColorMomentHash.java │ │ ├── ImgHashBase.java │ │ ├── Img_hash.java │ │ ├── MarrHildrethHash.java │ │ ├── PHash.java │ │ └── RadialVarianceHash.java │ │ ├── imgcodecs │ │ └── Imgcodecs.java │ │ ├── imgproc │ │ ├── CLAHE.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 │ │ ├── osgi │ │ ├── OpenCVInterface.java │ │ └── OpenCVNativeLoader.java │ │ ├── phase_unwrapping │ │ ├── HistogramPhaseUnwrapping.java │ │ ├── PhaseUnwrapping.java │ │ └── Phase_unwrapping.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 │ │ ├── TonemapDurand.java │ │ ├── TonemapMantiuk.java │ │ └── TonemapReinhard.java │ │ ├── plot │ │ ├── Plot.java │ │ └── Plot2d.java │ │ ├── structured_light │ │ ├── GrayCodePattern.java │ │ ├── Params.java │ │ ├── SinusoidalPattern.java │ │ ├── StructuredLightPattern.java │ │ └── Structured_light.java │ │ ├── text │ │ ├── BaseOCR.java │ │ ├── Callback.java │ │ ├── ClassifierCallback.java │ │ ├── ERFilter.java │ │ ├── OCRBeamSearchDecoder.java │ │ ├── OCRHMMDecoder.java │ │ ├── OCRTesseract.java │ │ ├── Text.java │ │ ├── TextDetector.java │ │ └── TextDetectorCNN.java │ │ ├── tracking │ │ ├── MultiTracker.java │ │ ├── Tracker.java │ │ ├── TrackerBoosting.java │ │ ├── TrackerCSRT.java │ │ ├── TrackerGOTURN.java │ │ ├── TrackerKCF.java │ │ ├── TrackerMIL.java │ │ ├── TrackerMOSSE.java │ │ ├── TrackerMedianFlow.java │ │ ├── TrackerTLD.java │ │ └── Tracking.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 │ │ ├── xfeatures2d │ │ ├── BoostDesc.java │ │ ├── BriefDescriptorExtractor.java │ │ ├── DAISY.java │ │ ├── FREAK.java │ │ ├── HarrisLaplaceFeatureDetector.java │ │ ├── LATCH.java │ │ ├── LUCID.java │ │ ├── MSDDetector.java │ │ ├── PCTSignatures.java │ │ ├── PCTSignaturesSQFD.java │ │ ├── SIFT.java │ │ ├── SURF.java │ │ ├── StarDetector.java │ │ ├── VGG.java │ │ └── Xfeatures2d.java │ │ ├── ximgproc │ │ ├── AdaptiveManifoldFilter.java │ │ ├── ContourFitting.java │ │ ├── DTFilter.java │ │ ├── DisparityFilter.java │ │ ├── DisparityWLSFilter.java │ │ ├── EdgeAwareInterpolator.java │ │ ├── EdgeBoxes.java │ │ ├── FastGlobalSmootherFilter.java │ │ ├── FastLineDetector.java │ │ ├── GraphSegmentation.java │ │ ├── GuidedFilter.java │ │ ├── RFFeatureGetter.java │ │ ├── RidgeDetectionFilter.java │ │ ├── SelectiveSearchSegmentation.java │ │ ├── SelectiveSearchSegmentationStrategy.java │ │ ├── SelectiveSearchSegmentationStrategyColor.java │ │ ├── SelectiveSearchSegmentationStrategyFill.java │ │ ├── SelectiveSearchSegmentationStrategyMultiple.java │ │ ├── SelectiveSearchSegmentationStrategySize.java │ │ ├── SelectiveSearchSegmentationStrategyTexture.java │ │ ├── SparseMatchInterpolator.java │ │ ├── StructuredEdgeDetection.java │ │ ├── SuperpixelLSC.java │ │ ├── SuperpixelSEEDS.java │ │ ├── SuperpixelSLIC.java │ │ └── Ximgproc.java │ │ └── xphoto │ │ ├── GrayworldWB.java │ │ ├── LearningBasedWB.java │ │ ├── SimpleWB.java │ │ ├── WhiteBalancer.java │ │ └── Xphoto.java │ └── res │ └── values │ └── attrs.xml └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | # Built application files 2 | *.apk 3 | *.ap_ 4 | 5 | # Files for the ART/Dalvik VM 6 | *.dex 7 | 8 | # Java class files 9 | *.class 10 | 11 | # Generated files 12 | bin/ 13 | gen/ 14 | out/ 15 | 16 | # Gradle files 17 | .gradle/ 18 | build/ 19 | 20 | # Local configuration file (sdk path, etc) 21 | local.properties 22 | 23 | # Proguard folder generated by Eclipse 24 | proguard/ 25 | 26 | # Log Files 27 | *.log 28 | 29 | # Android Studio Navigation editor temp files 30 | .navigation/ 31 | 32 | # Android Studio captures folder 33 | captures/ 34 | 35 | # IntelliJ 36 | *.iml 37 | .idea/workspace.xml 38 | .idea/tasks.xml 39 | .idea/gradle.xml 40 | .idea/assetWizardSettings.xml 41 | .idea/dictionaries 42 | .idea/libraries 43 | .idea/caches 44 | 45 | # Keystore files 46 | # Uncomment the following line if you do not want to check your keystore files in. 47 | #*.jks 48 | 49 | # External native build folder generated in Android Studio 2.2 and later 50 | .externalNativeBuild 51 | 52 | # Google Services (e.g. APIs or Firebase) 53 | google-services.json 54 | 55 | # Freeline 56 | freeline.py 57 | freeline/ 58 | freeline_project_description.json 59 | 60 | # fastlane 61 | fastlane/report.xml 62 | fastlane/Preview.html 63 | fastlane/screenshots 64 | fastlane/test_output 65 | fastlane/readme.md 66 | -------------------------------------------------------------------------------- /.idea/codeStyles/Project.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 15 | 16 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 17 | 27 | 28 | 29 | 30 | 31 | 32 | 34 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # OpenCvObjectTracking 2 | reach object tracking by opencv tracker 3 | 4 | 5 | ## 简介(introduction) 6 | 在Android平台上利用OpenCV的Tracker 模块来实现物体追踪效果。 7 | 8 | Use the Tracker module of OpenCV on the Android platform to achieve object tracking. 9 | ## 效果图 10 | ![image](https://github.com/MRYangY/OpenCvObjectTracking/blob/master/effect-image/1536483860136_video.gif) 11 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 27 5 | defaultConfig { 6 | applicationId "com.example.root.opencvobjecttracking" 7 | minSdkVersion 23 8 | targetSdkVersion 27 9 | versionCode 1 10 | versionName "1.0" 11 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 12 | } 13 | buildTypes { 14 | release { 15 | minifyEnabled false 16 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 17 | } 18 | } 19 | } 20 | 21 | dependencies { 22 | implementation fileTree(include: ['*.jar'], dir: 'libs') 23 | implementation 'com.android.support:appcompat-v7:27.1.1' 24 | implementation 'com.android.support.constraint:constraint-layout:1.1.3' 25 | testImplementation 'junit:junit:4.12' 26 | androidTestImplementation 'com.android.support.test:runner:1.0.2' 27 | androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' 28 | implementation project(':openCVLibrary342dev') 29 | implementation project(':cameraModule') 30 | } 31 | -------------------------------------------------------------------------------- /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 22 | -------------------------------------------------------------------------------- /app/src/androidTest/java/com/example/root/opencvobjecttracking/ExampleInstrumentedTest.java: -------------------------------------------------------------------------------- 1 | package com.example.root.opencvobjecttracking; 2 | 3 | import android.content.Context; 4 | import android.support.test.InstrumentationRegistry; 5 | import android.support.test.runner.AndroidJUnit4; 6 | 7 | import org.junit.Test; 8 | import org.junit.runner.RunWith; 9 | 10 | import static org.junit.Assert.*; 11 | 12 | /** 13 | * Instrumented test, which will execute on an Android device. 14 | * 15 | * @see Testing documentation 16 | */ 17 | @RunWith(AndroidJUnit4.class) 18 | public class ExampleInstrumentedTest { 19 | @Test 20 | public void useAppContext() { 21 | // Context of the app under test. 22 | Context appContext = InstrumentationRegistry.getTargetContext(); 23 | 24 | assertEquals("com.example.root.opencvobjecttracking", appContext.getPackageName()); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 13 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/root/opencvobjecttracking/CameraRawData.java: -------------------------------------------------------------------------------- 1 | package com.example.root.opencvobjecttracking; 2 | 3 | public class CameraRawData { 4 | private byte[] rawData; 5 | private long timestamp; 6 | 7 | public CameraRawData() { 8 | } 9 | 10 | public CameraRawData(byte[] rawData, long timestamp) { 11 | this.rawData = rawData; 12 | this.timestamp = timestamp; 13 | } 14 | 15 | public byte[] getRawData() { 16 | return rawData; 17 | } 18 | 19 | public void setRawData(byte[] rawData) { 20 | this.rawData = rawData; 21 | } 22 | 23 | public long getTimestamp() { 24 | return timestamp; 25 | } 26 | 27 | public void setTimestamp(long timestamp) { 28 | this.timestamp = timestamp; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/root/opencvobjecttracking/Constant.java: -------------------------------------------------------------------------------- 1 | package com.example.root.opencvobjecttracking; 2 | 3 | public class Constant { 4 | public static final int DIALOG_ID_SHOW_TRACKER_LIST = 0; 5 | } 6 | -------------------------------------------------------------------------------- /app/src/main/jniLibs/armeabi-v7a/libopencv_java3.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MRYangY/OpenCvObjectTracking/6aa3c036e5a3ea4377a0a014dfcc8836943a1e50/app/src/main/jniLibs/armeabi-v7a/libopencv_java3.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/armeabi/libopencv_java3.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MRYangY/OpenCvObjectTracking/6aa3c036e5a3ea4377a0a014dfcc8836943a1e50/app/src/main/jniLibs/armeabi/libopencv_java3.so -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/ic_launcher_foreground.xml: -------------------------------------------------------------------------------- 1 | 7 | 12 | 13 | 19 | 22 | 25 | 26 | 27 | 28 | 34 | 35 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 14 | 15 | 19 | 20 | 24 | 25 | 26 | 29 | 30 |