├── 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 | 
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 | 
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 |
17 |
18 |
19 |
20 |
24 |
25 |
31 |
32 |
38 |
39 |
40 |
41 |
45 |
46 |
47 |
--------------------------------------------------------------------------------
/ncnn-android-scrfd-master/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | scrfdncnn
4 |
5 | - 500m
6 | - 1g
7 |
8 |
9 | - CPU
10 | - GPU
11 |
12 |
13 |
--------------------------------------------------------------------------------
/ncnn-android-scrfd-master/build.gradle:
--------------------------------------------------------------------------------
1 | // Top-level build file where you can add configuration options common to all sub-projects/modules.
2 | buildscript {
3 | repositories {
4 | jcenter()
5 | google()
6 | }
7 | dependencies {
8 | classpath 'com.android.tools.build:gradle:3.5.0'
9 | }
10 | }
11 |
12 | allprojects {
13 | repositories {
14 | jcenter()
15 | google()
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/ncnn-android-scrfd-master/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FeiGeChuanShu/ncnn_Android_face/83ecdf198aeb8073450238977a52695eab17cf51/ncnn-android-scrfd-master/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/ncnn-android-scrfd-master/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Sun Sep 08 23:09:42 CST 2019
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
7 |
--------------------------------------------------------------------------------
/ncnn-android-scrfd-master/gradlew:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env sh
2 |
3 | ##############################################################################
4 | ##
5 | ## Gradle start up script for UN*X
6 | ##
7 | ##############################################################################
8 |
9 | # Attempt to set APP_HOME
10 | # Resolve links: $0 may be a link
11 | PRG="$0"
12 | # Need this for relative symlinks.
13 | while [ -h "$PRG" ] ; do
14 | ls=`ls -ld "$PRG"`
15 | link=`expr "$ls" : '.*-> \(.*\)$'`
16 | if expr "$link" : '/.*' > /dev/null; then
17 | PRG="$link"
18 | else
19 | PRG=`dirname "$PRG"`"/$link"
20 | fi
21 | done
22 | SAVED="`pwd`"
23 | cd "`dirname \"$PRG\"`/" >/dev/null
24 | APP_HOME="`pwd -P`"
25 | cd "$SAVED" >/dev/null
26 |
27 | APP_NAME="Gradle"
28 | APP_BASE_NAME=`basename "$0"`
29 |
30 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
31 | DEFAULT_JVM_OPTS=""
32 |
33 | # Use the maximum available, or set MAX_FD != -1 to use that value.
34 | MAX_FD="maximum"
35 |
36 | warn () {
37 | echo "$*"
38 | }
39 |
40 | die () {
41 | echo
42 | echo "$*"
43 | echo
44 | exit 1
45 | }
46 |
47 | # OS specific support (must be 'true' or 'false').
48 | cygwin=false
49 | msys=false
50 | darwin=false
51 | nonstop=false
52 | case "`uname`" in
53 | CYGWIN* )
54 | cygwin=true
55 | ;;
56 | Darwin* )
57 | darwin=true
58 | ;;
59 | MINGW* )
60 | msys=true
61 | ;;
62 | NONSTOP* )
63 | nonstop=true
64 | ;;
65 | esac
66 |
67 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
68 |
69 | # Determine the Java command to use to start the JVM.
70 | if [ -n "$JAVA_HOME" ] ; then
71 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
72 | # IBM's JDK on AIX uses strange locations for the executables
73 | JAVACMD="$JAVA_HOME/jre/sh/java"
74 | else
75 | JAVACMD="$JAVA_HOME/bin/java"
76 | fi
77 | if [ ! -x "$JAVACMD" ] ; then
78 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
79 |
80 | Please set the JAVA_HOME variable in your environment to match the
81 | location of your Java installation."
82 | fi
83 | else
84 | JAVACMD="java"
85 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
86 |
87 | Please set the JAVA_HOME variable in your environment to match the
88 | location of your Java installation."
89 | fi
90 |
91 | # Increase the maximum file descriptors if we can.
92 | if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
93 | MAX_FD_LIMIT=`ulimit -H -n`
94 | if [ $? -eq 0 ] ; then
95 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
96 | MAX_FD="$MAX_FD_LIMIT"
97 | fi
98 | ulimit -n $MAX_FD
99 | if [ $? -ne 0 ] ; then
100 | warn "Could not set maximum file descriptor limit: $MAX_FD"
101 | fi
102 | else
103 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
104 | fi
105 | fi
106 |
107 | # For Darwin, add options to specify how the application appears in the dock
108 | if $darwin; then
109 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
110 | fi
111 |
112 | # For Cygwin, switch paths to Windows format before running java
113 | if $cygwin ; then
114 | APP_HOME=`cygpath --path --mixed "$APP_HOME"`
115 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
116 | JAVACMD=`cygpath --unix "$JAVACMD"`
117 |
118 | # We build the pattern for arguments to be converted via cygpath
119 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
120 | SEP=""
121 | for dir in $ROOTDIRSRAW ; do
122 | ROOTDIRS="$ROOTDIRS$SEP$dir"
123 | SEP="|"
124 | done
125 | OURCYGPATTERN="(^($ROOTDIRS))"
126 | # Add a user-defined pattern to the cygpath arguments
127 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then
128 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
129 | fi
130 | # Now convert the arguments - kludge to limit ourselves to /bin/sh
131 | i=0
132 | for arg in "$@" ; do
133 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
134 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
135 |
136 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
137 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
138 | else
139 | eval `echo args$i`="\"$arg\""
140 | fi
141 | i=$((i+1))
142 | done
143 | case $i in
144 | (0) set -- ;;
145 | (1) set -- "$args0" ;;
146 | (2) set -- "$args0" "$args1" ;;
147 | (3) set -- "$args0" "$args1" "$args2" ;;
148 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
149 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
150 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
151 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
152 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
153 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
154 | esac
155 | fi
156 |
157 | # Escape application args
158 | save () {
159 | for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
160 | echo " "
161 | }
162 | APP_ARGS=$(save "$@")
163 |
164 | # Collect all arguments for the java command, following the shell quoting and substitution rules
165 | eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
166 |
167 | # by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
168 | if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
169 | cd "$(dirname "$0")"
170 | fi
171 |
172 | exec "$JAVACMD" "$@"
173 |
--------------------------------------------------------------------------------
/ncnn-android-scrfd-master/gradlew.bat:
--------------------------------------------------------------------------------
1 | @if "%DEBUG%" == "" @echo off
2 | @rem ##########################################################################
3 | @rem
4 | @rem Gradle startup script for Windows
5 | @rem
6 | @rem ##########################################################################
7 |
8 | @rem Set local scope for the variables with windows NT shell
9 | if "%OS%"=="Windows_NT" setlocal
10 |
11 | set DIRNAME=%~dp0
12 | if "%DIRNAME%" == "" set DIRNAME=.
13 | set APP_BASE_NAME=%~n0
14 | set APP_HOME=%DIRNAME%
15 |
16 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
17 | set DEFAULT_JVM_OPTS=
18 |
19 | @rem Find java.exe
20 | if defined JAVA_HOME goto findJavaFromJavaHome
21 |
22 | set JAVA_EXE=java.exe
23 | %JAVA_EXE% -version >NUL 2>&1
24 | if "%ERRORLEVEL%" == "0" goto init
25 |
26 | echo.
27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
28 | echo.
29 | echo Please set the JAVA_HOME variable in your environment to match the
30 | echo location of your Java installation.
31 |
32 | goto fail
33 |
34 | :findJavaFromJavaHome
35 | set JAVA_HOME=%JAVA_HOME:"=%
36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
37 |
38 | if exist "%JAVA_EXE%" goto init
39 |
40 | echo.
41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
42 | echo.
43 | echo Please set the JAVA_HOME variable in your environment to match the
44 | echo location of your Java installation.
45 |
46 | goto fail
47 |
48 | :init
49 | @rem Get command-line arguments, handling Windows variants
50 |
51 | if not "%OS%" == "Windows_NT" goto win9xME_args
52 |
53 | :win9xME_args
54 | @rem Slurp the command line arguments.
55 | set CMD_LINE_ARGS=
56 | set _SKIP=2
57 |
58 | :win9xME_args_slurp
59 | if "x%~1" == "x" goto execute
60 |
61 | set CMD_LINE_ARGS=%*
62 |
63 | :execute
64 | @rem Setup the command line
65 |
66 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
67 |
68 | @rem Execute Gradle
69 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
70 |
71 | :end
72 | @rem End local scope for the variables with windows NT shell
73 | if "%ERRORLEVEL%"=="0" goto mainEnd
74 |
75 | :fail
76 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
77 | rem the _cmd.exe /c_ return code!
78 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
79 | exit /b 1
80 |
81 | :mainEnd
82 | if "%OS%"=="Windows_NT" endlocal
83 |
84 | :omega
85 |
--------------------------------------------------------------------------------
/ncnn-android-scrfd-master/local.properties:
--------------------------------------------------------------------------------
1 | ## This file must *NOT* be checked into Version Control Systems,
2 | # as it contains information specific to your local configuration.
3 | #
4 | # Location of the SDK. This is only used by Gradle.
5 | # For customization when using a Version Control System, please read the
6 | # header note.
7 | #Mon May 17 14:14:17 CST 2021
8 | sdk.dir=D\:\\Android
9 |
--------------------------------------------------------------------------------
/ncnn-android-scrfd-master/screenshot.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FeiGeChuanShu/ncnn_Android_face/83ecdf198aeb8073450238977a52695eab17cf51/ncnn-android-scrfd-master/screenshot.jpg
--------------------------------------------------------------------------------
/ncnn-android-scrfd-master/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app'
2 |
--------------------------------------------------------------------------------
/ncnn-android-yolov5_face/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.ncnnyoloface"
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-yolov5_face/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/ncnn-android-yolov5_face/app/src/main/assets/yolov5n-0.5.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FeiGeChuanShu/ncnn_Android_face/83ecdf198aeb8073450238977a52695eab17cf51/ncnn-android-yolov5_face/app/src/main/assets/yolov5n-0.5.bin
--------------------------------------------------------------------------------
/ncnn-android-yolov5_face/app/src/main/assets/yolov5n.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FeiGeChuanShu/ncnn_Android_face/83ecdf198aeb8073450238977a52695eab17cf51/ncnn-android-yolov5_face/app/src/main/assets/yolov5n.bin
--------------------------------------------------------------------------------
/ncnn-android-yolov5_face/app/src/main/java/com/tencent/ncnnyoloface/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.ncnnyoloface;
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 NcnnYoloFace ncnnyoloface = new NcnnYoloFace();
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 | ncnnyoloface.closeCamera();
71 |
72 | ncnnyoloface.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 = ncnnyoloface.loadModel(getAssets(), current_model, current_cpugpu);
120 | if (!ret_init)
121 | {
122 | Log.e("MainActivity", "ncnnyoloface loadModel failed");
123 | }
124 | }
125 |
126 | @Override
127 | public void surfaceChanged(SurfaceHolder holder, int format, int width, int height)
128 | {
129 | ncnnyoloface.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 | ncnnyoloface.openCamera(facing);
153 | }
154 |
155 | @Override
156 | public void onPause()
157 | {
158 | super.onPause();
159 |
160 | ncnnyoloface.closeCamera();
161 | }
162 | }
163 |
--------------------------------------------------------------------------------
/ncnn-android-yolov5_face/app/src/main/java/com/tencent/ncnnyoloface/NcnnYoloFace.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.ncnnyoloface;
16 |
17 | import android.content.res.AssetManager;
18 | import android.view.Surface;
19 |
20 | public class NcnnYoloFace
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("ncnnyoloface");
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/ncnn-android-yolov5_face/app/src/main/jni/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | project(ncnnyoloface)
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(ncnnyoloface SHARED yolofacencnn.cpp yoloface.cpp ndkcamera.cpp)
12 |
13 | target_link_libraries(ncnnyoloface ncnn ${OpenCV_LIBS} camera2ndk mediandk)
14 |
--------------------------------------------------------------------------------
/ncnn-android-yolov5_face/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-yolov5_face/app/src/main/jni/yoloface.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 "yoloface.h"
16 |
17 | #include
18 | #include
19 |
20 | #include "cpu.h"
21 | #define clip(x, y) (x < 0 ? 0 : (x > y ? y : x))
22 |
23 |
24 | static inline float intersection_area(const Object& a, const Object& b)
25 | {
26 | cv::Rect_ inter = a.rect & b.rect;
27 | return inter.area();
28 | }
29 |
30 | static void qsort_descent_inplace(std::vector