├── README.md ├── facemesh.gif ├── facemesh.onnx ├── ncnn-android-scrfd-master ├── README.md ├── app │ ├── build.gradle │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── assets │ │ ├── facemesh-op.bin │ │ ├── facemesh-op.param │ │ ├── facemesh-op2.bin │ │ ├── facemesh-op2.param │ │ ├── faceseg-op.bin │ │ ├── faceseg-op.param │ │ ├── scrfd_1g-opt2.bin │ │ ├── scrfd_1g-opt2.param │ │ ├── scrfd_500m-opt2.bin │ │ └── scrfd_500m-opt2.param │ │ ├── java │ │ └── com │ │ │ └── tencent │ │ │ └── scrfdncnn │ │ │ ├── MainActivity.java │ │ │ └── SCRFDNcnn.java │ │ ├── jni │ │ ├── CMakeLists.txt │ │ ├── ndkcamera.cpp │ │ ├── ndkcamera.h │ │ ├── scrfd.cpp │ │ ├── scrfd.h │ │ └── scrfdncnn.cpp │ │ └── res │ │ ├── layout │ │ └── main.xml │ │ └── values │ │ └── strings.xml ├── build.gradle ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── local.properties ├── screenshot.jpg └── settings.gradle ├── ncnn-android-yolov5_face ├── app │ ├── build.gradle │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── assets │ │ ├── yolov5n-0.5.bin │ │ ├── yolov5n-0.5.param │ │ ├── yolov5n.bin │ │ └── yolov5n.param │ │ ├── java │ │ └── com │ │ │ └── tencent │ │ │ └── ncnnyoloface │ │ │ ├── MainActivity.java │ │ │ └── NcnnYoloFace.java │ │ ├── jni │ │ ├── CMakeLists.txt │ │ ├── ndkcamera.cpp │ │ ├── ndkcamera.h │ │ ├── yoloface.cpp │ │ ├── yoloface.h │ │ └── yolofacencnn.cpp │ │ └── res │ │ ├── layout │ │ └── main.xml │ │ └── values │ │ └── strings.xml ├── build.gradle ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── local.properties └── settings.gradle ├── ncnn-android-yolov7_face ├── app │ ├── build.gradle │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── assets │ │ ├── yolov7-lite-e.bin │ │ ├── yolov7-lite-e.param │ │ ├── yolov7-tiny.bin │ │ └── yolov7-tiny.param │ │ ├── java │ │ └── com │ │ │ └── tencent │ │ │ └── ncnnyoloface │ │ │ ├── MainActivity.java │ │ │ └── NcnnYoloFace.java │ │ ├── jni │ │ ├── CMakeLists.txt │ │ ├── ndkcamera.cpp │ │ ├── ndkcamera.h │ │ ├── yoloface.cpp │ │ ├── yoloface.h │ │ └── yolofacencnn.cpp │ │ └── res │ │ ├── layout │ │ └── main.xml │ │ └── values │ │ └── strings.xml ├── build.gradle ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── local.properties └── settings.gradle ├── result.gif ├── yolov5-face.gif └── yolov7-tiny-face.png /README.md: -------------------------------------------------------------------------------- 1 | # ncnn_Android_face 2 | Face detect and segmentation, facemesh by ncnn 3 | 4 | ## model support: 5 | 1.scrfd 6 | 2.yolov5-face 7 | 3.yolov7-face 8 | 9 | ## A new mediapipe-blazeface demo in this place [new demo](https://github.com/FeiGeChuanShu/ncnn_Android_blazeface) 10 | ![image](https://github.com/FeiGeChuanShu/ncnn_Android_face/blob/main/yolov7-tiny-face.png)![image](https://github.com/FeiGeChuanShu/ncnn_Android_face/blob/main/result.gif)![image](https://github.com/FeiGeChuanShu/ncnn_Android_face/blob/main/facemesh.gif)![image](https://github.com/FeiGeChuanShu/ncnn_Android_face/blob/main/yolov5-face.gif) 11 | 12 | ## Reference: 13 | https://github.com/nihui/ncnn-android-scrfd 14 | https://github.com/deepcam-cn/yolov5-face 15 | https://github.com/Tencent/ncnn 16 | https://github.com/thepowerfuldeez/facemesh.pytorch 17 | https://github.com/derronqi/yolov7-face 18 | -------------------------------------------------------------------------------- /facemesh.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FeiGeChuanShu/ncnn_Android_face/83ecdf198aeb8073450238977a52695eab17cf51/facemesh.gif -------------------------------------------------------------------------------- /facemesh.onnx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FeiGeChuanShu/ncnn_Android_face/83ecdf198aeb8073450238977a52695eab17cf51/facemesh.onnx -------------------------------------------------------------------------------- /ncnn-android-scrfd-master/README.md: -------------------------------------------------------------------------------- 1 | # ncnn-android-scrfd 2 | 3 | The SCRFD face detection 4 | 5 | This is a sample ncnn android project, it depends on ncnn library and opencv 6 | 7 | https://github.com/Tencent/ncnn 8 | 9 | https://github.com/nihui/opencv-mobile 10 | 11 | ## android apk file download 12 | https://github.com/nihui/ncnn-android-scrfd/releases/download/v1/com.tencent.scrfdncnn-release.apk 13 | 14 | ## how to build and run 15 | ### step1 16 | https://github.com/Tencent/ncnn/releases 17 | 18 | * Download ncnn-YYYYMMDD-android-vulkan.zip or build ncnn for android yourself 19 | * Extract ncnn-YYYYMMDD-android-vulkan.zip into **app/src/main/jni** and change the **ncnn_DIR** path to yours in **app/src/main/jni/CMakeLists.txt** 20 | 21 | ### step2 22 | https://github.com/nihui/opencv-mobile 23 | 24 | * Download opencv-mobile-XYZ-android.zip 25 | * Extract opencv-mobile-XYZ-android.zip into **app/src/main/jni** and change the **OpenCV_DIR** path to yours in **app/src/main/jni/CMakeLists.txt** 26 | 27 | ### step3 28 | * Open this project with Android Studio, build it and enjoy! 29 | 30 | ## some notes 31 | * Android ndk camera is used for best efficiency 32 | * Crash may happen on very old devices for lacking HAL3 camera interface 33 | * All models are manually modified to accept dynamic input shape 34 | * Most small models run slower on GPU than on CPU, this is common 35 | * FPS may be lower in dark environment because of longer camera exposure time 36 | 37 | ## screenshot 38 | ![](screenshot.jpg) 39 | 40 | -------------------------------------------------------------------------------- /ncnn-android-scrfd-master/app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 24 5 | buildToolsVersion "29.0.2" 6 | 7 | defaultConfig { 8 | applicationId "com.tencent.scrfdncnn" 9 | archivesBaseName = "$applicationId" 10 | 11 | minSdkVersion 24 12 | } 13 | 14 | externalNativeBuild { 15 | cmake { 16 | version "3.10.2" 17 | path file('src/main/jni/CMakeLists.txt') 18 | } 19 | } 20 | 21 | dependencies { 22 | implementation 'com.android.support:support-v4:24.0.0' 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /ncnn-android-scrfd-master/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 10 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /ncnn-android-scrfd-master/app/src/main/assets/facemesh-op.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FeiGeChuanShu/ncnn_Android_face/83ecdf198aeb8073450238977a52695eab17cf51/ncnn-android-scrfd-master/app/src/main/assets/facemesh-op.bin -------------------------------------------------------------------------------- /ncnn-android-scrfd-master/app/src/main/assets/facemesh-op.param: -------------------------------------------------------------------------------- 1 | 7767517 2 | 123 144 3 | Input input.1 0 1 input.1 4 | MemoryData 200 0 1 200 0=1 5 | MemoryData 264 0 1 264 0=1 6 | MemoryData 328 0 1 328 0=1 7 | Padding Pad_13 1 1 input.1 136 0=1 1=0 2=1 3=0 4=2 5=0.000000e+00 7=0 8=0 8 | Convolution Conv_17 1 1 136 140 0=16 1=3 11=3 2=1 12=1 3=2 13=2 4=0 14=0 15=0 16=0 5=1 6=432 9 | PReLU PRelu_18 1 1 140 142 0=16 10 | Split splitncnn_0 1 2 142 142_splitncnn_0 142_splitncnn_1 11 | ConvolutionDepthWise Conv_19 1 1 142_splitncnn_1 143 0=16 1=3 11=3 2=1 12=1 3=1 13=1 4=1 14=1 15=1 16=1 5=1 6=144 7=16 12 | Convolution Conv_20 1 1 143 144 0=16 1=1 11=1 2=1 12=1 3=1 13=1 4=0 14=0 15=0 16=0 5=1 6=256 13 | BinaryOp Add_21 2 1 144 142_splitncnn_0 145 0=0 14 | PReLU PRelu_22 1 1 145 147 0=16 15 | Split splitncnn_1 1 2 147 147_splitncnn_0 147_splitncnn_1 16 | ConvolutionDepthWise Conv_23 1 1 147_splitncnn_1 148 0=16 1=3 11=3 2=1 12=1 3=1 13=1 4=1 14=1 15=1 16=1 5=1 6=144 7=16 17 | Convolution Conv_24 1 1 148 149 0=16 1=1 11=1 2=1 12=1 3=1 13=1 4=0 14=0 15=0 16=0 5=1 6=256 18 | BinaryOp Add_25 2 1 149 147_splitncnn_0 150 0=0 19 | PReLU PRelu_26 1 1 150 152 0=16 20 | Split splitncnn_2 1 2 152 152_splitncnn_0 152_splitncnn_1 21 | Pooling MaxPool_42 1 1 152_splitncnn_1 177 0=0 1=2 11=2 2=2 12=2 3=0 13=0 14=0 15=0 5=1 22 | Padding Pad_57 2 1 177 200 201 0=0 1=0 2=0 3=0 4=0 5=0.000000e+00 7=0 8=16 23 | ConvolutionDepthWise Conv_58 1 1 152_splitncnn_0 202 0=16 1=3 11=3 2=1 12=1 3=2 13=2 4=0 14=0 15=2 16=2 5=1 6=144 7=16 24 | Convolution Conv_59 1 1 202 203 0=32 1=1 11=1 2=1 12=1 3=1 13=1 4=0 14=0 15=0 16=0 5=1 6=512 25 | BinaryOp Add_60 2 1 203 201 204 0=0 26 | PReLU PRelu_61 1 1 204 206 0=32 27 | Split splitncnn_3 1 2 206 206_splitncnn_0 206_splitncnn_1 28 | ConvolutionDepthWise Conv_62 1 1 206_splitncnn_1 207 0=32 1=3 11=3 2=1 12=1 3=1 13=1 4=1 14=1 15=1 16=1 5=1 6=288 7=32 29 | Convolution Conv_63 1 1 207 208 0=32 1=1 11=1 2=1 12=1 3=1 13=1 4=0 14=0 15=0 16=0 5=1 6=1024 30 | BinaryOp Add_64 2 1 208 206_splitncnn_0 209 0=0 31 | PReLU PRelu_65 1 1 209 211 0=32 32 | Split splitncnn_4 1 2 211 211_splitncnn_0 211_splitncnn_1 33 | ConvolutionDepthWise Conv_66 1 1 211_splitncnn_1 212 0=32 1=3 11=3 2=1 12=1 3=1 13=1 4=1 14=1 15=1 16=1 5=1 6=288 7=32 34 | Convolution Conv_67 1 1 212 213 0=32 1=1 11=1 2=1 12=1 3=1 13=1 4=0 14=0 15=0 16=0 5=1 6=1024 35 | BinaryOp Add_68 2 1 213 211_splitncnn_0 214 0=0 36 | PReLU PRelu_69 1 1 214 216 0=32 37 | Split splitncnn_5 1 2 216 216_splitncnn_0 216_splitncnn_1 38 | Pooling MaxPool_85 1 1 216_splitncnn_1 241 0=0 1=2 11=2 2=2 12=2 3=0 13=0 14=0 15=0 5=1 39 | Padding Pad_100 2 1 241 264 265 0=0 1=0 2=0 3=0 4=0 5=0.000000e+00 7=0 8=32 40 | ConvolutionDepthWise Conv_101 1 1 216_splitncnn_0 266 0=32 1=3 11=3 2=1 12=1 3=2 13=2 4=0 14=0 15=2 16=2 5=1 6=288 7=32 41 | Convolution Conv_102 1 1 266 267 0=64 1=1 11=1 2=1 12=1 3=1 13=1 4=0 14=0 15=0 16=0 5=1 6=2048 42 | BinaryOp Add_103 2 1 267 265 268 0=0 43 | PReLU PRelu_104 1 1 268 270 0=64 44 | Split splitncnn_6 1 2 270 270_splitncnn_0 270_splitncnn_1 45 | ConvolutionDepthWise Conv_105 1 1 270_splitncnn_1 271 0=64 1=3 11=3 2=1 12=1 3=1 13=1 4=1 14=1 15=1 16=1 5=1 6=576 7=64 46 | Convolution Conv_106 1 1 271 272 0=64 1=1 11=1 2=1 12=1 3=1 13=1 4=0 14=0 15=0 16=0 5=1 6=4096 47 | BinaryOp Add_107 2 1 272 270_splitncnn_0 273 0=0 48 | PReLU PRelu_108 1 1 273 275 0=64 49 | Split splitncnn_7 1 2 275 275_splitncnn_0 275_splitncnn_1 50 | ConvolutionDepthWise Conv_109 1 1 275_splitncnn_1 276 0=64 1=3 11=3 2=1 12=1 3=1 13=1 4=1 14=1 15=1 16=1 5=1 6=576 7=64 51 | Convolution Conv_110 1 1 276 277 0=64 1=1 11=1 2=1 12=1 3=1 13=1 4=0 14=0 15=0 16=0 5=1 6=4096 52 | BinaryOp Add_111 2 1 277 275_splitncnn_0 278 0=0 53 | PReLU PRelu_112 1 1 278 280 0=64 54 | Split splitncnn_8 1 2 280 280_splitncnn_0 280_splitncnn_1 55 | Pooling MaxPool_128 1 1 280_splitncnn_1 305 0=0 1=2 11=2 2=2 12=2 3=0 13=0 14=0 15=0 5=1 56 | Padding Pad_143 2 1 305 328 329 0=0 1=0 2=0 3=0 4=0 5=0.000000e+00 7=0 8=64 57 | ConvolutionDepthWise Conv_144 1 1 280_splitncnn_0 330 0=64 1=3 11=3 2=1 12=1 3=2 13=2 4=0 14=0 15=2 16=2 5=1 6=576 7=64 58 | Convolution Conv_145 1 1 330 331 0=128 1=1 11=1 2=1 12=1 3=1 13=1 4=0 14=0 15=0 16=0 5=1 6=8192 59 | BinaryOp Add_146 2 1 331 329 332 0=0 60 | PReLU PRelu_147 1 1 332 334 0=128 61 | Split splitncnn_9 1 2 334 334_splitncnn_0 334_splitncnn_1 62 | ConvolutionDepthWise Conv_148 1 1 334_splitncnn_1 335 0=128 1=3 11=3 2=1 12=1 3=1 13=1 4=1 14=1 15=1 16=1 5=1 6=1152 7=128 63 | Convolution Conv_149 1 1 335 336 0=128 1=1 11=1 2=1 12=1 3=1 13=1 4=0 14=0 15=0 16=0 5=1 6=16384 64 | BinaryOp Add_150 2 1 336 334_splitncnn_0 337 0=0 65 | PReLU PRelu_151 1 1 337 339 0=128 66 | Split splitncnn_10 1 2 339 339_splitncnn_0 339_splitncnn_1 67 | ConvolutionDepthWise Conv_152 1 1 339_splitncnn_1 340 0=128 1=3 11=3 2=1 12=1 3=1 13=1 4=1 14=1 15=1 16=1 5=1 6=1152 7=128 68 | Convolution Conv_153 1 1 340 341 0=128 1=1 11=1 2=1 12=1 3=1 13=1 4=0 14=0 15=0 16=0 5=1 6=16384 69 | BinaryOp Add_154 2 1 341 339_splitncnn_0 342 0=0 70 | PReLU PRelu_155 1 1 342 344 0=128 71 | Split splitncnn_11 1 2 344 344_splitncnn_0 344_splitncnn_1 72 | Pooling MaxPool_171 1 1 344_splitncnn_1 369 0=0 1=2 11=2 2=2 12=2 3=0 13=0 14=0 15=0 5=1 73 | ConvolutionDepthWise Conv_172 1 1 344_splitncnn_0 370 0=128 1=3 11=3 2=1 12=1 3=2 13=2 4=0 14=0 15=2 16=2 5=1 6=1152 7=128 74 | Convolution Conv_173 1 1 370 371 0=128 1=1 11=1 2=1 12=1 3=1 13=1 4=0 14=0 15=0 16=0 5=1 6=16384 75 | BinaryOp Add_174 2 1 371 369 372 0=0 76 | PReLU PRelu_175 1 1 372 374 0=128 77 | Split splitncnn_12 1 2 374 374_splitncnn_0 374_splitncnn_1 78 | ConvolutionDepthWise Conv_176 1 1 374_splitncnn_1 375 0=128 1=3 11=3 2=1 12=1 3=1 13=1 4=1 14=1 15=1 16=1 5=1 6=1152 7=128 79 | Convolution Conv_177 1 1 375 376 0=128 1=1 11=1 2=1 12=1 3=1 13=1 4=0 14=0 15=0 16=0 5=1 6=16384 80 | BinaryOp Add_178 2 1 376 374_splitncnn_0 377 0=0 81 | PReLU PRelu_179 1 1 377 379 0=128 82 | Split splitncnn_13 1 2 379 379_splitncnn_0 379_splitncnn_1 83 | ConvolutionDepthWise Conv_180 1 1 379_splitncnn_1 380 0=128 1=3 11=3 2=1 12=1 3=1 13=1 4=1 14=1 15=1 16=1 5=1 6=1152 7=128 84 | Convolution Conv_181 1 1 380 381 0=128 1=1 11=1 2=1 12=1 3=1 13=1 4=0 14=0 15=0 16=0 5=1 6=16384 85 | BinaryOp Add_182 2 1 381 379_splitncnn_0 382 0=0 86 | PReLU PRelu_183 1 1 382 384 0=128 87 | Split splitncnn_14 1 4 384 384_splitncnn_0 384_splitncnn_1 384_splitncnn_2 384_splitncnn_3 88 | Pooling MaxPool_199 1 1 384_splitncnn_3 409 0=0 1=2 11=2 2=2 12=2 3=0 13=0 14=0 15=0 5=1 89 | ConvolutionDepthWise Conv_200 1 1 384_splitncnn_2 410 0=128 1=3 11=3 2=1 12=1 3=2 13=2 4=0 14=0 15=2 16=2 5=1 6=1152 7=128 90 | Convolution Conv_201 1 1 410 411 0=128 1=1 11=1 2=1 12=1 3=1 13=1 4=0 14=0 15=0 16=0 5=1 6=16384 91 | BinaryOp Add_202 2 1 411 409 412 0=0 92 | PReLU PRelu_203 1 1 412 414 0=128 93 | Convolution Conv_204 1 1 414 415 0=32 1=1 11=1 2=1 12=1 3=1 13=1 4=0 14=0 15=0 16=0 5=1 6=4096 94 | PReLU PRelu_205 1 1 415 417 0=32 95 | Split splitncnn_15 1 2 417 417_splitncnn_0 417_splitncnn_1 96 | ConvolutionDepthWise Conv_206 1 1 417_splitncnn_1 418 0=32 1=3 11=3 2=1 12=1 3=1 13=1 4=1 14=1 15=1 16=1 5=1 6=288 7=32 97 | Convolution Conv_207 1 1 418 419 0=32 1=1 11=1 2=1 12=1 3=1 13=1 4=0 14=0 15=0 16=0 5=1 6=1024 98 | BinaryOp Add_208 2 1 419 417_splitncnn_0 420 0=0 99 | PReLU PRelu_209 1 1 420 422 0=32 100 | Convolution Conv_210 1 1 422 423 0=1 1=3 11=3 2=1 12=1 3=1 13=1 4=0 14=0 15=0 16=0 5=1 6=288 101 | Reshape Reshape_213 1 1 423 428 0=-1 102 | Pooling MaxPool_229 1 1 384_splitncnn_1 453 0=0 1=2 11=2 2=2 12=2 3=0 13=0 14=0 15=0 5=1 103 | ConvolutionDepthWise Conv_230 1 1 384_splitncnn_0 454 0=128 1=3 11=3 2=1 12=1 3=2 13=2 4=0 14=0 15=2 16=2 5=1 6=1152 7=128 104 | Convolution Conv_231 1 1 454 455 0=128 1=1 11=1 2=1 12=1 3=1 13=1 4=0 14=0 15=0 16=0 5=1 6=16384 105 | BinaryOp Add_232 2 1 455 453 456 0=0 106 | PReLU PRelu_233 1 1 456 458 0=128 107 | Split splitncnn_16 1 2 458 458_splitncnn_0 458_splitncnn_1 108 | ConvolutionDepthWise Conv_234 1 1 458_splitncnn_1 459 0=128 1=3 11=3 2=1 12=1 3=1 13=1 4=1 14=1 15=1 16=1 5=1 6=1152 7=128 109 | Convolution Conv_235 1 1 459 460 0=128 1=1 11=1 2=1 12=1 3=1 13=1 4=0 14=0 15=0 16=0 5=1 6=16384 110 | BinaryOp Add_236 2 1 460 458_splitncnn_0 461 0=0 111 | PReLU PRelu_237 1 1 461 463 0=128 112 | Split splitncnn_17 1 2 463 463_splitncnn_0 463_splitncnn_1 113 | ConvolutionDepthWise Conv_238 1 1 463_splitncnn_1 464 0=128 1=3 11=3 2=1 12=1 3=1 13=1 4=1 14=1 15=1 16=1 5=1 6=1152 7=128 114 | Convolution Conv_239 1 1 464 465 0=128 1=1 11=1 2=1 12=1 3=1 13=1 4=0 14=0 15=0 16=0 5=1 6=16384 115 | BinaryOp Add_240 2 1 465 463_splitncnn_0 466 0=0 116 | PReLU PRelu_241 1 1 466 468 0=128 117 | Convolution Conv_242 1 1 468 469 0=32 1=1 11=1 2=1 12=1 3=1 13=1 4=0 14=0 15=0 16=0 5=1 6=4096 118 | PReLU PRelu_243 1 1 469 471 0=32 119 | Split splitncnn_18 1 2 471 471_splitncnn_0 471_splitncnn_1 120 | ConvolutionDepthWise Conv_244 1 1 471_splitncnn_1 472 0=32 1=3 11=3 2=1 12=1 3=1 13=1 4=1 14=1 15=1 16=1 5=1 6=288 7=32 121 | Convolution Conv_245 1 1 472 473 0=32 1=1 11=1 2=1 12=1 3=1 13=1 4=0 14=0 15=0 16=0 5=1 6=1024 122 | BinaryOp Add_246 2 1 473 471_splitncnn_0 474 0=0 123 | PReLU PRelu_247 1 1 474 476 0=32 124 | Convolution Conv_248 1 1 476 477 0=1404 1=3 11=3 2=1 12=1 3=1 13=1 4=0 14=0 15=0 16=0 5=1 6=404352 125 | Reshape Reshape_251 1 1 477 482 0=-1 126 | -------------------------------------------------------------------------------- /ncnn-android-scrfd-master/app/src/main/assets/facemesh-op2.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FeiGeChuanShu/ncnn_Android_face/83ecdf198aeb8073450238977a52695eab17cf51/ncnn-android-scrfd-master/app/src/main/assets/facemesh-op2.bin -------------------------------------------------------------------------------- /ncnn-android-scrfd-master/app/src/main/assets/facemesh-op2.param: -------------------------------------------------------------------------------- 1 | 7767517 2 | 166 206 3 | Input input 0 1 input 4 | Convolution 550 1 1 input 552 0=16 1=3 3=2 4=1 5=1 6=432 9=1 5 | Split splitncnn_0 1 2 552 552_splitncnn_0 552_splitncnn_1 6 | Convolution 553 1 1 552_splitncnn_1 555 0=8 1=1 5=1 6=128 9=1 7 | Split splitncnn_1 1 2 555 555_splitncnn_0 555_splitncnn_1 8 | ConvolutionDepthWise 556 1 1 555_splitncnn_1 558 0=8 1=3 4=1 5=1 6=72 7=8 9=1 9 | Concat 559 2 1 555_splitncnn_0 558 559 10 | Convolution 560 1 1 559 561 0=8 1=1 5=1 6=128 11 | Split splitncnn_2 1 2 561 561_splitncnn_0 561_splitncnn_1 12 | ConvolutionDepthWise 562 1 1 561_splitncnn_1 563 0=8 1=3 4=1 5=1 6=72 7=8 13 | Concat 564 2 1 561_splitncnn_0 563 564 14 | BinaryOp 565 2 1 564 552_splitncnn_0 565 15 | Split splitncnn_3 1 2 565 565_splitncnn_0 565_splitncnn_1 16 | Convolution 566 1 1 565_splitncnn_1 568 0=24 1=1 5=1 6=384 9=1 17 | Split splitncnn_4 1 2 568 568_splitncnn_0 568_splitncnn_1 18 | ConvolutionDepthWise 569 1 1 568_splitncnn_1 571 0=24 1=3 4=1 5=1 6=216 7=24 9=1 19 | Concat 572 2 1 568_splitncnn_0 571 572 20 | ConvolutionDepthWise 573 1 1 572 574 0=48 1=3 3=2 4=1 5=1 6=432 7=48 21 | Convolution 575 1 1 574 576 0=12 1=1 5=1 6=576 22 | Split splitncnn_5 1 2 576 576_splitncnn_0 576_splitncnn_1 23 | ConvolutionDepthWise 577 1 1 576_splitncnn_1 578 0=12 1=3 4=1 5=1 6=108 7=12 24 | Concat 579 2 1 576_splitncnn_0 578 579 25 | ConvolutionDepthWise 580 1 1 565_splitncnn_0 581 0=16 1=3 3=2 4=1 5=1 6=144 7=16 26 | Convolution 582 1 1 581 583 0=24 1=1 5=1 6=384 27 | BinaryOp 584 2 1 579 583 584 28 | Split splitncnn_6 1 2 584 584_splitncnn_0 584_splitncnn_1 29 | Convolution 585 1 1 584_splitncnn_1 587 0=36 1=1 5=1 6=864 9=1 30 | Split splitncnn_7 1 2 587 587_splitncnn_0 587_splitncnn_1 31 | ConvolutionDepthWise 588 1 1 587_splitncnn_1 590 0=36 1=3 4=1 5=1 6=324 7=36 9=1 32 | Concat 591 2 1 587_splitncnn_0 590 591 33 | Convolution 592 1 1 591 593 0=12 1=1 5=1 6=864 34 | Split splitncnn_8 1 2 593 593_splitncnn_0 593_splitncnn_1 35 | ConvolutionDepthWise 594 1 1 593_splitncnn_1 595 0=12 1=3 4=1 5=1 6=108 7=12 36 | Concat 596 2 1 593_splitncnn_0 595 596 37 | BinaryOp 597 2 1 596 584_splitncnn_0 597 38 | Split splitncnn_9 1 2 597 597_splitncnn_0 597_splitncnn_1 39 | Convolution 598 1 1 597_splitncnn_1 600 0=36 1=1 5=1 6=864 9=1 40 | Split splitncnn_10 1 2 600 600_splitncnn_0 600_splitncnn_1 41 | ConvolutionDepthWise 601 1 1 600_splitncnn_1 603 0=36 1=3 4=1 5=1 6=324 7=36 9=1 42 | Concat 604 2 1 600_splitncnn_0 603 604 43 | ConvolutionDepthWise 605 1 1 604 606 0=72 1=5 3=2 4=2 5=1 6=1800 7=72 44 | Split splitncnn_11 1 2 606 606_splitncnn_0 606_splitncnn_1 45 | Pooling 607 1 1 606_splitncnn_1 607 0=1 4=1 46 | InnerProduct 608 1 1 607 609 0=20 1=1 2=1440 9=1 47 | InnerProduct 610 1 1 609 610 0=72 1=1 2=1440 48 | HardSigmoid 615 1 1 610 615 0=1.666667e-01 49 | BinaryOp 616 2 1 606_splitncnn_0 615 616 0=2 50 | Convolution 617 1 1 616 618 0=20 1=1 5=1 6=1440 51 | Split splitncnn_12 1 2 618 618_splitncnn_0 618_splitncnn_1 52 | ConvolutionDepthWise 619 1 1 618_splitncnn_1 620 0=20 1=3 4=1 5=1 6=180 7=20 53 | Concat 621 2 1 618_splitncnn_0 620 621 54 | ConvolutionDepthWise 622 1 1 597_splitncnn_0 623 0=24 1=5 3=2 4=2 5=1 6=600 7=24 55 | Convolution 624 1 1 623 625 0=40 1=1 5=1 6=960 56 | BinaryOp 626 2 1 621 625 626 57 | Split splitncnn_13 1 2 626 626_splitncnn_0 626_splitncnn_1 58 | Convolution 627 1 1 626_splitncnn_1 629 0=60 1=1 5=1 6=2400 9=1 59 | Split splitncnn_14 1 2 629 629_splitncnn_0 629_splitncnn_1 60 | ConvolutionDepthWise 630 1 1 629_splitncnn_1 632 0=60 1=3 4=1 5=1 6=540 7=60 9=1 61 | Concat 633 2 1 629_splitncnn_0 632 633 62 | Split splitncnn_15 1 2 633 633_splitncnn_0 633_splitncnn_1 63 | Pooling 634 1 1 633_splitncnn_1 634 0=1 4=1 64 | InnerProduct 635 1 1 634 636 0=32 1=1 2=3840 9=1 65 | InnerProduct 637 1 1 636 637 0=120 1=1 2=3840 66 | HardSigmoid 642 1 1 637 642 0=1.666667e-01 67 | BinaryOp 643 2 1 633_splitncnn_0 642 643 0=2 68 | Convolution 644 1 1 643 645 0=20 1=1 5=1 6=2400 69 | Split splitncnn_16 1 2 645 645_splitncnn_0 645_splitncnn_1 70 | ConvolutionDepthWise 646 1 1 645_splitncnn_1 647 0=20 1=3 4=1 5=1 6=180 7=20 71 | Concat 648 2 1 645_splitncnn_0 647 648 72 | BinaryOp 649 2 1 648 626_splitncnn_0 649 73 | Split splitncnn_17 1 2 649 649_splitncnn_0 649_splitncnn_1 74 | Convolution 650 1 1 649_splitncnn_1 652 0=120 1=1 5=1 6=4800 9=1 75 | Split splitncnn_18 1 2 652 652_splitncnn_0 652_splitncnn_1 76 | ConvolutionDepthWise 653 1 1 652_splitncnn_1 655 0=120 1=3 4=1 5=1 6=1080 7=120 9=1 77 | Concat 656 2 1 652_splitncnn_0 655 656 78 | ConvolutionDepthWise 657 1 1 656 658 0=240 1=3 3=2 4=1 5=1 6=2160 7=240 79 | Convolution 659 1 1 658 660 0=40 1=1 5=1 6=9600 80 | Split splitncnn_19 1 2 660 660_splitncnn_0 660_splitncnn_1 81 | ConvolutionDepthWise 661 1 1 660_splitncnn_1 662 0=40 1=3 4=1 5=1 6=360 7=40 82 | Concat 663 2 1 660_splitncnn_0 662 663 83 | ConvolutionDepthWise 664 1 1 649_splitncnn_0 665 0=40 1=3 3=2 4=1 5=1 6=360 7=40 84 | Convolution 666 1 1 665 667 0=80 1=1 5=1 6=3200 85 | BinaryOp 668 2 1 663 667 668 86 | Split splitncnn_20 1 2 668 668_splitncnn_0 668_splitncnn_1 87 | Convolution 669 1 1 668_splitncnn_1 671 0=100 1=1 5=1 6=8000 9=1 88 | Split splitncnn_21 1 2 671 671_splitncnn_0 671_splitncnn_1 89 | ConvolutionDepthWise 672 1 1 671_splitncnn_1 674 0=100 1=3 4=1 5=1 6=900 7=100 9=1 90 | Concat 675 2 1 671_splitncnn_0 674 675 91 | Convolution 676 1 1 675 677 0=40 1=1 5=1 6=8000 92 | Split splitncnn_22 1 2 677 677_splitncnn_0 677_splitncnn_1 93 | ConvolutionDepthWise 678 1 1 677_splitncnn_1 679 0=40 1=3 4=1 5=1 6=360 7=40 94 | Concat 680 2 1 677_splitncnn_0 679 680 95 | BinaryOp 681 2 1 680 668_splitncnn_0 681 96 | Split splitncnn_23 1 2 681 681_splitncnn_0 681_splitncnn_1 97 | Convolution 682 1 1 681_splitncnn_1 684 0=92 1=1 5=1 6=7360 9=1 98 | Split splitncnn_24 1 2 684 684_splitncnn_0 684_splitncnn_1 99 | ConvolutionDepthWise 685 1 1 684_splitncnn_1 687 0=92 1=3 4=1 5=1 6=828 7=92 9=1 100 | Concat 688 2 1 684_splitncnn_0 687 688 101 | Convolution 689 1 1 688 690 0=40 1=1 5=1 6=7360 102 | Split splitncnn_25 1 2 690 690_splitncnn_0 690_splitncnn_1 103 | ConvolutionDepthWise 691 1 1 690_splitncnn_1 692 0=40 1=3 4=1 5=1 6=360 7=40 104 | Concat 693 2 1 690_splitncnn_0 692 693 105 | BinaryOp 694 2 1 693 681_splitncnn_0 694 106 | Split splitncnn_26 1 2 694 694_splitncnn_0 694_splitncnn_1 107 | Convolution 695 1 1 694_splitncnn_1 697 0=92 1=1 5=1 6=7360 9=1 108 | Split splitncnn_27 1 2 697 697_splitncnn_0 697_splitncnn_1 109 | ConvolutionDepthWise 698 1 1 697_splitncnn_1 700 0=92 1=3 4=1 5=1 6=828 7=92 9=1 110 | Concat 701 2 1 697_splitncnn_0 700 701 111 | Convolution 702 1 1 701 703 0=40 1=1 5=1 6=7360 112 | Split splitncnn_28 1 2 703 703_splitncnn_0 703_splitncnn_1 113 | ConvolutionDepthWise 704 1 1 703_splitncnn_1 705 0=40 1=3 4=1 5=1 6=360 7=40 114 | Concat 706 2 1 703_splitncnn_0 705 706 115 | BinaryOp 707 2 1 706 694_splitncnn_0 707 116 | Split splitncnn_29 1 2 707 707_splitncnn_0 707_splitncnn_1 117 | Convolution 708 1 1 707_splitncnn_1 710 0=240 1=1 5=1 6=19200 9=1 118 | Split splitncnn_30 1 2 710 710_splitncnn_0 710_splitncnn_1 119 | ConvolutionDepthWise 711 1 1 710_splitncnn_1 713 0=240 1=3 4=1 5=1 6=2160 7=240 9=1 120 | Concat 714 2 1 710_splitncnn_0 713 714 121 | Split splitncnn_31 1 2 714 714_splitncnn_0 714_splitncnn_1 122 | Pooling 715 1 1 714_splitncnn_1 715 0=1 4=1 123 | InnerProduct 716 1 1 715 717 0=120 1=1 2=57600 9=1 124 | InnerProduct 718 1 1 717 718 0=480 1=1 2=57600 125 | HardSigmoid 723 1 1 718 723 0=1.666667e-01 126 | BinaryOp 724 2 1 714_splitncnn_0 723 724 0=2 127 | Convolution 725 1 1 724 726 0=56 1=1 5=1 6=26880 128 | Split splitncnn_32 1 2 726 726_splitncnn_0 726_splitncnn_1 129 | ConvolutionDepthWise 727 1 1 726_splitncnn_1 728 0=56 1=3 4=1 5=1 6=504 7=56 130 | Concat 729 2 1 726_splitncnn_0 728 729 131 | ConvolutionDepthWise 730 1 1 707_splitncnn_0 731 0=80 1=3 4=1 5=1 6=720 7=80 132 | Convolution 732 1 1 731 733 0=112 1=1 5=1 6=8960 133 | BinaryOp 734 2 1 729 733 734 134 | Split splitncnn_33 1 2 734 734_splitncnn_0 734_splitncnn_1 135 | Convolution 735 1 1 734_splitncnn_1 737 0=336 1=1 5=1 6=37632 9=1 136 | Split splitncnn_34 1 2 737 737_splitncnn_0 737_splitncnn_1 137 | ConvolutionDepthWise 738 1 1 737_splitncnn_1 740 0=336 1=3 4=1 5=1 6=3024 7=336 9=1 138 | Concat 741 2 1 737_splitncnn_0 740 741 139 | Split splitncnn_35 1 2 741 741_splitncnn_0 741_splitncnn_1 140 | Pooling 742 1 1 741_splitncnn_1 742 0=1 4=1 141 | InnerProduct 743 1 1 742 744 0=168 1=1 2=112896 9=1 142 | InnerProduct 745 1 1 744 745 0=672 1=1 2=112896 143 | HardSigmoid 750 1 1 745 750 0=1.666667e-01 144 | BinaryOp 751 2 1 741_splitncnn_0 750 751 0=2 145 | Convolution 752 1 1 751 753 0=56 1=1 5=1 6=37632 146 | Split splitncnn_36 1 2 753 753_splitncnn_0 753_splitncnn_1 147 | ConvolutionDepthWise 754 1 1 753_splitncnn_1 755 0=56 1=3 4=1 5=1 6=504 7=56 148 | Concat 756 2 1 753_splitncnn_0 755 756 149 | BinaryOp 757 2 1 756 734_splitncnn_0 757 150 | Split splitncnn_37 1 2 757 757_splitncnn_0 757_splitncnn_1 151 | Pooling 758 1 1 757_splitncnn_1 758 0=1 4=1 152 | InnerProduct 759 1 1 758 761 0=28 1=1 2=3136 9=1 153 | InnerProduct 762 1 1 761 764 0=112 1=1 2=3136 9=4 154 | BinaryOp 765 2 1 757_splitncnn_0 764 765 0=2 155 | Convolution 766 1 1 765 768 0=224 1=1 5=1 6=25088 9=1 156 | ConvolutionDepthWise 769 1 1 768 771 0=224 1=3 4=1 5=1 6=2016 7=224 9=1 157 | Convolution 772 1 1 771 773 0=32 1=1 5=1 6=7168 158 | Split splitncnn_38 1 2 773 773_splitncnn_0 773_splitncnn_1 159 | Pooling 775 1 1 773_splitncnn_1 775 0=1 1=14 2=14 5=1 160 | Reshape 783 1 1 775 783 0=-1 161 | Convolution 784 1 1 773_splitncnn_0 786 0=64 1=3 3=2 4=1 5=1 6=18432 9=1 162 | Split splitncnn_39 1 2 786 786_splitncnn_0 786_splitncnn_1 163 | Pooling 788 1 1 786_splitncnn_1 788 0=1 1=7 2=7 5=1 164 | Reshape 796 1 1 788 796 0=-1 165 | Convolution 797 1 1 786_splitncnn_0 798 0=256 1=7 5=1 6=802816 9=1 166 | Reshape 806 1 1 798 806 0=-1 167 | Concat 807 3 1 783 796 806 807 168 | InnerProduct output 1 1 807 output 0=936 1=1 2=329472 169 | -------------------------------------------------------------------------------- /ncnn-android-scrfd-master/app/src/main/assets/faceseg-op.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FeiGeChuanShu/ncnn_Android_face/83ecdf198aeb8073450238977a52695eab17cf51/ncnn-android-scrfd-master/app/src/main/assets/faceseg-op.bin -------------------------------------------------------------------------------- /ncnn-android-scrfd-master/app/src/main/assets/faceseg-op.param: -------------------------------------------------------------------------------- 1 | 7767517 2 | 161 189 3 | Input input.1 0 1 input 4 | Convolution Conv_14 1 1 input 363 0=32 1=3 3=2 4=1 5=1 6=864 9=1 5 | Convolution Conv_17 1 1 363 366 0=32 1=3 3=2 4=1 5=1 6=9216 9=1 6 | Split splitncnn_0 1 2 366 366_splitncnn_0 366_splitncnn_1 7 | Convolution Conv_20 1 1 366_splitncnn_1 369 0=32 1=3 4=1 5=1 6=9216 9=1 8 | Convolution Conv_23 1 1 369 371 0=32 1=3 4=1 5=1 6=9216 9 | BinaryOp Add_25 2 1 371 366_splitncnn_0 372 10 | ReLU Relu_26 1 1 372 373 11 | Split splitncnn_1 1 2 373 373_splitncnn_0 373_splitncnn_1 12 | Convolution Conv_27 1 1 373_splitncnn_1 376 0=32 1=3 4=1 5=1 6=9216 9=1 13 | Convolution Conv_30 1 1 376 378 0=32 1=3 4=1 5=1 6=9216 14 | BinaryOp Add_32 2 1 378 373_splitncnn_0 379 15 | ReLU Relu_33 1 1 379 380 16 | Split splitncnn_2 1 2 380 380_splitncnn_0 380_splitncnn_1 17 | Convolution Conv_34 1 1 380_splitncnn_1 383 0=64 1=3 3=2 4=1 5=1 6=18432 9=1 18 | Convolution Conv_37 1 1 383 385 0=64 1=3 4=1 5=1 6=36864 19 | Convolution Conv_39 1 1 380_splitncnn_0 387 0=64 1=1 3=2 5=1 6=2048 20 | BinaryOp Add_41 2 1 385 387 388 21 | ReLU Relu_42 1 1 388 389 22 | Split splitncnn_3 1 2 389 389_splitncnn_0 389_splitncnn_1 23 | Convolution Conv_43 1 1 389_splitncnn_1 392 0=64 1=3 4=1 5=1 6=36864 9=1 24 | Convolution Conv_46 1 1 392 394 0=64 1=3 4=1 5=1 6=36864 25 | BinaryOp Add_48 2 1 394 389_splitncnn_0 395 26 | Split splitncnn_4 1 2 395 395_splitncnn_0 395_splitncnn_1 27 | ReLU Relu_49 1 1 395_splitncnn_1 396 28 | Split splitncnn_5 1 2 396 396_splitncnn_0 396_splitncnn_1 29 | Convolution Conv_50 1 1 396_splitncnn_1 399 0=128 1=3 3=2 4=1 5=1 6=73728 9=1 30 | Convolution Conv_53 1 1 399 401 0=128 1=3 4=1 5=1 6=147456 31 | Convolution Conv_55 1 1 396_splitncnn_0 403 0=128 1=1 3=2 5=1 6=8192 32 | BinaryOp Add_57 2 1 401 403 404 33 | ReLU Relu_58 1 1 404 405 34 | Split splitncnn_6 1 2 405 405_splitncnn_0 405_splitncnn_1 35 | Convolution Conv_59 1 1 405_splitncnn_1 408 0=128 1=3 4=1 5=1 6=147456 9=1 36 | Convolution Conv_62 1 1 408 410 0=128 1=3 4=1 5=1 6=147456 37 | BinaryOp Add_64 2 1 410 405_splitncnn_0 411 38 | Split splitncnn_7 1 2 411 411_splitncnn_0 411_splitncnn_1 39 | ReLU Relu_65 1 1 395_splitncnn_0 412 40 | Split splitncnn_8 1 2 412 412_splitncnn_0 412_splitncnn_1 41 | Convolution Conv_66 1 1 412_splitncnn_1 415 0=64 1=3 4=1 5=1 6=36864 9=1 42 | Convolution Conv_69 1 1 415 417 0=64 1=3 4=1 5=1 6=36864 43 | BinaryOp Add_71 2 1 417 412_splitncnn_0 418 44 | ReLU Relu_72 1 1 418 419 45 | Split splitncnn_9 1 2 419 419_splitncnn_0 419_splitncnn_1 46 | Convolution Conv_73 1 1 419_splitncnn_1 422 0=64 1=3 4=1 5=1 6=36864 9=1 47 | Convolution Conv_76 1 1 422 424 0=64 1=3 4=1 5=1 6=36864 48 | BinaryOp Add_78 2 1 424 419_splitncnn_0 425 49 | Split splitncnn_10 1 2 425 425_splitncnn_0 425_splitncnn_1 50 | ReLU Relu_79 1 1 425_splitncnn_1 426 51 | Convolution Conv_80 1 1 426 428 0=128 1=3 3=2 4=1 5=1 6=73728 52 | BinaryOp Add_82 2 1 411_splitncnn_1 428 429 53 | ReLU Relu_83 1 1 411_splitncnn_0 430 54 | Convolution Conv_84 1 1 430 432 0=64 1=1 5=1 6=8192 55 | Interp Resize_98 1 1 432 445 0=2 3=32 4=32 56 | BinaryOp Add_99 2 1 425_splitncnn_0 445 446 57 | ReLU Relu_100 1 1 429 447 58 | Split splitncnn_11 1 2 447 447_splitncnn_0 447_splitncnn_1 59 | Convolution Conv_101 1 1 447_splitncnn_1 450 0=256 1=3 3=2 4=1 5=1 6=294912 9=1 60 | Convolution Conv_104 1 1 450 452 0=256 1=3 4=1 5=1 6=589824 61 | Convolution Conv_106 1 1 447_splitncnn_0 454 0=256 1=1 3=2 5=1 6=32768 62 | BinaryOp Add_108 2 1 452 454 455 63 | ReLU Relu_109 1 1 455 456 64 | Split splitncnn_12 1 2 456 456_splitncnn_0 456_splitncnn_1 65 | Convolution Conv_110 1 1 456_splitncnn_1 459 0=256 1=3 4=1 5=1 6=589824 9=1 66 | Convolution Conv_113 1 1 459 461 0=256 1=3 4=1 5=1 6=589824 67 | BinaryOp Add_115 2 1 461 456_splitncnn_0 462 68 | Split splitncnn_13 1 2 462 462_splitncnn_0 462_splitncnn_1 69 | ReLU Relu_116 1 1 446 463 70 | Split splitncnn_14 1 2 463 463_splitncnn_0 463_splitncnn_1 71 | Convolution Conv_117 1 1 463_splitncnn_1 466 0=64 1=3 4=1 5=1 6=36864 9=1 72 | Convolution Conv_120 1 1 466 468 0=64 1=3 4=1 5=1 6=36864 73 | BinaryOp Add_122 2 1 468 463_splitncnn_0 469 74 | ReLU Relu_123 1 1 469 470 75 | Split splitncnn_15 1 2 470 470_splitncnn_0 470_splitncnn_1 76 | Convolution Conv_124 1 1 470_splitncnn_1 473 0=64 1=3 4=1 5=1 6=36864 9=1 77 | Convolution Conv_127 1 1 473 475 0=64 1=3 4=1 5=1 6=36864 78 | BinaryOp Add_129 2 1 475 470_splitncnn_0 476 79 | Split splitncnn_16 1 2 476 476_splitncnn_0 476_splitncnn_1 80 | ReLU Relu_130 1 1 476_splitncnn_1 477 81 | Convolution Conv_131 1 1 477 480 0=128 1=3 3=2 4=1 5=1 6=73728 9=1 82 | Convolution Conv_134 1 1 480 482 0=256 1=3 3=2 4=1 5=1 6=294912 83 | BinaryOp Add_136 2 1 462_splitncnn_1 482 483 84 | ReLU Relu_137 1 1 462_splitncnn_0 484 85 | Convolution Conv_138 1 1 484 486 0=64 1=1 5=1 6=16384 86 | Interp Resize_152 1 1 486 499 0=2 3=32 4=32 87 | BinaryOp Add_153 2 1 476_splitncnn_0 499 500 88 | ReLU Relu_154 1 1 500 501 89 | Split splitncnn_17 1 2 501 501_splitncnn_0 501_splitncnn_1 90 | Convolution Conv_155 1 1 501_splitncnn_1 504 0=64 1=1 5=1 6=4096 9=1 91 | Convolution Conv_158 1 1 504 507 0=64 1=3 4=1 5=1 6=36864 9=1 92 | Convolution Conv_161 1 1 507 509 0=128 1=1 5=1 6=8192 93 | Convolution Conv_163 1 1 501_splitncnn_0 511 0=128 1=1 5=1 6=8192 94 | BinaryOp Add_165 2 1 509 511 512 95 | ReLU Relu_166 1 1 483 513 96 | Split splitncnn_18 1 2 513 513_splitncnn_0 513_splitncnn_1 97 | Convolution Conv_167 1 1 513_splitncnn_1 516 0=256 1=1 5=1 6=65536 9=1 98 | Convolution Conv_170 1 1 516 519 0=256 1=3 3=2 4=1 5=1 6=589824 9=1 99 | Convolution Conv_173 1 1 519 521 0=512 1=1 5=1 6=131072 100 | Convolution Conv_175 1 1 513_splitncnn_0 523 0=512 1=1 3=2 5=1 6=131072 101 | BinaryOp Add_177 2 1 521 523 524 102 | Split splitncnn_19 1 6 524 524_splitncnn_0 524_splitncnn_1 524_splitncnn_2 524_splitncnn_3 524_splitncnn_4 524_splitncnn_5 103 | BatchNorm BatchNormalization_184 1 1 524_splitncnn_5 531 0=512 104 | ReLU Relu_185 1 1 531 532 105 | Convolution Conv_186 1 1 532 533 0=128 1=1 6=65536 106 | Split splitncnn_20 1 2 533 533_splitncnn_0 533_splitncnn_1 107 | Padding Pad_188 1 1 524_splitncnn_4 535 0=1 1=1 2=1 3=1 108 | Pooling AveragePool_189 1 1 535 536 0=1 1=3 2=2 5=1 109 | BatchNorm BatchNormalization_190 1 1 536 537 0=512 110 | ReLU Relu_191 1 1 537 538 111 | Convolution Conv_192 1 1 538 539 0=128 1=1 6=65536 112 | Interp Resize_205 1 1 539 552 0=2 3=4 4=4 113 | BinaryOp Add_206 2 1 552 533_splitncnn_1 553 114 | BatchNorm BatchNormalization_207 1 1 553 554 0=128 115 | ReLU Relu_208 1 1 554 555 116 | Convolution Conv_209 1 1 555 556 0=128 1=3 4=1 6=147456 117 | Split splitncnn_21 1 2 556 556_splitncnn_0 556_splitncnn_1 118 | Padding Pad_211 1 1 524_splitncnn_3 558 0=2 1=2 2=2 3=2 119 | Pooling AveragePool_212 1 1 558 559 0=1 1=5 2=4 5=1 120 | BatchNorm BatchNormalization_213 1 1 559 560 0=512 121 | ReLU Relu_214 1 1 560 561 122 | Convolution Conv_215 1 1 561 562 0=128 1=1 6=65536 123 | Interp Resize_228 1 1 562 575 0=2 3=4 4=4 124 | BinaryOp Add_229 2 1 575 556_splitncnn_1 576 125 | BatchNorm BatchNormalization_230 1 1 576 577 0=128 126 | ReLU Relu_231 1 1 577 578 127 | Convolution Conv_232 1 1 578 579 0=128 1=3 4=1 6=147456 128 | Split splitncnn_22 1 2 579 579_splitncnn_0 579_splitncnn_1 129 | Padding Pad_234 1 1 524_splitncnn_2 581 0=4 1=4 2=4 3=4 130 | Pooling AveragePool_235 1 1 581 582 0=1 1=9 2=8 5=1 131 | BatchNorm BatchNormalization_236 1 1 582 583 0=512 132 | ReLU Relu_237 1 1 583 584 133 | Convolution Conv_238 1 1 584 585 0=128 1=1 6=65536 134 | Interp Resize_251 1 1 585 598 0=2 3=4 4=4 135 | BinaryOp Add_252 2 1 598 579_splitncnn_1 599 136 | BatchNorm BatchNormalization_253 1 1 599 600 0=128 137 | ReLU Relu_254 1 1 600 601 138 | Convolution Conv_255 1 1 601 602 0=128 1=3 4=1 6=147456 139 | Split splitncnn_23 1 2 602 602_splitncnn_0 602_splitncnn_1 140 | Pooling GlobalAveragePool_256 1 1 524_splitncnn_1 603 0=1 4=1 141 | BatchNorm BatchNormalization_257 1 1 603 604 0=512 142 | ReLU Relu_258 1 1 604 605 143 | Convolution Conv_259 1 1 605 606 0=128 1=1 6=65536 144 | Interp Resize_272 1 1 606 619 0=2 3=4 4=4 145 | BinaryOp Add_273 2 1 619 602_splitncnn_1 620 146 | BatchNorm BatchNormalization_274 1 1 620 621 0=128 147 | ReLU Relu_275 1 1 621 622 148 | Convolution Conv_276 1 1 622 623 0=128 1=3 4=1 6=147456 149 | Concat Concat_277 5 1 533_splitncnn_0 556_splitncnn_0 579_splitncnn_0 602_splitncnn_0 623 624 150 | BatchNorm BatchNormalization_278 1 1 624 625 0=640 151 | ReLU Relu_279 1 1 625 626 152 | Convolution Conv_280 1 1 626 627 0=128 1=1 6=81920 153 | BatchNorm BatchNormalization_281 1 1 524_splitncnn_0 628 0=512 154 | ReLU Relu_282 1 1 628 629 155 | Convolution Conv_283 1 1 629 630 0=128 1=1 6=65536 156 | BinaryOp Add_284 2 1 627 630 631 157 | Interp Resize_297 1 1 631 644 0=2 3=32 4=32 158 | BinaryOp Add_298 2 1 644 512 645 159 | BatchNorm BatchNormalization_299 1 1 645 646 0=128 160 | ReLU Relu_300 1 1 646 647 161 | Convolution Conv_301 1 1 647 650 0=64 1=3 4=1 5=1 6=73728 9=1 162 | Convolution Conv_304 1 1 650 651 0=8 1=1 5=1 6=512 163 | Interp Resize_313 1 1 651 output 0=2 3=256 4=256 164 | -------------------------------------------------------------------------------- /ncnn-android-scrfd-master/app/src/main/assets/scrfd_1g-opt2.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FeiGeChuanShu/ncnn_Android_face/83ecdf198aeb8073450238977a52695eab17cf51/ncnn-android-scrfd-master/app/src/main/assets/scrfd_1g-opt2.bin -------------------------------------------------------------------------------- /ncnn-android-scrfd-master/app/src/main/assets/scrfd_1g-opt2.param: -------------------------------------------------------------------------------- 1 | 7767517 2 | 99 108 3 | Input input.1 0 1 input.1 4 | Convolution Conv_0 1 1 input.1 193 0=32 1=3 3=2 4=1 5=1 6=864 9=1 5 | ConvolutionDepthWise Conv_2 1 1 193 196 0=32 1=3 4=1 5=1 6=288 7=32 9=1 6 | Convolution Conv_4 1 1 196 199 0=48 1=1 5=1 6=1536 9=1 7 | ConvolutionDepthWise Conv_6 1 1 199 202 0=48 1=3 3=2 4=1 5=1 6=432 7=48 9=1 8 | Convolution Conv_8 1 1 202 205 0=48 1=1 5=1 6=2304 9=1 9 | ConvolutionDepthWise Conv_10 1 1 205 208 0=48 1=3 4=1 5=1 6=432 7=48 9=1 10 | Convolution Conv_12 1 1 208 211 0=48 1=1 5=1 6=2304 9=1 11 | ConvolutionDepthWise Conv_14 1 1 211 214 0=48 1=3 4=1 5=1 6=432 7=48 9=1 12 | Convolution Conv_16 1 1 214 217 0=48 1=1 5=1 6=2304 9=1 13 | ConvolutionDepthWise Conv_18 1 1 217 220 0=48 1=3 3=2 4=1 5=1 6=432 7=48 9=1 14 | Convolution Conv_20 1 1 220 223 0=160 1=1 5=1 6=7680 9=1 15 | ConvolutionDepthWise Conv_22 1 1 223 226 0=160 1=3 4=1 5=1 6=1440 7=160 9=1 16 | Convolution Conv_24 1 1 226 229 0=160 1=1 5=1 6=25600 9=1 17 | Split splitncnn_0 1 2 229 229_splitncnn_0 229_splitncnn_1 18 | ConvolutionDepthWise Conv_26 1 1 229_splitncnn_1 232 0=160 1=3 3=2 4=1 5=1 6=1440 7=160 9=1 19 | Convolution Conv_28 1 1 232 235 0=216 1=1 5=1 6=34560 9=1 20 | Split splitncnn_1 1 2 235 235_splitncnn_0 235_splitncnn_1 21 | ConvolutionDepthWise Conv_30 1 1 235_splitncnn_1 238 0=216 1=3 3=2 4=1 5=1 6=1944 7=216 9=1 22 | Convolution Conv_32 1 1 238 241 0=312 1=1 5=1 6=67392 9=1 23 | ConvolutionDepthWise Conv_34 1 1 241 244 0=312 1=3 4=1 5=1 6=2808 7=312 9=1 24 | Convolution Conv_36 1 1 244 247 0=312 1=1 5=1 6=97344 9=1 25 | ConvolutionDepthWise Conv_38 1 1 247 250 0=312 1=3 4=1 5=1 6=2808 7=312 9=1 26 | Convolution Conv_40 1 1 250 253 0=312 1=1 5=1 6=97344 9=1 27 | ConvolutionDepthWise Conv_42 1 1 253 256 0=312 1=3 4=1 5=1 6=2808 7=312 9=1 28 | Convolution Conv_44 1 1 256 259 0=312 1=1 5=1 6=97344 9=1 29 | ConvolutionDepthWise Conv_46 1 1 259 262 0=312 1=3 4=1 5=1 6=2808 7=312 9=1 30 | Convolution Conv_48 1 1 262 265 0=312 1=1 5=1 6=97344 9=1 31 | Convolution Conv_50 1 1 229_splitncnn_0 266 0=24 1=1 5=1 6=3840 32 | Convolution Conv_51 1 1 235_splitncnn_0 267 0=24 1=1 5=1 6=5184 33 | Convolution Conv_52 1 1 265 268 0=24 1=1 5=1 6=7488 34 | Split splitncnn_2 1 2 268 268_splitncnn_0 268_splitncnn_1 35 | Interp Resize_71 1 1 268_splitncnn_1 287 0=1 1=2.000000e+00 2=2.000000e+00 36 | BinaryOp Add_72 2 1 267 287 288 37 | Split splitncnn_3 1 2 288 288_splitncnn_0 288_splitncnn_1 38 | Interp Resize_91 1 1 288_splitncnn_1 307 0=1 1=2.000000e+00 2=2.000000e+00 39 | BinaryOp Add_92 2 1 266 307 308 40 | Convolution Conv_93 1 1 308 309 0=24 1=3 4=1 5=1 6=5184 41 | Split splitncnn_4 1 2 309 309_splitncnn_0 309_splitncnn_1 42 | Convolution Conv_94 1 1 288_splitncnn_0 310 0=24 1=3 4=1 5=1 6=5184 43 | Convolution Conv_95 1 1 268_splitncnn_0 311 0=24 1=3 4=1 5=1 6=5184 44 | Convolution Conv_96 1 1 309_splitncnn_1 312 0=24 1=3 3=2 4=1 5=1 6=5184 45 | BinaryOp Add_97 2 1 310 312 313 46 | Split splitncnn_5 1 2 313 313_splitncnn_0 313_splitncnn_1 47 | Convolution Conv_98 1 1 313_splitncnn_1 314 0=24 1=3 3=2 4=1 5=1 6=5184 48 | BinaryOp Add_99 2 1 311 314 315 49 | Convolution Conv_100 1 1 313_splitncnn_0 316 0=24 1=3 4=1 5=1 6=5184 50 | Convolution Conv_101 1 1 315 317 0=24 1=3 4=1 5=1 6=5184 51 | ConvolutionDepthWise Conv_102 1 1 309_splitncnn_0 318 0=24 1=3 4=1 6=216 7=24 52 | GroupNorm Add_111 1 1 318 329 0=8 1=24 2=1.000000e-05 53 | ReLU Relu_112 1 1 329 330 54 | Convolution Conv_113 1 1 330 331 0=96 1=1 6=2304 55 | GroupNorm Add_122 1 1 331 342 0=8 1=96 2=1.000000e-05 56 | ReLU Relu_123 1 1 342 343 57 | ConvolutionDepthWise Conv_124 1 1 343 344 0=96 1=3 4=1 6=864 7=96 58 | GroupNorm Add_133 1 1 344 355 0=8 1=96 2=1.000000e-05 59 | ReLU Relu_134 1 1 355 356 60 | Convolution Conv_135 1 1 356 357 0=96 1=1 6=9216 61 | GroupNorm Add_144 1 1 357 368 0=8 1=96 2=1.000000e-05 62 | ReLU Relu_145 1 1 368 369 63 | Split splitncnn_6 1 2 369 369_splitncnn_0 369_splitncnn_1 64 | Convolution Conv_146 1 1 369_splitncnn_1 375 0=2 1=3 4=1 5=1 6=1728 65 | Convolution Conv_147 1 1 369_splitncnn_0 371 0=8 1=3 4=1 5=1 6=6912 66 | BinaryOp Mul_148 1 1 371 bbox_8 0=2 1=1 2=8.200800e-01 67 | Sigmoid Sigmoid_152 1 1 375 score_8 68 | ConvolutionDepthWise Conv_156 1 1 316 380 0=24 1=3 4=1 6=216 7=24 69 | GroupNorm Add_165 1 1 380 391 0=8 1=24 2=1.000000e-05 70 | ReLU Relu_166 1 1 391 392 71 | Convolution Conv_167 1 1 392 393 0=96 1=1 6=2304 72 | GroupNorm Add_176 1 1 393 404 0=8 1=96 2=1.000000e-05 73 | ReLU Relu_177 1 1 404 405 74 | ConvolutionDepthWise Conv_178 1 1 405 406 0=96 1=3 4=1 6=864 7=96 75 | GroupNorm Add_187 1 1 406 417 0=8 1=96 2=1.000000e-05 76 | ReLU Relu_188 1 1 417 418 77 | Convolution Conv_189 1 1 418 419 0=96 1=1 6=9216 78 | GroupNorm Add_198 1 1 419 430 0=8 1=96 2=1.000000e-05 79 | ReLU Relu_199 1 1 430 431 80 | Split splitncnn_7 1 2 431 431_splitncnn_0 431_splitncnn_1 81 | Convolution Conv_200 1 1 431_splitncnn_1 437 0=2 1=3 4=1 5=1 6=1728 82 | Convolution Conv_201 1 1 431_splitncnn_0 433 0=8 1=3 4=1 5=1 6=6912 83 | BinaryOp Mul_202 1 1 433 bbox_16 0=2 1=1 2=1.225648e+00 84 | Sigmoid Sigmoid_206 1 1 437 score_16 85 | ConvolutionDepthWise Conv_210 1 1 317 442 0=24 1=3 4=1 6=216 7=24 86 | GroupNorm Add_219 1 1 442 453 0=8 1=24 2=1.000000e-05 87 | ReLU Relu_220 1 1 453 454 88 | Convolution Conv_221 1 1 454 455 0=96 1=1 6=2304 89 | GroupNorm Add_230 1 1 455 466 0=8 1=96 2=1.000000e-05 90 | ReLU Relu_231 1 1 466 467 91 | ConvolutionDepthWise Conv_232 1 1 467 468 0=96 1=3 4=1 6=864 7=96 92 | GroupNorm Add_241 1 1 468 479 0=8 1=96 2=1.000000e-05 93 | ReLU Relu_242 1 1 479 480 94 | Convolution Conv_243 1 1 480 481 0=96 1=1 6=9216 95 | GroupNorm Add_252 1 1 481 492 0=8 1=96 2=1.000000e-05 96 | ReLU Relu_253 1 1 492 493 97 | Split splitncnn_8 1 2 493 493_splitncnn_0 493_splitncnn_1 98 | Convolution Conv_254 1 1 493_splitncnn_1 499 0=2 1=3 4=1 5=1 6=1728 99 | Convolution Conv_255 1 1 493_splitncnn_0 495 0=8 1=3 4=1 5=1 6=6912 100 | BinaryOp Mul_256 1 1 495 bbox_32 0=2 1=1 2=1.842380e+00 101 | Sigmoid Sigmoid_260 1 1 499 score_32 102 | -------------------------------------------------------------------------------- /ncnn-android-scrfd-master/app/src/main/assets/scrfd_500m-opt2.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FeiGeChuanShu/ncnn_Android_face/83ecdf198aeb8073450238977a52695eab17cf51/ncnn-android-scrfd-master/app/src/main/assets/scrfd_500m-opt2.bin -------------------------------------------------------------------------------- /ncnn-android-scrfd-master/app/src/main/assets/scrfd_500m-opt2.param: -------------------------------------------------------------------------------- 1 | 7767517 2 | 103 112 3 | Input input.1 0 1 input.1 4 | Convolution Conv_0 1 1 input.1 217 0=16 1=3 3=2 4=1 5=1 6=432 9=1 5 | ConvolutionDepthWise Conv_2 1 1 217 220 0=16 1=3 4=1 5=1 6=144 7=16 9=1 6 | Convolution Conv_4 1 1 220 223 0=16 1=1 5=1 6=256 9=1 7 | ConvolutionDepthWise Conv_6 1 1 223 226 0=16 1=3 3=2 4=1 5=1 6=144 7=16 9=1 8 | Convolution Conv_8 1 1 226 229 0=40 1=1 5=1 6=640 9=1 9 | ConvolutionDepthWise Conv_10 1 1 229 232 0=40 1=3 4=1 5=1 6=360 7=40 9=1 10 | Convolution Conv_12 1 1 232 235 0=40 1=1 5=1 6=1600 9=1 11 | ConvolutionDepthWise Conv_14 1 1 235 238 0=40 1=3 3=2 4=1 5=1 6=360 7=40 9=1 12 | Convolution Conv_16 1 1 238 241 0=72 1=1 5=1 6=2880 9=1 13 | ConvolutionDepthWise Conv_18 1 1 241 244 0=72 1=3 4=1 5=1 6=648 7=72 9=1 14 | Convolution Conv_20 1 1 244 247 0=72 1=1 5=1 6=5184 9=1 15 | ConvolutionDepthWise Conv_22 1 1 247 250 0=72 1=3 4=1 5=1 6=648 7=72 9=1 16 | Convolution Conv_24 1 1 250 253 0=72 1=1 5=1 6=5184 9=1 17 | Split splitncnn_0 1 2 253 253_splitncnn_0 253_splitncnn_1 18 | ConvolutionDepthWise Conv_26 1 1 253_splitncnn_1 256 0=72 1=3 3=2 4=1 5=1 6=648 7=72 9=1 19 | Convolution Conv_28 1 1 256 259 0=152 1=1 5=1 6=10944 9=1 20 | ConvolutionDepthWise Conv_30 1 1 259 262 0=152 1=3 4=1 5=1 6=1368 7=152 9=1 21 | Convolution Conv_32 1 1 262 265 0=152 1=1 5=1 6=23104 9=1 22 | Split splitncnn_1 1 2 265 265_splitncnn_0 265_splitncnn_1 23 | ConvolutionDepthWise Conv_34 1 1 265_splitncnn_1 268 0=152 1=3 3=2 4=1 5=1 6=1368 7=152 9=1 24 | Convolution Conv_36 1 1 268 271 0=288 1=1 5=1 6=43776 9=1 25 | ConvolutionDepthWise Conv_38 1 1 271 274 0=288 1=3 4=1 5=1 6=2592 7=288 9=1 26 | Convolution Conv_40 1 1 274 277 0=288 1=1 5=1 6=82944 9=1 27 | ConvolutionDepthWise Conv_42 1 1 277 280 0=288 1=3 4=1 5=1 6=2592 7=288 9=1 28 | Convolution Conv_44 1 1 280 283 0=288 1=1 5=1 6=82944 9=1 29 | ConvolutionDepthWise Conv_46 1 1 283 286 0=288 1=3 4=1 5=1 6=2592 7=288 9=1 30 | Convolution Conv_48 1 1 286 289 0=288 1=1 5=1 6=82944 9=1 31 | ConvolutionDepthWise Conv_50 1 1 289 292 0=288 1=3 4=1 5=1 6=2592 7=288 9=1 32 | Convolution Conv_52 1 1 292 295 0=288 1=1 5=1 6=82944 9=1 33 | ConvolutionDepthWise Conv_54 1 1 295 298 0=288 1=3 4=1 5=1 6=2592 7=288 9=1 34 | Convolution Conv_56 1 1 298 301 0=288 1=1 5=1 6=82944 9=1 35 | Convolution Conv_58 1 1 253_splitncnn_0 302 0=16 1=1 5=1 6=1152 36 | Convolution Conv_59 1 1 265_splitncnn_0 303 0=16 1=1 5=1 6=2432 37 | Convolution Conv_60 1 1 301 304 0=16 1=1 5=1 6=4608 38 | Split splitncnn_2 1 2 304 304_splitncnn_0 304_splitncnn_1 39 | Interp Resize_79 1 1 304_splitncnn_1 323 0=1 1=2.000000e+00 2=2.000000e+00 40 | BinaryOp Add_80 2 1 303 323 324 41 | Split splitncnn_3 1 2 324 324_splitncnn_0 324_splitncnn_1 42 | Interp Resize_99 1 1 324_splitncnn_1 343 0=1 1=2.000000e+00 2=2.000000e+00 43 | BinaryOp Add_100 2 1 302 343 344 44 | Convolution Conv_101 1 1 344 345 0=16 1=3 4=1 5=1 6=2304 45 | Split splitncnn_4 1 2 345 345_splitncnn_0 345_splitncnn_1 46 | Convolution Conv_102 1 1 324_splitncnn_0 346 0=16 1=3 4=1 5=1 6=2304 47 | Convolution Conv_103 1 1 304_splitncnn_0 347 0=16 1=3 4=1 5=1 6=2304 48 | Convolution Conv_104 1 1 345_splitncnn_1 348 0=16 1=3 3=2 4=1 5=1 6=2304 49 | BinaryOp Add_105 2 1 346 348 349 50 | Split splitncnn_5 1 2 349 349_splitncnn_0 349_splitncnn_1 51 | Convolution Conv_106 1 1 349_splitncnn_1 350 0=16 1=3 3=2 4=1 5=1 6=2304 52 | BinaryOp Add_107 2 1 347 350 351 53 | Convolution Conv_108 1 1 349_splitncnn_0 352 0=16 1=3 4=1 5=1 6=2304 54 | Convolution Conv_109 1 1 351 353 0=16 1=3 4=1 5=1 6=2304 55 | ConvolutionDepthWise Conv_110 1 1 345_splitncnn_0 354 0=16 1=3 4=1 6=144 7=16 56 | GroupNorm Add_119 1 1 354 365 0=16 1=16 2=1.000000e-05 57 | ReLU Relu_120 1 1 365 366 58 | Convolution Conv_121 1 1 366 367 0=64 1=1 6=1024 59 | GroupNorm Add_130 1 1 367 378 0=16 1=64 2=1.000000e-05 60 | ReLU Relu_131 1 1 378 379 61 | ConvolutionDepthWise Conv_132 1 1 379 380 0=64 1=3 4=1 6=576 7=64 62 | GroupNorm Add_141 1 1 380 391 0=16 1=64 2=1.000000e-05 63 | ReLU Relu_142 1 1 391 392 64 | Convolution Conv_143 1 1 392 393 0=64 1=1 6=4096 65 | GroupNorm Add_152 1 1 393 404 0=16 1=64 2=1.000000e-05 66 | ReLU Relu_153 1 1 404 405 67 | Split splitncnn_6 1 2 405 405_splitncnn_0 405_splitncnn_1 68 | Convolution Conv_154 1 1 405_splitncnn_1 411 0=2 1=3 4=1 5=1 6=1152 69 | Convolution Conv_155 1 1 405_splitncnn_0 407 0=8 1=3 4=1 5=1 6=4608 70 | BinaryOp Mul_156 1 1 407 bbox_8 0=2 1=1 2=7.957783e-01 71 | Sigmoid Sigmoid_160 1 1 411 score_8 72 | ConvolutionDepthWise Conv_164 1 1 352 416 0=16 1=3 4=1 6=144 7=16 73 | GroupNorm Add_173 1 1 416 427 0=16 1=16 2=1.000000e-05 74 | ReLU Relu_174 1 1 427 428 75 | Convolution Conv_175 1 1 428 429 0=64 1=1 6=1024 76 | GroupNorm Add_184 1 1 429 440 0=16 1=64 2=1.000000e-05 77 | ReLU Relu_185 1 1 440 441 78 | ConvolutionDepthWise Conv_186 1 1 441 442 0=64 1=3 4=1 6=576 7=64 79 | GroupNorm Add_195 1 1 442 453 0=16 1=64 2=1.000000e-05 80 | ReLU Relu_196 1 1 453 454 81 | Convolution Conv_197 1 1 454 455 0=64 1=1 6=4096 82 | GroupNorm Add_206 1 1 455 466 0=16 1=64 2=1.000000e-05 83 | ReLU Relu_207 1 1 466 467 84 | Split splitncnn_7 1 2 467 467_splitncnn_0 467_splitncnn_1 85 | Convolution Conv_208 1 1 467_splitncnn_1 473 0=2 1=3 4=1 5=1 6=1152 86 | Convolution Conv_209 1 1 467_splitncnn_0 469 0=8 1=3 4=1 5=1 6=4608 87 | BinaryOp Mul_210 1 1 469 bbox_16 0=2 1=1 2=1.201926e+00 88 | Sigmoid Sigmoid_214 1 1 473 score_16 89 | ConvolutionDepthWise Conv_218 1 1 353 478 0=16 1=3 4=1 6=144 7=16 90 | GroupNorm Add_227 1 1 478 489 0=16 1=16 2=1.000000e-05 91 | ReLU Relu_228 1 1 489 490 92 | Convolution Conv_229 1 1 490 491 0=64 1=1 6=1024 93 | GroupNorm Add_238 1 1 491 502 0=16 1=64 2=1.000000e-05 94 | ReLU Relu_239 1 1 502 503 95 | ConvolutionDepthWise Conv_240 1 1 503 504 0=64 1=3 4=1 6=576 7=64 96 | GroupNorm Add_249 1 1 504 515 0=16 1=64 2=1.000000e-05 97 | ReLU Relu_250 1 1 515 516 98 | Convolution Conv_251 1 1 516 517 0=64 1=1 6=4096 99 | GroupNorm Add_260 1 1 517 528 0=16 1=64 2=1.000000e-05 100 | ReLU Relu_261 1 1 528 529 101 | Split splitncnn_8 1 2 529 529_splitncnn_0 529_splitncnn_1 102 | Convolution Conv_262 1 1 529_splitncnn_1 535 0=2 1=3 4=1 5=1 6=1152 103 | Convolution Conv_263 1 1 529_splitncnn_0 531 0=8 1=3 4=1 5=1 6=4608 104 | BinaryOp Mul_264 1 1 531 bbox_32 0=2 1=1 2=1.992024e+00 105 | Sigmoid Sigmoid_268 1 1 535 score_32 106 | -------------------------------------------------------------------------------- /ncnn-android-scrfd-master/app/src/main/java/com/tencent/scrfdncnn/MainActivity.java: -------------------------------------------------------------------------------- 1 | // Tencent is pleased to support the open source community by making ncnn available. 2 | // 3 | // Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved. 4 | // 5 | // Licensed under the BSD 3-Clause License (the "License"); you may not use this file except 6 | // in compliance with the License. You may obtain a copy of the License at 7 | // 8 | // https://opensource.org/licenses/BSD-3-Clause 9 | // 10 | // Unless required by applicable law or agreed to in writing, software distributed 11 | // under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR 12 | // CONDITIONS OF ANY KIND, either express or implied. See the License for the 13 | // specific language governing permissions and limitations under the License. 14 | 15 | package com.tencent.scrfdncnn; 16 | 17 | import android.Manifest; 18 | import android.app.Activity; 19 | import android.content.pm.PackageManager; 20 | import android.graphics.PixelFormat; 21 | import android.os.Bundle; 22 | import android.util.Log; 23 | import android.view.Surface; 24 | import android.view.SurfaceHolder; 25 | import android.view.SurfaceView; 26 | import android.view.View; 27 | import android.view.WindowManager; 28 | import android.widget.AdapterView; 29 | import android.widget.Button; 30 | import android.widget.Spinner; 31 | 32 | import android.support.v4.app.ActivityCompat; 33 | import android.support.v4.content.ContextCompat; 34 | 35 | public class MainActivity extends Activity implements SurfaceHolder.Callback 36 | { 37 | public static final int REQUEST_CAMERA = 100; 38 | 39 | private SCRFDNcnn scrfdncnn = new SCRFDNcnn(); 40 | private int facing = 0; 41 | 42 | private Spinner spinnerModel; 43 | private Spinner spinnerCPUGPU; 44 | private int current_model = 0; 45 | private int current_cpugpu = 0; 46 | 47 | private SurfaceView cameraView; 48 | 49 | /** Called when the activity is first created. */ 50 | @Override 51 | public void onCreate(Bundle savedInstanceState) 52 | { 53 | super.onCreate(savedInstanceState); 54 | setContentView(R.layout.main); 55 | 56 | getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 57 | 58 | cameraView = (SurfaceView) findViewById(R.id.cameraview); 59 | 60 | cameraView.getHolder().setFormat(PixelFormat.RGBA_8888); 61 | cameraView.getHolder().addCallback(this); 62 | 63 | Button buttonSwitchCamera = (Button) findViewById(R.id.buttonSwitchCamera); 64 | buttonSwitchCamera.setOnClickListener(new View.OnClickListener() { 65 | @Override 66 | public void onClick(View arg0) { 67 | 68 | int new_facing = 1 - facing; 69 | 70 | scrfdncnn.closeCamera(); 71 | 72 | scrfdncnn.openCamera(new_facing); 73 | 74 | facing = new_facing; 75 | } 76 | }); 77 | 78 | spinnerModel = (Spinner) findViewById(R.id.spinnerModel); 79 | spinnerModel.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 80 | @Override 81 | public void onItemSelected(AdapterView arg0, View arg1, int position, long id) 82 | { 83 | if (position != current_model) 84 | { 85 | current_model = position; 86 | reload(); 87 | } 88 | } 89 | 90 | @Override 91 | public void onNothingSelected(AdapterView arg0) 92 | { 93 | } 94 | }); 95 | 96 | spinnerCPUGPU = (Spinner) findViewById(R.id.spinnerCPUGPU); 97 | spinnerCPUGPU.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 98 | @Override 99 | public void onItemSelected(AdapterView arg0, View arg1, int position, long id) 100 | { 101 | if (position != current_cpugpu) 102 | { 103 | current_cpugpu = position; 104 | reload(); 105 | } 106 | } 107 | 108 | @Override 109 | public void onNothingSelected(AdapterView arg0) 110 | { 111 | } 112 | }); 113 | 114 | reload(); 115 | } 116 | 117 | private void reload() 118 | { 119 | boolean ret_init = scrfdncnn.loadModel(getAssets(), current_model, current_cpugpu); 120 | if (!ret_init) 121 | { 122 | Log.e("MainActivity", "scrfdncnn loadModel failed"); 123 | } 124 | } 125 | 126 | @Override 127 | public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) 128 | { 129 | scrfdncnn.setOutputWindow(holder.getSurface()); 130 | } 131 | 132 | @Override 133 | public void surfaceCreated(SurfaceHolder holder) 134 | { 135 | } 136 | 137 | @Override 138 | public void surfaceDestroyed(SurfaceHolder holder) 139 | { 140 | } 141 | 142 | @Override 143 | public void onResume() 144 | { 145 | super.onResume(); 146 | 147 | if (ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.CAMERA) == PackageManager.PERMISSION_DENIED) 148 | { 149 | ActivityCompat.requestPermissions(this, new String[] {Manifest.permission.CAMERA}, REQUEST_CAMERA); 150 | } 151 | 152 | scrfdncnn.openCamera(facing); 153 | } 154 | 155 | @Override 156 | public void onPause() 157 | { 158 | super.onPause(); 159 | 160 | scrfdncnn.closeCamera(); 161 | } 162 | } 163 | -------------------------------------------------------------------------------- /ncnn-android-scrfd-master/app/src/main/java/com/tencent/scrfdncnn/SCRFDNcnn.java: -------------------------------------------------------------------------------- 1 | // Tencent is pleased to support the open source community by making ncnn available. 2 | // 3 | // Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved. 4 | // 5 | // Licensed under the BSD 3-Clause License (the "License"); you may not use this file except 6 | // in compliance with the License. You may obtain a copy of the License at 7 | // 8 | // https://opensource.org/licenses/BSD-3-Clause 9 | // 10 | // Unless required by applicable law or agreed to in writing, software distributed 11 | // under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR 12 | // CONDITIONS OF ANY KIND, either express or implied. See the License for the 13 | // specific language governing permissions and limitations under the License. 14 | 15 | package com.tencent.scrfdncnn; 16 | 17 | import android.content.res.AssetManager; 18 | import android.view.Surface; 19 | 20 | public class SCRFDNcnn 21 | { 22 | public native boolean loadModel(AssetManager mgr, int modelid, int cpugpu); 23 | public native boolean openCamera(int facing); 24 | public native boolean closeCamera(); 25 | public native boolean setOutputWindow(Surface surface); 26 | 27 | static { 28 | System.loadLibrary("scrfdncnn"); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /ncnn-android-scrfd-master/app/src/main/jni/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | project(scrfdncnn) 2 | 3 | cmake_minimum_required(VERSION 3.10) 4 | 5 | set(OpenCV_DIR ${CMAKE_SOURCE_DIR}/opencv-mobile-4.5.1-android/sdk/native/jni) 6 | find_package(OpenCV REQUIRED core imgproc) 7 | 8 | set(ncnn_DIR ${CMAKE_SOURCE_DIR}/ncnn-20210322-android-vulkan/${ANDROID_ABI}/lib/cmake/ncnn) 9 | find_package(ncnn REQUIRED) 10 | 11 | add_library(scrfdncnn SHARED scrfdncnn.cpp scrfd.cpp ndkcamera.cpp) 12 | 13 | target_link_libraries(scrfdncnn ncnn ${OpenCV_LIBS} camera2ndk mediandk) 14 | -------------------------------------------------------------------------------- /ncnn-android-scrfd-master/app/src/main/jni/ndkcamera.h: -------------------------------------------------------------------------------- 1 | // Tencent is pleased to support the open source community by making ncnn available. 2 | // 3 | // Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved. 4 | // 5 | // Licensed under the BSD 3-Clause License (the "License"); you may not use this file except 6 | // in compliance with the License. You may obtain a copy of the License at 7 | // 8 | // https://opensource.org/licenses/BSD-3-Clause 9 | // 10 | // Unless required by applicable law or agreed to in writing, software distributed 11 | // under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR 12 | // CONDITIONS OF ANY KIND, either express or implied. See the License for the 13 | // specific language governing permissions and limitations under the License. 14 | 15 | #ifndef NDKCAMERA_H 16 | #define NDKCAMERA_H 17 | 18 | #include 19 | #include 20 | #include 21 | #include 22 | #include 23 | #include 24 | #include 25 | 26 | #include 27 | 28 | class NdkCamera 29 | { 30 | public: 31 | NdkCamera(); 32 | virtual ~NdkCamera(); 33 | 34 | // facing 0=front 1=back 35 | int open(int camera_facing = 0); 36 | void close(); 37 | 38 | virtual void on_image(const cv::Mat& rgb) const; 39 | 40 | virtual void on_image(const unsigned char* nv21, int nv21_width, int nv21_height) const; 41 | 42 | public: 43 | int camera_facing; 44 | int camera_orientation; 45 | 46 | private: 47 | ACameraManager* camera_manager; 48 | ACameraDevice* camera_device; 49 | AImageReader* image_reader; 50 | ANativeWindow* image_reader_surface; 51 | ACameraOutputTarget* image_reader_target; 52 | ACaptureRequest* capture_request; 53 | ACaptureSessionOutputContainer* capture_session_output_container; 54 | ACaptureSessionOutput* capture_session_output; 55 | ACameraCaptureSession* capture_session; 56 | }; 57 | 58 | class NdkCameraWindow : public NdkCamera 59 | { 60 | public: 61 | NdkCameraWindow(); 62 | virtual ~NdkCameraWindow(); 63 | 64 | void set_window(ANativeWindow* win); 65 | 66 | virtual void on_image_render(cv::Mat& rgb) const; 67 | 68 | virtual void on_image(const unsigned char* nv21, int nv21_width, int nv21_height) const; 69 | 70 | public: 71 | mutable int accelerometer_orientation; 72 | 73 | private: 74 | ASensorManager* sensor_manager; 75 | mutable ASensorEventQueue* sensor_event_queue; 76 | const ASensor* accelerometer_sensor; 77 | ANativeWindow* win; 78 | }; 79 | 80 | #endif // NDKCAMERA_H 81 | -------------------------------------------------------------------------------- /ncnn-android-scrfd-master/app/src/main/jni/scrfd.h: -------------------------------------------------------------------------------- 1 | // Tencent is pleased to support the open source community by making ncnn available. 2 | // 3 | // Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved. 4 | // 5 | // Licensed under the BSD 3-Clause License (the "License"); you may not use this file except 6 | // in compliance with the License. You may obtain a copy of the License at 7 | // 8 | // https://opensource.org/licenses/BSD-3-Clause 9 | // 10 | // Unless required by applicable law or agreed to in writing, software distributed 11 | // under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR 12 | // CONDITIONS OF ANY KIND, either express or implied. See the License for the 13 | // specific language governing permissions and limitations under the License. 14 | 15 | #ifndef SCRFD_H 16 | #define SCRFD_H 17 | 18 | #include 19 | 20 | #include 21 | 22 | struct FaceObject 23 | { 24 | cv::Rect_ rect; 25 | cv::Point2f landmark[5]; 26 | float prob; 27 | }; 28 | 29 | class SCRFD 30 | { 31 | public: 32 | int load(const char* modeltype, bool use_gpu = false); 33 | 34 | int load(AAssetManager* mgr, const char* modeltype, bool use_gpu = false); 35 | 36 | int detect(const cv::Mat& rgb, std::vector& faceobjects, float prob_threshold = 0.5f, float nms_threshold = 0.45f); 37 | 38 | int draw(cv::Mat& rgb, const std::vector& faceobjects); 39 | void seg(cv::Mat &rgb,const FaceObject &obj,cv::Mat &mask,cv::Rect &box); 40 | void landmark(cv::Mat &rgb, const FaceObject &obj, std::vector &landmarks); 41 | private: 42 | const float meanVals[3] = { 123.675f, 116.28f, 103.53f }; 43 | const float normVals[3] = { 0.01712475f, 0.0175f, 0.01742919f }; 44 | ncnn::Net facept; 45 | ncnn::Net faceseg; 46 | ncnn::Net scrfd; 47 | bool has_kps; 48 | }; 49 | 50 | #endif // SCRFD_H 51 | -------------------------------------------------------------------------------- /ncnn-android-scrfd-master/app/src/main/jni/scrfdncnn.cpp: -------------------------------------------------------------------------------- 1 | // Tencent is pleased to support the open source community by making ncnn available. 2 | // 3 | // Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved. 4 | // 5 | // Licensed under the BSD 3-Clause License (the "License"); you may not use this file except 6 | // in compliance with the License. You may obtain a copy of the License at 7 | // 8 | // https://opensource.org/licenses/BSD-3-Clause 9 | // 10 | // Unless required by applicable law or agreed to in writing, software distributed 11 | // under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR 12 | // CONDITIONS OF ANY KIND, either express or implied. See the License for the 13 | // specific language governing permissions and limitations under the License. 14 | 15 | #include 16 | #include 17 | #include 18 | 19 | #include 20 | 21 | #include 22 | 23 | #include 24 | #include 25 | 26 | #include 27 | #include 28 | 29 | #include "scrfd.h" 30 | 31 | #include "ndkcamera.h" 32 | 33 | #include 34 | #include 35 | 36 | #if __ARM_NEON 37 | #include 38 | #endif // __ARM_NEON 39 | 40 | static int draw_unsupported(cv::Mat& rgb) 41 | { 42 | const char text[] = "unsupported"; 43 | 44 | int baseLine = 0; 45 | cv::Size label_size = cv::getTextSize(text, cv::FONT_HERSHEY_SIMPLEX, 1.0, 1, &baseLine); 46 | 47 | int y = (rgb.rows - label_size.height) / 2; 48 | int x = (rgb.cols - label_size.width) / 2; 49 | 50 | cv::rectangle(rgb, cv::Rect(cv::Point(x, y), cv::Size(label_size.width, label_size.height + baseLine)), 51 | cv::Scalar(255, 255, 255), -1); 52 | 53 | cv::putText(rgb, text, cv::Point(x, y + label_size.height), 54 | cv::FONT_HERSHEY_SIMPLEX, 1.0, cv::Scalar(0, 0, 0)); 55 | 56 | return 0; 57 | } 58 | 59 | static int draw_fps(cv::Mat& rgb) 60 | { 61 | // resolve moving average 62 | float avg_fps = 0.f; 63 | { 64 | static double t0 = 0.f; 65 | static float fps_history[10] = {0.f}; 66 | 67 | double t1 = ncnn::get_current_time(); 68 | if (t0 == 0.f) 69 | { 70 | t0 = t1; 71 | return 0; 72 | } 73 | 74 | float fps = 1000.f / (t1 - t0); 75 | t0 = t1; 76 | 77 | for (int i = 9; i >= 1; i--) 78 | { 79 | fps_history[i] = fps_history[i - 1]; 80 | } 81 | fps_history[0] = fps; 82 | 83 | if (fps_history[9] == 0.f) 84 | { 85 | return 0; 86 | } 87 | 88 | for (int i = 0; i < 10; i++) 89 | { 90 | avg_fps += fps_history[i]; 91 | } 92 | avg_fps /= 10.f; 93 | } 94 | 95 | char text[32]; 96 | sprintf(text, "FPS=%.2f", avg_fps); 97 | 98 | int baseLine = 0; 99 | cv::Size label_size = cv::getTextSize(text, cv::FONT_HERSHEY_SIMPLEX, 0.5, 1, &baseLine); 100 | 101 | int y = 0; 102 | int x = rgb.cols - label_size.width; 103 | 104 | cv::rectangle(rgb, cv::Rect(cv::Point(x, y), cv::Size(label_size.width, label_size.height + baseLine)), 105 | cv::Scalar(255, 255, 255), -1); 106 | 107 | cv::putText(rgb, text, cv::Point(x, y + label_size.height), 108 | cv::FONT_HERSHEY_SIMPLEX, 0.5, cv::Scalar(0, 0, 0)); 109 | 110 | return 0; 111 | } 112 | 113 | static SCRFD* g_scrfd = 0; 114 | static ncnn::Mutex lock; 115 | 116 | class MyNdkCamera : public NdkCameraWindow 117 | { 118 | public: 119 | virtual void on_image_render(cv::Mat& rgb) const; 120 | }; 121 | 122 | void MyNdkCamera::on_image_render(cv::Mat& rgb) const 123 | { 124 | // scrfd 125 | { 126 | ncnn::MutexLockGuard g(lock); 127 | 128 | if (g_scrfd) 129 | { 130 | std::vector faceobjects; 131 | g_scrfd->detect(rgb, faceobjects); 132 | 133 | g_scrfd->draw(rgb, faceobjects); 134 | } 135 | else 136 | { 137 | draw_unsupported(rgb); 138 | } 139 | } 140 | 141 | draw_fps(rgb); 142 | } 143 | 144 | static MyNdkCamera* g_camera = 0; 145 | 146 | extern "C" { 147 | 148 | JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved) 149 | { 150 | __android_log_print(ANDROID_LOG_DEBUG, "ncnn", "JNI_OnLoad"); 151 | 152 | g_camera = new MyNdkCamera; 153 | 154 | return JNI_VERSION_1_4; 155 | } 156 | 157 | JNIEXPORT void JNI_OnUnload(JavaVM* vm, void* reserved) 158 | { 159 | __android_log_print(ANDROID_LOG_DEBUG, "ncnn", "JNI_OnUnload"); 160 | 161 | { 162 | ncnn::MutexLockGuard g(lock); 163 | 164 | delete g_scrfd; 165 | g_scrfd = 0; 166 | } 167 | 168 | delete g_camera; 169 | g_camera = 0; 170 | } 171 | 172 | // public native boolean loadModel(AssetManager mgr, int modelid, int cpugpu); 173 | JNIEXPORT jboolean JNICALL Java_com_tencent_scrfdncnn_SCRFDNcnn_loadModel(JNIEnv* env, jobject thiz, jobject assetManager, jint modelid, jint cpugpu) 174 | { 175 | if (modelid < 0 || modelid > 6 || cpugpu < 0 || cpugpu > 1) 176 | { 177 | return JNI_FALSE; 178 | } 179 | 180 | AAssetManager* mgr = AAssetManager_fromJava(env, assetManager); 181 | 182 | __android_log_print(ANDROID_LOG_DEBUG, "ncnn", "loadModel %p", mgr); 183 | 184 | const char* modeltypes[] = 185 | { 186 | "500m", 187 | "1g", 188 | }; 189 | 190 | const char* modeltype = modeltypes[(int)modelid]; 191 | bool use_gpu = (int)cpugpu == 1; 192 | 193 | // reload 194 | { 195 | ncnn::MutexLockGuard g(lock); 196 | 197 | if (use_gpu && ncnn::get_gpu_count() == 0) 198 | { 199 | // no gpu 200 | delete g_scrfd; 201 | g_scrfd = 0; 202 | } 203 | else 204 | { 205 | if (!g_scrfd) 206 | g_scrfd = new SCRFD; 207 | g_scrfd->load(mgr, modeltype, use_gpu); 208 | } 209 | } 210 | 211 | return JNI_TRUE; 212 | } 213 | 214 | // public native boolean openCamera(int facing); 215 | JNIEXPORT jboolean JNICALL Java_com_tencent_scrfdncnn_SCRFDNcnn_openCamera(JNIEnv* env, jobject thiz, jint facing) 216 | { 217 | if (facing < 0 || facing > 1) 218 | return JNI_FALSE; 219 | 220 | __android_log_print(ANDROID_LOG_DEBUG, "ncnn", "openCamera %d", facing); 221 | 222 | g_camera->open((int)facing); 223 | 224 | return JNI_TRUE; 225 | } 226 | 227 | // public native boolean closeCamera(); 228 | JNIEXPORT jboolean JNICALL Java_com_tencent_scrfdncnn_SCRFDNcnn_closeCamera(JNIEnv* env, jobject thiz) 229 | { 230 | __android_log_print(ANDROID_LOG_DEBUG, "ncnn", "closeCamera"); 231 | 232 | g_camera->close(); 233 | 234 | return JNI_TRUE; 235 | } 236 | 237 | // public native boolean setOutputWindow(Surface surface); 238 | JNIEXPORT jboolean JNICALL Java_com_tencent_scrfdncnn_SCRFDNcnn_setOutputWindow(JNIEnv* env, jobject thiz, jobject surface) 239 | { 240 | ANativeWindow* win = ANativeWindow_fromSurface(env, surface); 241 | 242 | __android_log_print(ANDROID_LOG_DEBUG, "ncnn", "setOutputWindow %p", win); 243 | 244 | g_camera->set_window(win); 245 | 246 | return JNI_TRUE; 247 | } 248 | 249 | } 250 | -------------------------------------------------------------------------------- /ncnn-android-scrfd-master/app/src/main/res/layout/main.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 11 | 12 |