├── .gitignore ├── .idea ├── compiler.xml ├── copyright │ └── profiles_settings.xml ├── gradle.xml ├── libraries │ ├── animated_vector_drawable_24_2_1.xml │ ├── appcompat_v7_24_2_1.xml │ ├── cardview_v7_24_2_1.xml │ ├── circleimageview_2_1_0.xml │ ├── design_24_2_1.xml │ ├── espresso_core_2_2_2.xml │ ├── espresso_idling_resource_2_2_2.xml │ ├── exposed_instrumentation_api_publish_0_5.xml │ ├── glide_3_7_0.xml │ ├── hamcrest_core_1_3.xml │ ├── hamcrest_integration_1_3.xml │ ├── hamcrest_library_1_3.xml │ ├── javawriter_2_1_1.xml │ ├── javax_annotation_api_1_2.xml │ ├── javax_inject_1.xml │ ├── jsr305_2_0_1.xml │ ├── junit_4_12.xml │ ├── libsvm.xml │ ├── okhttp_3_7_0.xml │ ├── okio_1_12_0.xml │ ├── recyclerview_v7_24_2_1.xml │ ├── rules_0_5.xml │ ├── runner_0_5.xml │ ├── support_annotations_24_2_1.xml │ ├── support_compat_24_2_1.xml │ ├── support_core_ui_24_2_1.xml │ ├── support_core_utils_24_2_1.xml │ ├── support_fragment_24_2_1.xml │ ├── support_media_compat_24_2_1.xml │ ├── support_v4_24_2_1.xml │ └── support_vector_drawable_24_2_1.xml ├── misc.xml ├── modules.xml ├── runConfigurations.xml └── vcs.xml ├── LICENSE ├── README.md ├── app ├── .gitignore ├── build.gradle ├── libs │ └── libsvm.jar ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── cn │ │ └── edu │ │ └── ecust │ │ └── faceaccesscontrol │ │ └── ExampleInstrumentedTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── cn │ │ │ └── edu │ │ │ └── ecust │ │ │ └── faceaccesscontrol │ │ │ ├── activity │ │ │ ├── AdminApproveDetailActivity.java │ │ │ ├── AdminConfigActivity.java │ │ │ ├── AdminMainActivity.java │ │ │ ├── AdminNoticeActivity.java │ │ │ ├── AdminNoticeEditActivity.java │ │ │ ├── AdminUserApproveActivity.java │ │ │ ├── AdminUserDetialActivity.java │ │ │ ├── AdminUserManageActivity.java │ │ │ ├── CalculateActivity.java │ │ │ ├── CameraRecognizeActivity.java │ │ │ ├── CameraRegisterActivity.java │ │ │ ├── HistoryActivity.java │ │ │ ├── NoAdminMainActivity.java │ │ │ ├── PasswordLoginActivity.java │ │ │ ├── RegisterNewUserActivity.java │ │ │ ├── RegisterResultActivity.java │ │ │ ├── ResultActivity.java │ │ │ └── WelcomeActivity.java │ │ │ ├── common │ │ │ ├── ExitDialogActivity.java │ │ │ ├── FullScreenActivity.java │ │ │ └── Toolbar2Activity.java │ │ │ ├── manage │ │ │ ├── ActivityCollector.java │ │ │ ├── AllUseAlertDialog.java │ │ │ └── MyDatabaseHelper.java │ │ │ └── userrecycler │ │ │ ├── ApproveUserCardAdapter.java │ │ │ ├── HistoryUserCardAdapter.java │ │ │ ├── UserCard.java │ │ │ └── UserCardAdapter.java │ └── res │ │ ├── drawable │ │ ├── app_faceicon.png │ │ ├── ic_admin.png │ │ ├── ic_back.png │ │ ├── ic_close.png │ │ ├── ic_delete.png │ │ ├── ic_failure.png │ │ ├── ic_home.png │ │ ├── ic_menu.png │ │ ├── ic_ok.png │ │ ├── ic_refuse.png │ │ ├── ic_success.png │ │ ├── ic_tutor.png │ │ ├── nav_call.png │ │ ├── nav_close.png │ │ ├── nav_config.png │ │ ├── nav_icon.jpg │ │ ├── nav_location.png │ │ ├── nav_mail.png │ │ ├── noadminmainactivity_button_adminlogin.png │ │ ├── noadminmainactivity_button_recognize.png │ │ ├── noadminmainactivity_button_register.png │ │ └── welcomeactivity_background.png │ │ ├── layout │ │ ├── activity_admin_approve_detail.xml │ │ ├── activity_admin_config.xml │ │ ├── activity_admin_main.xml │ │ ├── activity_admin_notice.xml │ │ ├── activity_admin_notice_edit.xml │ │ ├── activity_admin_user_approve.xml │ │ ├── activity_admin_user_detial.xml │ │ ├── activity_admin_user_manage.xml │ │ ├── activity_calculate.xml │ │ ├── activity_camera_recognize.xml │ │ ├── activity_camera_register.xml │ │ ├── activity_history.xml │ │ ├── activity_no_admin_main.xml │ │ ├── activity_password_login.xml │ │ ├── activity_register_new_user.xml │ │ ├── activity_register_result.xml │ │ ├── activity_result.xml │ │ ├── activity_welcome.xml │ │ ├── alert_password.xml │ │ ├── nav_header.xml │ │ └── usercard_item.xml │ │ ├── menu │ │ ├── nav_menu.xml │ │ └── toolbar.xml │ │ ├── mipmap-hdpi │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxxhdpi │ │ └── ic_launcher.png │ │ ├── raw │ │ ├── eyeglasses.jpg │ │ ├── haarcascade_frontalface_alt2.xml │ │ └── haarcascade_mcs_eyepair_big.xml │ │ ├── values-w820dp │ │ └── dimens.xml │ │ └── values │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml │ └── test │ └── java │ └── cn │ └── edu │ └── ecust │ └── faceaccesscontrol │ └── ExampleUnitTest.java ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── import-summary.txt ├── openCVLibrary320 ├── 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 │ │ ├── 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 │ │ ├── Point.java │ │ ├── Point3.java │ │ ├── Range.java │ │ ├── Rect.java │ │ ├── RotatedRect.java │ │ ├── Scalar.java │ │ ├── Size.java │ │ ├── TermCriteria.java │ │ └── TickMeter.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 │ │ ├── imgcodecs │ │ └── Imgcodecs.java │ │ ├── imgproc │ │ ├── CLAHE.java │ │ ├── Imgproc.java │ │ ├── LineSegmentDetector.java │ │ ├── Moments.java │ │ └── Subdiv2D.java │ │ ├── ml │ │ ├── ANN_MLP.java │ │ ├── Boost.java │ │ ├── DTrees.java │ │ ├── EM.java │ │ ├── KNearest.java │ │ ├── LogisticRegression.java │ │ ├── Ml.java │ │ ├── NormalBayesClassifier.java │ │ ├── RTrees.java │ │ ├── SVM.java │ │ ├── SVMSGD.java │ │ ├── StatModel.java │ │ └── TrainData.java │ │ ├── objdetect │ │ ├── BaseCascadeClassifier.java │ │ ├── CascadeClassifier.java │ │ ├── HOGDescriptor.java │ │ └── Objdetect.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 │ │ ├── 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 ├── settings.gradle └── show_img ├── face.png ├── face_yes.png ├── manage.png └── user_gui.png /.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 | 39 | # Keystore files 40 | *.jks 41 | -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /.idea/copyright/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 19 | 20 | -------------------------------------------------------------------------------- /.idea/libraries/animated_vector_drawable_24_2_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/appcompat_v7_24_2_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /.idea/libraries/cardview_v7_24_2_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/circleimageview_2_1_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/design_24_2_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /.idea/libraries/espresso_core_2_2_2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/espresso_idling_resource_2_2_2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/exposed_instrumentation_api_publish_0_5.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/glide_3_7_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/hamcrest_core_1_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/hamcrest_integration_1_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/libraries/hamcrest_library_1_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/libraries/javawriter_2_1_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/libraries/javax_annotation_api_1_2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/libraries/javax_inject_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/libraries/jsr305_2_0_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/libraries/junit_4_12.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/libsvm.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/libraries/okhttp_3_7_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/okio_1_12_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/recyclerview_v7_24_2_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /.idea/libraries/rules_0_5.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /.idea/libraries/runner_0_5.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /.idea/libraries/support_annotations_24_2_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/support_compat_24_2_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /.idea/libraries/support_core_ui_24_2_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /.idea/libraries/support_core_utils_24_2_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /.idea/libraries/support_fragment_24_2_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /.idea/libraries/support_media_compat_24_2_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /.idea/libraries/support_v4_24_2_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/support_vector_drawable_24_2_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 19 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 46 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # FaceAccessControl 2 | ### 本科毕业设计,基于Android的人脸门禁系统 3 | 4 | 5 |   传统的门禁系统以钥匙作为验证手段,便捷程度低,丢失钥匙之后会导致极大的安全问题。人脸是一种极易获得的生物特征,具有唯一性、稳定性的特点,并且使用时设备无需与人脸接触,因此可以作为新一代的门禁验证手段。近年来,随着Android移动设备性能的不断提升,使得在移动设备上进行人脸识别成为可能。本repo设计并开发了一个基于Android平台的人脸识别门禁系统,并解决了在实际运用中可能遇到的光照变化,人脸姿态变化等情况。主要内容如下: 6 | * 1)基于双眼检测的正脸判断算法研究。人脸识别中,人脸的姿态变化会导致识别率降低。首先研究实现了基于Haar特征的Adaboost人脸检测算法,检测定位出人脸的框架和双眼的位置。然后通过人脸与双眼的位置关系,提出了一个正脸判断的方法。实验表明,该方法有效地降低了人脸姿态问题对于整个识别系统的影响。 7 | * 2)基于LBP+PCA的人脸识别算法研究。首先分析了局部二值模式LBP和主成份分析PCA的原理,研究了LBP与PCA相结合的特征提取方法。相对于单独使用PCA方法,该组合方法能够有效地降低光照变化对人脸识别准确度的影响。然后,采用支持向量机对特征进行分类,并利用置信度计算方法,来有效地表示人脸和分类结果的隶属程度。实验表明,该算法对于光照变化情况下的人脸识别,准确率有了明显的提升。 8 | * 3)Android平台上人脸识别门禁系统的设计与实现。分析了系统的需求,设计了具有用户注册、人脸检测与识别、门禁开关、管理员模块、通知模块等功能模块的人脸识别门禁系统。然后在Android平台上,利用Java语言和计算机图像视觉库Opencv,按照软件工程逻辑完成了系统的整体开发。整个系统经过测试运行,能够满足典型环境中的使用需求。 9 | 10 | # 部分系统界面 11 | 用户主界面: 12 | ![](./show_img/user_gui.png) 13 | 识别界面: 14 | ![](./show_img/face.png) 15 | 识别成功页面: 16 | ![](./show_img/face_yes.png) 17 | 用户管理页面: 18 | ![](./show_img/manage.png) 19 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 24 5 | buildToolsVersion "24.0.3" 6 | defaultConfig { 7 | applicationId "cn.edu.ecust.faceaccesscontrol" 8 | minSdkVersion 17 9 | targetSdkVersion 24 10 | versionCode 1 11 | versionName "1.0" 12 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 13 | } 14 | buildTypes { 15 | release { 16 | minifyEnabled false 17 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 18 | } 19 | } 20 | } 21 | 22 | dependencies { 23 | compile fileTree(include: ['*.jar'], dir: 'libs') 24 | androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { 25 | exclude group: 'com.android.support', module: 'support-annotations' 26 | }) 27 | compile 'com.android.support:appcompat-v7:24.2.1' 28 | testCompile 'junit:junit:4.12' 29 | compile 'com.android.support:design:24.2.1' 30 | compile 'de.hdodenhof:circleimageview:2.1.0' 31 | compile project(':openCVLibrary320') 32 | compile 'com.android.support:recyclerview-v7:24.2.1' 33 | compile 'com.android.support:cardview-v7:24.2.1' 34 | compile 'com.github.bumptech.glide:glide:3.7.0' 35 | compile files('libs/libsvm.jar') 36 | compile 'com.squareup.okhttp3:okhttp:3.7.0' 37 | } 38 | -------------------------------------------------------------------------------- /app/libs/libsvm.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommissarMa/FaceAccessControl/95cfeb5f76918cb64eb01609e22ea4fc71a52b1f/app/libs/libsvm.jar -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in D:\IDE\Android\sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /app/src/androidTest/java/cn/edu/ecust/faceaccesscontrol/ExampleInstrumentedTest.java: -------------------------------------------------------------------------------- 1 | package cn.edu.ecust.faceaccesscontrol; 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 | * Instrumentation 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() throws Exception { 21 | // Context of the app under test. 22 | Context appContext = InstrumentationRegistry.getTargetContext(); 23 | 24 | assertEquals("cn.edu.ecust.faceaccesscontrol", appContext.getPackageName()); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/java/cn/edu/ecust/faceaccesscontrol/activity/AdminNoticeEditActivity.java: -------------------------------------------------------------------------------- 1 | 2 | package cn.edu.ecust.faceaccesscontrol.activity; 3 | 4 | import android.content.Intent; 5 | import android.database.Cursor; 6 | import android.database.sqlite.SQLiteDatabase; 7 | import android.support.v7.app.AppCompatActivity; 8 | import android.os.Bundle; 9 | import android.support.v7.widget.AppCompatEditText; 10 | import android.support.v7.widget.Toolbar; 11 | import android.util.Log; 12 | import android.view.View; 13 | import android.widget.Button; 14 | import android.widget.Toast; 15 | 16 | import cn.edu.ecust.faceaccesscontrol.R; 17 | import cn.edu.ecust.faceaccesscontrol.common.Toolbar2Activity; 18 | import cn.edu.ecust.faceaccesscontrol.manage.MyDatabaseHelper; 19 | 20 | public class AdminNoticeEditActivity extends Toolbar2Activity { 21 | 22 | @Override 23 | protected void onCreate(Bundle savedInstanceState) { 24 | super.onCreate(savedInstanceState); 25 | setContentView(R.layout.activity_admin_notice_edit); 26 | Toolbar toolbar=(Toolbar)findViewById(R.id.toolbar);//找到工具条 27 | setSupportActionBar(toolbar);//激活工具条 28 | 29 | final AppCompatEditText noticeEditText=(AppCompatEditText)findViewById(R.id.adminnoticeeditpage_addnotice_edittext);//修改编辑框 30 | Button noticeEditButton=(Button)findViewById(R.id.adminnoticeeditpage_addnotice_button);//修改按钮 31 | 32 | Intent intent_lastActvity=getIntent(); 33 | final int index=intent_lastActvity.getIntExtra("idIndexInDB",0); 34 | 35 | MyDatabaseHelper dbHelper=new MyDatabaseHelper(AdminNoticeEditActivity.this,"Face.db",null,1); 36 | final SQLiteDatabase db=dbHelper.getWritableDatabase(); 37 | Cursor cursor=db.rawQuery("select * from Notice where id= ? ",new String[]{""+index}); 38 | if(cursor.moveToFirst()){ 39 | do { 40 | noticeEditText.setText(cursor.getString(cursor.getColumnIndex("noticetext"))); 41 | }while (cursor.moveToNext()); 42 | } 43 | cursor.close(); 44 | 45 | noticeEditButton.setOnClickListener(new View.OnClickListener() { 46 | @Override 47 | public void onClick(View v) { 48 | if(!noticeEditText.getText().toString().equals("")){ 49 | db.execSQL("update Notice set noticetext = ? where id = ? ",new String[]{noticeEditText.getText().toString(),index+""}); 50 | finish(); 51 | }else{ 52 | Toast.makeText(AdminNoticeEditActivity.this,"通知内容不能为空",Toast.LENGTH_SHORT).show(); 53 | } 54 | } 55 | }); 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /app/src/main/java/cn/edu/ecust/faceaccesscontrol/activity/AdminUserApproveActivity.java: -------------------------------------------------------------------------------- 1 | package cn.edu.ecust.faceaccesscontrol.activity; 2 | 3 | import android.content.Context; 4 | import android.database.Cursor; 5 | import android.database.sqlite.SQLiteDatabase; 6 | import android.support.v7.app.AppCompatActivity; 7 | import android.os.Bundle; 8 | import android.support.v7.widget.GridLayoutManager; 9 | import android.support.v7.widget.RecyclerView; 10 | import android.support.v7.widget.Toolbar; 11 | 12 | import java.io.File; 13 | import java.util.ArrayList; 14 | import java.util.List; 15 | 16 | import cn.edu.ecust.faceaccesscontrol.R; 17 | import cn.edu.ecust.faceaccesscontrol.common.Toolbar2Activity; 18 | import cn.edu.ecust.faceaccesscontrol.manage.MyDatabaseHelper; 19 | import cn.edu.ecust.faceaccesscontrol.userrecycler.ApproveUserCardAdapter; 20 | import cn.edu.ecust.faceaccesscontrol.userrecycler.UserCard; 21 | import cn.edu.ecust.faceaccesscontrol.userrecycler.UserCardAdapter; 22 | 23 | public class AdminUserApproveActivity extends Toolbar2Activity { 24 | 25 | private List userCardList=new ArrayList<>(); 26 | private ApproveUserCardAdapter adapter; 27 | 28 | @Override 29 | protected void onCreate(Bundle savedInstanceState) { 30 | super.onCreate(savedInstanceState); 31 | setContentView(R.layout.activity_admin_user_approve); 32 | Toolbar toolbarCommon=(Toolbar)findViewById(R.id.adminuserapproveactivity_toolbar_common);//找到工具条 33 | setSupportActionBar(toolbarCommon);//激活工具条 34 | } 35 | 36 | @Override 37 | protected void onResume() { 38 | super.onResume(); 39 | 40 | //清空列表 41 | userCardList=new ArrayList<>(); 42 | //先从数据库中获取所有用户的工号 43 | getAllUserNoFromDB();//这时候userCardList就有数据了 44 | 45 | //填充RecyclerView 46 | RecyclerView recyclerView=(RecyclerView)findViewById(R.id.adminuserapproveactivity_recyclerview_main); 47 | GridLayoutManager layoutManager=new GridLayoutManager(this,4);//设置每行显示的card数量 48 | recyclerView.setLayoutManager(layoutManager); 49 | adapter=new ApproveUserCardAdapter(userCardList); 50 | recyclerView.setAdapter(adapter); 51 | } 52 | 53 | private void getAllUserNoFromDB(){ 54 | File faceDir = getDir("face", Context.MODE_PRIVATE);//有此目录就获取,没有就创建 55 | MyDatabaseHelper dbHelper=new MyDatabaseHelper(AdminUserApproveActivity.this,"Face.db",null,1); 56 | SQLiteDatabase db=dbHelper.getWritableDatabase(); 57 | Cursor cursor=db.rawQuery("select no from User where grant = 0",null); 58 | if(cursor.moveToFirst()){ 59 | do{ 60 | String userNo=cursor.getString(cursor.getColumnIndex("no")); 61 | UserCard userCard=new UserCard(userNo,faceDir.getAbsolutePath()+"/"+userNo+"_1.jpg"); 62 | userCardList.add(userCard); 63 | }while (cursor.moveToNext()); 64 | } 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /app/src/main/java/cn/edu/ecust/faceaccesscontrol/activity/AdminUserManageActivity.java: -------------------------------------------------------------------------------- 1 | package cn.edu.ecust.faceaccesscontrol.activity; 2 | 3 | import android.content.Context; 4 | import android.database.Cursor; 5 | import android.database.sqlite.SQLiteDatabase; 6 | import android.support.v7.app.AppCompatActivity; 7 | import android.os.Bundle; 8 | import android.support.v7.widget.GridLayoutManager; 9 | import android.support.v7.widget.RecyclerView; 10 | import android.support.v7.widget.Toolbar; 11 | 12 | import java.io.File; 13 | import java.util.ArrayList; 14 | import java.util.List; 15 | 16 | import cn.edu.ecust.faceaccesscontrol.R; 17 | import cn.edu.ecust.faceaccesscontrol.common.Toolbar2Activity; 18 | import cn.edu.ecust.faceaccesscontrol.manage.MyDatabaseHelper; 19 | import cn.edu.ecust.faceaccesscontrol.userrecycler.UserCard; 20 | import cn.edu.ecust.faceaccesscontrol.userrecycler.UserCardAdapter; 21 | 22 | public class AdminUserManageActivity extends Toolbar2Activity { 23 | 24 | private List userCardList=new ArrayList<>(); 25 | private UserCardAdapter adapter; 26 | 27 | @Override 28 | protected void onCreate(Bundle savedInstanceState) { 29 | super.onCreate(savedInstanceState); 30 | setContentView(R.layout.activity_admin_user_manage); 31 | Toolbar toolbarCommon=(Toolbar)findViewById(R.id.adminusermanageactivity_toolbar_common);//找到工具条 32 | setSupportActionBar(toolbarCommon);//激活工具条 33 | } 34 | 35 | @Override 36 | protected void onResume() { 37 | super.onResume(); 38 | 39 | //清空列表 40 | userCardList=new ArrayList<>(); 41 | //先从数据库中获取所有用户的工号 42 | getAllUserNoFromDB();//这时候userCardList就有数据了 43 | 44 | //填充RecyclerView 45 | RecyclerView recyclerView=(RecyclerView)findViewById(R.id.adminusermanageactivity_recyclerview_main); 46 | GridLayoutManager layoutManager=new GridLayoutManager(this,4);//设置每行显示的card数量 47 | recyclerView.setLayoutManager(layoutManager); 48 | adapter=new UserCardAdapter(userCardList); 49 | recyclerView.setAdapter(adapter); 50 | } 51 | 52 | private void getAllUserNoFromDB(){ 53 | File faceDir = getDir("face", Context.MODE_PRIVATE);//有此目录就获取,没有就创建 54 | MyDatabaseHelper dbHelper=new MyDatabaseHelper(AdminUserManageActivity.this,"Face.db",null,1); 55 | SQLiteDatabase db=dbHelper.getWritableDatabase(); 56 | Cursor cursor=db.rawQuery("select no from User where grant = 1",null); 57 | if(cursor.moveToFirst()){ 58 | do{ 59 | String userNo=cursor.getString(cursor.getColumnIndex("no")); 60 | UserCard userCard=new UserCard(userNo,faceDir.getAbsolutePath()+"/"+userNo+"_1.jpg"); 61 | userCardList.add(userCard); 62 | }while (cursor.moveToNext()); 63 | } 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /app/src/main/java/cn/edu/ecust/faceaccesscontrol/activity/HistoryActivity.java: -------------------------------------------------------------------------------- 1 | package cn.edu.ecust.faceaccesscontrol.activity; 2 | 3 | import android.content.Context; 4 | import android.database.Cursor; 5 | import android.database.sqlite.SQLiteDatabase; 6 | import android.support.v7.app.AppCompatActivity; 7 | import android.os.Bundle; 8 | import android.support.v7.widget.GridLayoutManager; 9 | import android.support.v7.widget.RecyclerView; 10 | import android.support.v7.widget.Toolbar; 11 | 12 | import java.io.File; 13 | import java.util.ArrayList; 14 | import java.util.List; 15 | 16 | import cn.edu.ecust.faceaccesscontrol.R; 17 | import cn.edu.ecust.faceaccesscontrol.common.Toolbar2Activity; 18 | import cn.edu.ecust.faceaccesscontrol.manage.MyDatabaseHelper; 19 | import cn.edu.ecust.faceaccesscontrol.userrecycler.HistoryUserCardAdapter; 20 | import cn.edu.ecust.faceaccesscontrol.userrecycler.UserCard; 21 | import cn.edu.ecust.faceaccesscontrol.userrecycler.UserCardAdapter; 22 | 23 | public class HistoryActivity extends Toolbar2Activity { 24 | 25 | private List userCardList=new ArrayList<>(); 26 | private HistoryUserCardAdapter adapter; 27 | 28 | @Override 29 | protected void onCreate(Bundle savedInstanceState) { 30 | super.onCreate(savedInstanceState); 31 | setContentView(R.layout.activity_history); 32 | Toolbar toolbarCommon=(Toolbar)findViewById(R.id.historyactivity_toolbar_common);//找到工具条 33 | setSupportActionBar(toolbarCommon);//激活工具条 34 | } 35 | 36 | @Override 37 | protected void onResume() { 38 | super.onResume(); 39 | 40 | //清空列表 41 | userCardList=new ArrayList<>(); 42 | //先从数据库中获取所有用户的工号 43 | getAllTestFromDB();//这时候userCardList就有数据了 44 | 45 | //填充RecyclerView 46 | RecyclerView recyclerView=(RecyclerView)findViewById(R.id.historyactivity_recyclerview_main); 47 | GridLayoutManager layoutManager=new GridLayoutManager(this,4);//设置每行显示的card数量 48 | recyclerView.setLayoutManager(layoutManager); 49 | adapter=new HistoryUserCardAdapter(userCardList); 50 | recyclerView.setAdapter(adapter); 51 | } 52 | 53 | private void getAllTestFromDB(){ 54 | File faceDir = getDir("testface", Context.MODE_PRIVATE);//有此目录就获取,没有就创建 55 | MyDatabaseHelper dbHelper=new MyDatabaseHelper(HistoryActivity.this,"Face.db",null,1); 56 | SQLiteDatabase db=dbHelper.getWritableDatabase(); 57 | Cursor cursor=db.rawQuery("select * from Test",null); 58 | if(cursor.moveToFirst()){ 59 | do{ 60 | String userNo=cursor.getString(cursor.getColumnIndex("testname")); 61 | UserCard userCard=new UserCard(userNo,faceDir.getAbsolutePath()+"/"+userNo+".jpg"); 62 | userCardList.add(userCard); 63 | }while (cursor.moveToNext()); 64 | } 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /app/src/main/java/cn/edu/ecust/faceaccesscontrol/activity/PasswordLoginActivity.java: -------------------------------------------------------------------------------- 1 | package cn.edu.ecust.faceaccesscontrol.activity; 2 | 3 | import android.database.Cursor; 4 | import android.database.sqlite.SQLiteDatabase; 5 | import android.support.v7.app.AppCompatActivity; 6 | import android.os.Bundle; 7 | import android.support.v7.widget.Toolbar; 8 | import android.view.View; 9 | import android.widget.Button; 10 | import android.widget.EditText; 11 | import android.widget.Toast; 12 | 13 | import cn.edu.ecust.faceaccesscontrol.R; 14 | import cn.edu.ecust.faceaccesscontrol.common.Toolbar2Activity; 15 | import cn.edu.ecust.faceaccesscontrol.manage.MyDatabaseHelper; 16 | 17 | public class PasswordLoginActivity extends Toolbar2Activity { 18 | 19 | private EditText editTextNo; 20 | private EditText editTextPassword; 21 | private Button buttonLogin; 22 | 23 | @Override 24 | protected void onCreate(Bundle savedInstanceState) { 25 | super.onCreate(savedInstanceState); 26 | setContentView(R.layout.activity_password_login); 27 | Toolbar toolbarCommon=(Toolbar)findViewById(R.id.passwordloginactivity_toolbar_common);//找到工具条 28 | setSupportActionBar(toolbarCommon);//激活工具条 29 | 30 | editTextNo=(EditText)findViewById(R.id.passwordloginactivity_edittext_no); 31 | editTextPassword=(EditText)findViewById(R.id.passwordloginactivity_edittext_password); 32 | buttonLogin=(Button)findViewById(R.id.passwordloginactivity_button_login); 33 | buttonLogin.setOnClickListener(new View.OnClickListener() { 34 | @Override 35 | public void onClick(View v) { 36 | MyDatabaseHelper dbHelper=new MyDatabaseHelper(PasswordLoginActivity.this,"Face.db",null,1); 37 | SQLiteDatabase db=dbHelper.getWritableDatabase(); 38 | Cursor cursor=db.rawQuery("select * from User where no = ? and grant = 1",new String[]{editTextNo.getText().toString()}); 39 | if(cursor.moveToFirst()){ 40 | do { 41 | if(editTextPassword.getText().toString().equals(cursor.getString(cursor.getColumnIndex("password")))){ 42 | Toast.makeText(PasswordLoginActivity.this,"验证成功,门禁已开启!",Toast.LENGTH_SHORT).show(); 43 | finish(); 44 | } 45 | else { 46 | Toast.makeText(PasswordLoginActivity.this,"密码错误!",Toast.LENGTH_SHORT).show(); 47 | } 48 | }while (cursor.moveToNext()); 49 | }else{ 50 | Toast.makeText(PasswordLoginActivity.this,"用户不存在!",Toast.LENGTH_SHORT).show(); 51 | } 52 | cursor.close(); 53 | } 54 | }); 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /app/src/main/java/cn/edu/ecust/faceaccesscontrol/activity/RegisterResultActivity.java: -------------------------------------------------------------------------------- 1 | package cn.edu.ecust.faceaccesscontrol.activity; 2 | 3 | import android.app.Activity; 4 | import android.content.Context; 5 | import android.content.Intent; 6 | import android.database.sqlite.SQLiteDatabase; 7 | import android.support.v7.app.AppCompatActivity; 8 | import android.os.Bundle; 9 | import android.support.v7.widget.Toolbar; 10 | import android.util.Log; 11 | import android.widget.ImageView; 12 | import android.widget.TextView; 13 | import android.widget.Toast; 14 | 15 | import com.bumptech.glide.Glide; 16 | 17 | import java.io.File; 18 | 19 | import cn.edu.ecust.faceaccesscontrol.R; 20 | import cn.edu.ecust.faceaccesscontrol.common.Toolbar2Activity; 21 | import cn.edu.ecust.faceaccesscontrol.manage.MyDatabaseHelper; 22 | 23 | public class RegisterResultActivity extends Toolbar2Activity { 24 | 25 | private ImageView imageViewIcon;//显示注册结果的图标 26 | private TextView textViewMessage;//显示注册结果的文字信息 27 | 28 | @Override 29 | protected void onCreate(Bundle savedInstanceState) { 30 | super.onCreate(savedInstanceState); 31 | setContentView(R.layout.activity_register_result); 32 | Toolbar toolbarCommon=(Toolbar)findViewById(R.id.registerresultactivity_toolbar_common);//找到工具条 33 | setSupportActionBar(toolbarCommon);//激活工具条 34 | 35 | //绑定控件 36 | imageViewIcon=(ImageView)findViewById(R.id.registerresultactivity_imageview_icon); 37 | textViewMessage=(TextView)findViewById(R.id.registerresultactivity_textview_message); 38 | 39 | Intent intentFromCameraRegisterActivity=getIntent(); 40 | if(intentFromCameraRegisterActivity.getBooleanExtra("isRegisterSuccess",false)==true){ 41 | //把该用户的信息插入数据库 42 | insertIntoTable(RegisterResultActivity.this,intentFromCameraRegisterActivity); 43 | //更改UI 44 | imageViewIcon.setImageResource(R.drawable.ic_success); 45 | textViewMessage.setText("注册成功!请等待管理员审批!"); 46 | }else{ 47 | imageViewIcon.setImageResource(R.drawable.ic_failure); 48 | textViewMessage.setText("注册失败!请重试!"); 49 | } 50 | } 51 | 52 | public void insertIntoTable(Activity activity,Intent intent){ 53 | String stringUserNo=intent.getStringExtra("userNo"); 54 | String stringUserName=intent.getStringExtra("userName"); 55 | String stringUserPassword=intent.getStringExtra("userPassword"); 56 | String stringUserCellphone=intent.getStringExtra("userCellphone"); 57 | 58 | MyDatabaseHelper dbHelper=new MyDatabaseHelper(activity,"Face.db",null,1); 59 | SQLiteDatabase db=dbHelper.getWritableDatabase(); 60 | db.execSQL("insert into User (no, name, password, cellphone, grant) values (?,?,?,?,?)", 61 | new String[]{stringUserNo,stringUserName,stringUserPassword,stringUserCellphone,0+""}); 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /app/src/main/java/cn/edu/ecust/faceaccesscontrol/common/ExitDialogActivity.java: -------------------------------------------------------------------------------- 1 | package cn.edu.ecust.faceaccesscontrol.common; 2 | 3 | import android.support.v7.app.AppCompatActivity; 4 | import android.os.Bundle; 5 | import android.view.KeyEvent; 6 | import android.view.WindowManager; 7 | 8 | import cn.edu.ecust.faceaccesscontrol.manage.ActivityCollector; 9 | import cn.edu.ecust.faceaccesscontrol.manage.AllUseAlertDialog; 10 | 11 | /** 12 | * 作为其他Activity的父类使用 13 | * 取消状态栏 14 | * 能弹出退出警告框 15 | * 能对活动进行管理,包括添加一个活动,删除一个活动,删除所有活动 16 | * 2017年5月2日09:55:54 17 | */ 18 | public class ExitDialogActivity extends FullScreenActivity { 19 | 20 | @Override 21 | protected void onCreate(Bundle savedInstanceState) { 22 | super.onCreate(savedInstanceState); 23 | } 24 | 25 | /** 26 | * 按下Android物理按键时触发 27 | * @param keyCode 28 | * @param event 29 | * @return 30 | */ 31 | @Override 32 | public boolean onKeyDown(int keyCode, KeyEvent event) { 33 | if (keyCode == KeyEvent.KEYCODE_BACK){//按下返回键 34 | AllUseAlertDialog.showAlertDialogToExit(this);//弹出警告框 35 | } 36 | return super.onKeyDown(keyCode, event); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /app/src/main/java/cn/edu/ecust/faceaccesscontrol/common/FullScreenActivity.java: -------------------------------------------------------------------------------- 1 | package cn.edu.ecust.faceaccesscontrol.common; 2 | 3 | import android.support.v7.app.AppCompatActivity; 4 | import android.os.Bundle; 5 | import android.view.WindowManager; 6 | 7 | import cn.edu.ecust.faceaccesscontrol.manage.ActivityCollector; 8 | 9 | public class FullScreenActivity extends AppCompatActivity { 10 | 11 | @Override 12 | protected void onCreate(Bundle savedInstanceState) { 13 | super.onCreate(savedInstanceState); 14 | getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);//取消状态栏 15 | ActivityCollector.addActivity(this);//添加当前活动到活动集合管理类中 16 | } 17 | 18 | @Override 19 | protected void onDestroy() { 20 | super.onDestroy(); 21 | ActivityCollector.removeActivity(this);//从活动集合管理类中删除当前活动 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/cn/edu/ecust/faceaccesscontrol/common/Toolbar2Activity.java: -------------------------------------------------------------------------------- 1 | package cn.edu.ecust.faceaccesscontrol.common; 2 | 3 | import android.content.Intent; 4 | import android.support.v4.view.GravityCompat; 5 | import android.support.v4.widget.DrawerLayout; 6 | import android.support.v7.app.AppCompatActivity; 7 | import android.os.Bundle; 8 | import android.support.v7.widget.Toolbar; 9 | import android.view.Menu; 10 | import android.view.MenuItem; 11 | 12 | import cn.edu.ecust.faceaccesscontrol.R; 13 | import cn.edu.ecust.faceaccesscontrol.activity.NoAdminMainActivity; 14 | import cn.edu.ecust.faceaccesscontrol.activity.WelcomeActivity; 15 | 16 | /** 17 | * 作为父类使用 18 | * 继承自ExitDialogActivity 19 | * 布局Toolbar 20 | * Toolbar上添加三个图标按钮 21 | * 添加了对应事件 22 | * 2017年4月21日10:50:46 23 | */ 24 | public class Toolbar2Activity extends ExitDialogActivity { 25 | public DrawerLayout mDrawerLayout;//滑动菜单 26 | 27 | @Override 28 | protected void onCreate(Bundle savedInstanceState) { 29 | super.onCreate(savedInstanceState); 30 | } 31 | 32 | @Override 33 | public boolean onCreateOptionsMenu(Menu menu) { 34 | getMenuInflater().inflate(R.menu.toolbar,menu);//将工具条填充到活动中 35 | return true; 36 | } 37 | 38 | @Override 39 | public boolean onOptionsItemSelected(MenuItem item) { 40 | switch(item.getItemId()){ 41 | case R.id.toolbar_back://点击工具栏上的返回按钮 42 | this.finish(); 43 | break; 44 | case R.id.toolbar_home://点击工具栏上的起始页按钮 45 | //Toast.makeText(this,"Clicked home!",Toast.LENGTH_SHORT).show(); 46 | Intent intent_home=new Intent(Toolbar2Activity.this,WelcomeActivity.class); 47 | startActivity(intent_home); 48 | break; 49 | case R.id.toolbar_tutor://点击工具栏上的帮助按钮 50 | //Toast.makeText(this,"Clicked tutor!",Toast.LENGTH_SHORT).show(); 51 | break; 52 | case android.R.id.home: 53 | mDrawerLayout.openDrawer(GravityCompat.START); 54 | break; 55 | default: 56 | } 57 | return true; 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /app/src/main/java/cn/edu/ecust/faceaccesscontrol/manage/ActivityCollector.java: -------------------------------------------------------------------------------- 1 | package cn.edu.ecust.faceaccesscontrol.manage; 2 | 3 | import android.app.Activity; 4 | import android.support.v7.app.ActionBar; 5 | 6 | import java.util.ArrayList; 7 | import java.util.List; 8 | 9 | /** 10 | * 活动集合管理类 11 | * 添加活动;删除活动;结束所有活动 12 | * 主要用到List存储活动 13 | * Created by CommissarMa on 2017/4/20. 14 | */ 15 | 16 | public class ActivityCollector { 17 | public static List activities=new ArrayList<>(); 18 | 19 | public static void addActivity(Activity activity){ 20 | activities.add(activity); 21 | } 22 | 23 | public static void removeActivity(Activity activity){ 24 | activities.remove(activity); 25 | } 26 | 27 | public static void finishAll(){ 28 | for(Activity activity:activities){ 29 | if(!activity.isFinishing()){ 30 | activity.finish(); 31 | } 32 | } 33 | activities.clear(); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /app/src/main/java/cn/edu/ecust/faceaccesscontrol/manage/MyDatabaseHelper.java: -------------------------------------------------------------------------------- 1 | package cn.edu.ecust.faceaccesscontrol.manage; 2 | 3 | import android.content.Context; 4 | import android.database.sqlite.SQLiteDatabase; 5 | import android.database.sqlite.SQLiteOpenHelper; 6 | import android.widget.Toast; 7 | 8 | /** 9 | * Created by CommissarMa on 2017/4/25. 10 | */ 11 | 12 | public class MyDatabaseHelper extends SQLiteOpenHelper { 13 | 14 | /** 15 | * 创建通知表 16 | */ 17 | public static final String CREATE_NOTICE="create table Notice (" 18 | +"id integer primary key, " 19 | +"noticetext text, " 20 | +"time text)"; 21 | 22 | /** 23 | * 创建用户表 24 | */ 25 | public static final String CREATE_USER="create table User (" 26 | +"no text primary key, " 27 | +"name text, " 28 | +"password text, " 29 | +"cellphone text, " 30 | +"grant text)"; 31 | 32 | /** 33 | * 创建识别记录表 34 | */ 35 | public static final String CREATE_TEST="create table Test (" 36 | +"testname text primary key)"; 37 | 38 | //上下文对象:说明是哪个上下文(活动是其中一种)调用数据库 39 | private Context mContext; 40 | 41 | /** 42 | * 构造方法 43 | */ 44 | public MyDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory,int version){ 45 | super(context,name,factory,version); 46 | mContext=context; 47 | } 48 | 49 | /** 50 | * 当数据库的version不变时,只会在第一次时创建 51 | * @param db 52 | */ 53 | @Override 54 | public void onCreate(SQLiteDatabase db) { 55 | db.execSQL(CREATE_NOTICE); 56 | db.execSQL(CREATE_USER); 57 | db.execSQL(CREATE_TEST); 58 | Toast.makeText(mContext,"创建数据库成功!",Toast.LENGTH_SHORT).show(); 59 | } 60 | 61 | /** 62 | * 数据库的升级方法,当新version大于旧version时被调用 63 | * @param db 64 | * @param oldVersion 65 | * @param newVersion 66 | */ 67 | @Override 68 | public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 69 | 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /app/src/main/java/cn/edu/ecust/faceaccesscontrol/userrecycler/HistoryUserCardAdapter.java: -------------------------------------------------------------------------------- 1 | package cn.edu.ecust.faceaccesscontrol.userrecycler; 2 | 3 | import android.content.Context; 4 | import android.content.Intent; 5 | import android.support.v7.widget.CardView; 6 | import android.support.v7.widget.RecyclerView; 7 | import android.view.LayoutInflater; 8 | import android.view.View; 9 | import android.view.ViewGroup; 10 | import android.widget.ImageView; 11 | import android.widget.TextView; 12 | 13 | import com.bumptech.glide.Glide; 14 | 15 | import java.util.List; 16 | 17 | import cn.edu.ecust.faceaccesscontrol.R; 18 | import cn.edu.ecust.faceaccesscontrol.activity.AdminApproveDetailActivity; 19 | 20 | /** 21 | * Created by Administrator on 2017/5/7. 22 | */ 23 | 24 | public class HistoryUserCardAdapter extends RecyclerView.Adapter { 25 | private Context mContext; 26 | private List mUserCardList; 27 | 28 | static class ViewHolder extends RecyclerView.ViewHolder{ 29 | CardView cardView; 30 | ImageView faceImage; 31 | TextView userNo; 32 | 33 | public ViewHolder(View view){ 34 | super(view); 35 | cardView=(CardView)view; 36 | faceImage=(ImageView)view.findViewById(R.id.usercarditem_imageview_face); 37 | userNo=(TextView)view.findViewById(R.id.usercarditem_textview_userno); 38 | } 39 | } 40 | 41 | public HistoryUserCardAdapter(List userCardList){ 42 | mUserCardList=userCardList; 43 | } 44 | 45 | @Override 46 | public HistoryUserCardAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 47 | if(mContext==null){ 48 | mContext=parent.getContext(); 49 | } 50 | View view= LayoutInflater.from(mContext).inflate(R.layout.usercard_item,parent,false); 51 | final HistoryUserCardAdapter.ViewHolder holder=new HistoryUserCardAdapter.ViewHolder(view); 52 | holder.cardView.setOnClickListener(new View.OnClickListener() { 53 | @Override 54 | public void onClick(View v) { 55 | // int position=holder.getAdapterPosition(); 56 | // UserCard userCard=mUserCardList.get(position); 57 | // //Toast.makeText(v.getContext(),userCard.getStringUserNo(),Toast.LENGTH_SHORT).show(); 58 | // Intent intentAdminApproveDetailActivity=new Intent(v.getContext(), AdminApproveDetailActivity.class); 59 | // intentAdminApproveDetailActivity.putExtra("userNo",userCard.getStringUserNo()); 60 | // mContext.startActivity(intentAdminApproveDetailActivity); 61 | } 62 | }); 63 | return holder; 64 | } 65 | 66 | @Override 67 | public void onBindViewHolder(HistoryUserCardAdapter.ViewHolder holder, int position) { 68 | UserCard userCard=mUserCardList.get(position); 69 | holder.userNo.setText(userCard.getStringUserNo()); 70 | Glide.with(mContext).load(userCard.getStringUserFacePath()).into(holder.faceImage); 71 | } 72 | 73 | @Override 74 | public int getItemCount() { 75 | return mUserCardList.size(); 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /app/src/main/java/cn/edu/ecust/faceaccesscontrol/userrecycler/UserCard.java: -------------------------------------------------------------------------------- 1 | package cn.edu.ecust.faceaccesscontrol.userrecycler; 2 | 3 | /** 4 | * Created by CommissarMa on 2017/5/3. 5 | */ 6 | 7 | public class UserCard { 8 | private String stringUserNo; 9 | private String stringUserFacePath; 10 | 11 | public UserCard(String stringUserNo,String stringUserFacePath){ 12 | this.stringUserNo=stringUserNo; 13 | this.stringUserFacePath=stringUserFacePath; 14 | } 15 | 16 | public String getStringUserNo(){ 17 | return stringUserNo; 18 | } 19 | 20 | public String getStringUserFacePath(){ 21 | return stringUserFacePath; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/cn/edu/ecust/faceaccesscontrol/userrecycler/UserCardAdapter.java: -------------------------------------------------------------------------------- 1 | package cn.edu.ecust.faceaccesscontrol.userrecycler; 2 | 3 | import android.content.ContentValues; 4 | import android.content.Context; 5 | import android.content.Intent; 6 | import android.support.v7.widget.CardView; 7 | import android.support.v7.widget.RecyclerView; 8 | import android.view.LayoutInflater; 9 | import android.view.View; 10 | import android.view.ViewGroup; 11 | import android.widget.ImageView; 12 | import android.widget.TextView; 13 | import android.widget.Toast; 14 | 15 | import com.bumptech.glide.Glide; 16 | 17 | import java.util.List; 18 | 19 | import cn.edu.ecust.faceaccesscontrol.R; 20 | import cn.edu.ecust.faceaccesscontrol.activity.AdminUserDetialActivity; 21 | 22 | /** 23 | * Created by CommissarMa on 2017/5/3. 24 | */ 25 | 26 | public class UserCardAdapter extends RecyclerView.Adapter { 27 | 28 | private Context mContext; 29 | private List mUserCardList; 30 | 31 | static class ViewHolder extends RecyclerView.ViewHolder{ 32 | CardView cardView; 33 | ImageView faceImage; 34 | TextView userNo; 35 | 36 | public ViewHolder(View view){ 37 | super(view); 38 | cardView=(CardView)view; 39 | faceImage=(ImageView)view.findViewById(R.id.usercarditem_imageview_face); 40 | userNo=(TextView)view.findViewById(R.id.usercarditem_textview_userno); 41 | } 42 | } 43 | 44 | public UserCardAdapter(List userCardList){ 45 | mUserCardList=userCardList; 46 | } 47 | 48 | @Override 49 | public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 50 | if(mContext==null){ 51 | mContext=parent.getContext(); 52 | } 53 | View view= LayoutInflater.from(mContext).inflate(R.layout.usercard_item,parent,false); 54 | final ViewHolder holder=new ViewHolder(view); 55 | holder.cardView.setOnClickListener(new View.OnClickListener() { 56 | @Override 57 | public void onClick(View v) { 58 | int position=holder.getAdapterPosition(); 59 | UserCard userCard=mUserCardList.get(position); 60 | //Toast.makeText(v.getContext(),userCard.getStringUserNo(),Toast.LENGTH_SHORT).show(); 61 | Intent intentAdminUserDetialActivity=new Intent(v.getContext(), AdminUserDetialActivity.class); 62 | intentAdminUserDetialActivity.putExtra("userNo",userCard.getStringUserNo()); 63 | mContext.startActivity(intentAdminUserDetialActivity); 64 | } 65 | }); 66 | return holder; 67 | } 68 | 69 | @Override 70 | public void onBindViewHolder(ViewHolder holder, int position) { 71 | UserCard userCard=mUserCardList.get(position); 72 | holder.userNo.setText(userCard.getStringUserNo()); 73 | Glide.with(mContext).load(userCard.getStringUserFacePath()).into(holder.faceImage); 74 | } 75 | 76 | @Override 77 | public int getItemCount() { 78 | return mUserCardList.size(); 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/app_faceicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommissarMa/FaceAccessControl/95cfeb5f76918cb64eb01609e22ea4fc71a52b1f/app/src/main/res/drawable/app_faceicon.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_admin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommissarMa/FaceAccessControl/95cfeb5f76918cb64eb01609e22ea4fc71a52b1f/app/src/main/res/drawable/ic_admin.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommissarMa/FaceAccessControl/95cfeb5f76918cb64eb01609e22ea4fc71a52b1f/app/src/main/res/drawable/ic_back.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommissarMa/FaceAccessControl/95cfeb5f76918cb64eb01609e22ea4fc71a52b1f/app/src/main/res/drawable/ic_close.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommissarMa/FaceAccessControl/95cfeb5f76918cb64eb01609e22ea4fc71a52b1f/app/src/main/res/drawable/ic_delete.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_failure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommissarMa/FaceAccessControl/95cfeb5f76918cb64eb01609e22ea4fc71a52b1f/app/src/main/res/drawable/ic_failure.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommissarMa/FaceAccessControl/95cfeb5f76918cb64eb01609e22ea4fc71a52b1f/app/src/main/res/drawable/ic_home.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommissarMa/FaceAccessControl/95cfeb5f76918cb64eb01609e22ea4fc71a52b1f/app/src/main/res/drawable/ic_menu.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_ok.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommissarMa/FaceAccessControl/95cfeb5f76918cb64eb01609e22ea4fc71a52b1f/app/src/main/res/drawable/ic_ok.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_refuse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommissarMa/FaceAccessControl/95cfeb5f76918cb64eb01609e22ea4fc71a52b1f/app/src/main/res/drawable/ic_refuse.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_success.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommissarMa/FaceAccessControl/95cfeb5f76918cb64eb01609e22ea4fc71a52b1f/app/src/main/res/drawable/ic_success.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_tutor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommissarMa/FaceAccessControl/95cfeb5f76918cb64eb01609e22ea4fc71a52b1f/app/src/main/res/drawable/ic_tutor.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/nav_call.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommissarMa/FaceAccessControl/95cfeb5f76918cb64eb01609e22ea4fc71a52b1f/app/src/main/res/drawable/nav_call.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/nav_close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommissarMa/FaceAccessControl/95cfeb5f76918cb64eb01609e22ea4fc71a52b1f/app/src/main/res/drawable/nav_close.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/nav_config.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommissarMa/FaceAccessControl/95cfeb5f76918cb64eb01609e22ea4fc71a52b1f/app/src/main/res/drawable/nav_config.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/nav_icon.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommissarMa/FaceAccessControl/95cfeb5f76918cb64eb01609e22ea4fc71a52b1f/app/src/main/res/drawable/nav_icon.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable/nav_location.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommissarMa/FaceAccessControl/95cfeb5f76918cb64eb01609e22ea4fc71a52b1f/app/src/main/res/drawable/nav_location.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/nav_mail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommissarMa/FaceAccessControl/95cfeb5f76918cb64eb01609e22ea4fc71a52b1f/app/src/main/res/drawable/nav_mail.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/noadminmainactivity_button_adminlogin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommissarMa/FaceAccessControl/95cfeb5f76918cb64eb01609e22ea4fc71a52b1f/app/src/main/res/drawable/noadminmainactivity_button_adminlogin.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/noadminmainactivity_button_recognize.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommissarMa/FaceAccessControl/95cfeb5f76918cb64eb01609e22ea4fc71a52b1f/app/src/main/res/drawable/noadminmainactivity_button_recognize.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/noadminmainactivity_button_register.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommissarMa/FaceAccessControl/95cfeb5f76918cb64eb01609e22ea4fc71a52b1f/app/src/main/res/drawable/noadminmainactivity_button_register.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/welcomeactivity_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommissarMa/FaceAccessControl/95cfeb5f76918cb64eb01609e22ea4fc71a52b1f/app/src/main/res/drawable/welcomeactivity_background.png -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_admin_notice.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 19 | 20 | 26 | 27 | 32 | 33 | 41 | 42 |