diff --git a/app/src/main/assets/ji-sim-opt.bin b/app/src/main/assets/ji-sim-opt.bin new file mode 100644 index 0000000..a2695b4 --- /dev/null +++ b/app/src/main/assets/ji-sim-opt.bin Binary files differ diff --git a/app/src/main/assets/ji-sim-opt.bin b/app/src/main/assets/ji-sim-opt.bin new file mode 100644 index 0000000..a2695b4 --- /dev/null +++ b/app/src/main/assets/ji-sim-opt.bin Binary files differ diff --git a/app/src/main/assets/ji-sim-opt.param b/app/src/main/assets/ji-sim-opt.param new file mode 100644 index 0000000..1d0e424 --- /dev/null +++ b/app/src/main/assets/ji-sim-opt.param @@ -0,0 +1,183 @@ +7767517 +181 217 +Input images 0 1 images +Convolution Conv_0 1 1 images 128 0=32 1=3 3=2 4=1 5=1 6=864 +Swish Mul_2 1 1 128 130 +Convolution Conv_3 1 1 130 131 0=64 1=3 3=2 4=1 5=1 6=18432 +Swish Mul_5 1 1 131 133 +Convolution Conv_6 1 1 133 134 0=64 1=1 5=1 6=4096 +Swish Mul_8 1 1 134 136 +Slice Split_9 1 2 136 137 138 -23300=2,32,-233 +Split splitncnn_0 1 3 138 138_splitncnn_0 138_splitncnn_1 138_splitncnn_2 +Convolution Conv_10 1 1 138_splitncnn_2 139 0=32 1=3 4=1 5=1 6=9216 +Swish Mul_12 1 1 139 141 +Convolution Conv_13 1 1 141 142 0=32 1=3 4=1 5=1 6=9216 +Swish Mul_15 1 1 142 144 +BinaryOp Add_16 2 1 138_splitncnn_1 144 145 +Concat Concat_17 3 1 137 138_splitncnn_0 145 146 +Convolution Conv_18 1 1 146 147 0=64 1=1 5=1 6=6144 +Swish Mul_20 1 1 147 149 +Convolution Conv_21 1 1 149 150 0=128 1=3 3=2 4=1 5=1 6=73728 +Swish Mul_23 1 1 150 152 +Convolution Conv_24 1 1 152 153 0=128 1=1 5=1 6=16384 +Swish Mul_26 1 1 153 155 +Slice Split_27 1 2 155 156 157 -23300=2,64,-233 +Split splitncnn_1 1 3 157 157_splitncnn_0 157_splitncnn_1 157_splitncnn_2 +Convolution Conv_28 1 1 157_splitncnn_2 158 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_30 1 1 158 160 +Convolution Conv_31 1 1 160 161 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_33 1 1 161 163 +BinaryOp Add_34 2 1 157_splitncnn_1 163 164 +Split splitncnn_2 1 3 164 164_splitncnn_0 164_splitncnn_1 164_splitncnn_2 +Convolution Conv_35 1 1 164_splitncnn_2 165 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_37 1 1 165 167 +Convolution Conv_38 1 1 167 168 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_40 1 1 168 170 +BinaryOp Add_41 2 1 164_splitncnn_1 170 171 +Concat Concat_42 4 1 156 157_splitncnn_0 164_splitncnn_0 171 172 +Convolution Conv_43 1 1 172 173 0=128 1=1 5=1 6=32768 +Swish Mul_45 1 1 173 175 +Split splitncnn_3 1 2 175 175_splitncnn_0 175_splitncnn_1 +Convolution Conv_46 1 1 175_splitncnn_1 176 0=256 1=3 3=2 4=1 5=1 6=294912 +Swish Mul_48 1 1 176 178 +Convolution Conv_49 1 1 178 179 0=256 1=1 5=1 6=65536 +Swish Mul_51 1 1 179 181 +Slice Split_52 1 2 181 182 183 -23300=2,128,-233 +Split splitncnn_4 1 3 183 183_splitncnn_0 183_splitncnn_1 183_splitncnn_2 +Convolution Conv_53 1 1 183_splitncnn_2 184 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_55 1 1 184 186 +Convolution Conv_56 1 1 186 187 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_58 1 1 187 189 +BinaryOp Add_59 2 1 183_splitncnn_1 189 190 +Split splitncnn_5 1 3 190 190_splitncnn_0 190_splitncnn_1 190_splitncnn_2 +Convolution Conv_60 1 1 190_splitncnn_2 191 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_62 1 1 191 193 +Convolution Conv_63 1 1 193 194 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_65 1 1 194 196 +BinaryOp Add_66 2 1 190_splitncnn_1 196 197 +Concat Concat_67 4 1 182 183_splitncnn_0 190_splitncnn_0 197 198 +Convolution Conv_68 1 1 198 199 0=256 1=1 5=1 6=131072 +Swish Mul_70 1 1 199 201 +Split splitncnn_6 1 2 201 201_splitncnn_0 201_splitncnn_1 +Convolution Conv_71 1 1 201_splitncnn_1 202 0=512 1=3 3=2 4=1 5=1 6=1179648 +Swish Mul_73 1 1 202 204 +Convolution Conv_74 1 1 204 205 0=512 1=1 5=1 6=262144 +Swish Mul_76 1 1 205 207 +Slice Split_77 1 2 207 208 209 -23300=2,256,-233 +Split splitncnn_7 1 3 209 209_splitncnn_0 209_splitncnn_1 209_splitncnn_2 +Convolution Conv_78 1 1 209_splitncnn_2 210 0=256 1=3 4=1 5=1 6=589824 +Swish Mul_80 1 1 210 212 +Convolution Conv_81 1 1 212 213 0=256 1=3 4=1 5=1 6=589824 +Swish Mul_83 1 1 213 215 +BinaryOp Add_84 2 1 209_splitncnn_1 215 216 +Concat Concat_85 3 1 208 209_splitncnn_0 216 217 +Convolution Conv_86 1 1 217 218 0=512 1=1 5=1 6=393216 +Swish Mul_88 1 1 218 220 +Convolution Conv_89 1 1 220 221 0=256 1=1 5=1 6=131072 +Swish Mul_91 1 1 221 223 +Split splitncnn_8 1 2 223 223_splitncnn_0 223_splitncnn_1 +Pooling MaxPool_92 1 1 223_splitncnn_1 224 1=5 3=2 5=1 +Split splitncnn_9 1 2 224 224_splitncnn_0 224_splitncnn_1 +Pooling MaxPool_93 1 1 224_splitncnn_1 225 1=5 3=2 5=1 +Split splitncnn_10 1 2 225 225_splitncnn_0 225_splitncnn_1 +Pooling MaxPool_94 1 1 225_splitncnn_1 226 1=5 3=2 5=1 +Concat Concat_95 4 1 223_splitncnn_0 224_splitncnn_0 225_splitncnn_0 226 227 +Convolution Conv_96 1 1 227 228 0=512 1=1 5=1 6=524288 +Swish Mul_98 1 1 228 230 +Split splitncnn_11 1 2 230 230_splitncnn_0 230_splitncnn_1 +Interp Resize_100 1 1 230_splitncnn_1 235 0=1 1=2.000000e+00 2=2.000000e+00 +Concat Concat_101 2 1 235 201_splitncnn_0 236 +Convolution Conv_102 1 1 236 237 0=256 1=1 5=1 6=196608 +Swish Mul_104 1 1 237 239 +Slice Split_105 1 2 239 240 241 -23300=2,128,-233 +Split splitncnn_12 1 2 241 241_splitncnn_0 241_splitncnn_1 +Convolution Conv_106 1 1 241_splitncnn_1 242 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_108 1 1 242 244 +Convolution Conv_109 1 1 244 245 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_111 1 1 245 247 +Concat Concat_112 3 1 240 241_splitncnn_0 247 248 +Convolution Conv_113 1 1 248 249 0=256 1=1 5=1 6=98304 +Swish Mul_115 1 1 249 251 +Split splitncnn_13 1 2 251 251_splitncnn_0 251_splitncnn_1 +Interp Resize_117 1 1 251_splitncnn_1 256 0=1 1=2.000000e+00 2=2.000000e+00 +Concat Concat_118 2 1 256 175_splitncnn_0 257 +Convolution Conv_119 1 1 257 258 0=128 1=1 5=1 6=49152 +Swish Mul_121 1 1 258 260 +Slice Split_122 1 2 260 261 262 -23300=2,64,-233 +Split splitncnn_14 1 2 262 262_splitncnn_0 262_splitncnn_1 +Convolution Conv_123 1 1 262_splitncnn_1 263 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_125 1 1 263 265 +Convolution Conv_126 1 1 265 266 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_128 1 1 266 268 +Concat Concat_129 3 1 261 262_splitncnn_0 268 269 +Convolution Conv_130 1 1 269 270 0=128 1=1 5=1 6=24576 +Swish Mul_132 1 1 270 272 +Split splitncnn_15 1 3 272 272_splitncnn_0 272_splitncnn_1 272_splitncnn_2 +Convolution Conv_133 1 1 272_splitncnn_2 273 0=128 1=3 3=2 4=1 5=1 6=147456 +Swish Mul_135 1 1 273 275 +Concat Concat_136 2 1 275 251_splitncnn_0 276 +Convolution Conv_137 1 1 276 277 0=256 1=1 5=1 6=98304 +Swish Mul_139 1 1 277 279 +Slice Split_140 1 2 279 280 281 -23300=2,128,-233 +Split splitncnn_16 1 2 281 281_splitncnn_0 281_splitncnn_1 +Convolution Conv_141 1 1 281_splitncnn_1 282 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_143 1 1 282 284 +Convolution Conv_144 1 1 284 285 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_146 1 1 285 287 +Concat Concat_147 3 1 280 281_splitncnn_0 287 288 +Convolution Conv_148 1 1 288 289 0=256 1=1 5=1 6=98304 +Swish Mul_150 1 1 289 291 +Split splitncnn_17 1 3 291 291_splitncnn_0 291_splitncnn_1 291_splitncnn_2 +Convolution Conv_151 1 1 291_splitncnn_2 292 0=256 1=3 3=2 4=1 5=1 6=589824 +Swish Mul_153 1 1 292 294 +Concat Concat_154 2 1 294 230_splitncnn_0 295 +Convolution Conv_155 1 1 295 296 0=512 1=1 5=1 6=393216 +Swish Mul_157 1 1 296 298 +Slice Split_158 1 2 298 299 300 -23300=2,256,-233 +Split splitncnn_18 1 2 300 300_splitncnn_0 300_splitncnn_1 +Convolution Conv_159 1 1 300_splitncnn_1 301 0=256 1=3 4=1 5=1 6=589824 +Swish Mul_161 1 1 301 303 +Convolution Conv_162 1 1 303 304 0=256 1=3 4=1 5=1 6=589824 +Swish Mul_164 1 1 304 306 +Concat Concat_165 3 1 299 300_splitncnn_0 306 307 +Convolution Conv_166 1 1 307 308 0=512 1=1 5=1 6=393216 +Swish Mul_168 1 1 308 310 +Split splitncnn_19 1 2 310 310_splitncnn_0 310_splitncnn_1 +Convolution Conv_169 1 1 272_splitncnn_1 311 0=64 1=3 4=1 5=1 6=73728 +Swish Mul_171 1 1 311 313 +Convolution Conv_172 1 1 313 314 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_174 1 1 314 316 +Convolution Conv_175 1 1 316 317 0=64 1=1 5=1 6=4096 +Convolution Conv_176 1 1 272_splitncnn_0 318 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_178 1 1 318 320 +Convolution Conv_179 1 1 320 321 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_181 1 1 321 323 +Convolution Conv_182 1 1 323 324 0=5 1=1 5=1 6=640 +Concat Concat_183 2 1 317 324 325 +Convolution Conv_184 1 1 291_splitncnn_1 326 0=64 1=3 4=1 5=1 6=147456 +Swish Mul_186 1 1 326 328 +Convolution Conv_187 1 1 328 329 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_189 1 1 329 331 +Convolution Conv_190 1 1 331 332 0=64 1=1 5=1 6=4096 +Convolution Conv_191 1 1 291_splitncnn_0 333 0=128 1=3 4=1 5=1 6=294912 +Swish Mul_193 1 1 333 335 +Convolution Conv_194 1 1 335 336 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_196 1 1 336 338 +Convolution Conv_197 1 1 338 339 0=5 1=1 5=1 6=640 +Concat Concat_198 2 1 332 339 340 +Convolution Conv_199 1 1 310_splitncnn_1 341 0=64 1=3 4=1 5=1 6=294912 +Swish Mul_201 1 1 341 343 +Convolution Conv_202 1 1 343 344 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_204 1 1 344 346 +Convolution Conv_205 1 1 346 347 0=64 1=1 5=1 6=4096 +Convolution Conv_206 1 1 310_splitncnn_0 348 0=128 1=3 4=1 5=1 6=589824 +Swish Mul_208 1 1 348 350 +Convolution Conv_209 1 1 350 351 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_211 1 1 351 353 +Convolution Conv_212 1 1 353 354 0=5 1=1 5=1 6=640 +Concat Concat_213 2 1 347 354 355 +Reshape Reshape_219 1 1 325 365 0=-1 1=69 +Reshape Reshape_222 1 1 340 372 0=-1 1=69 +Reshape Reshape_225 1 1 355 379 0=-1 1=69 +Concat Concat_226 3 1 365 372 379 380 0=1 +Permute Transpose_227 1 1 380 output 0=1 diff --git a/app/src/main/assets/ji-sim-opt.bin b/app/src/main/assets/ji-sim-opt.bin new file mode 100644 index 0000000..a2695b4 --- /dev/null +++ b/app/src/main/assets/ji-sim-opt.bin Binary files differ diff --git a/app/src/main/assets/ji-sim-opt.param b/app/src/main/assets/ji-sim-opt.param new file mode 100644 index 0000000..1d0e424 --- /dev/null +++ b/app/src/main/assets/ji-sim-opt.param @@ -0,0 +1,183 @@ +7767517 +181 217 +Input images 0 1 images +Convolution Conv_0 1 1 images 128 0=32 1=3 3=2 4=1 5=1 6=864 +Swish Mul_2 1 1 128 130 +Convolution Conv_3 1 1 130 131 0=64 1=3 3=2 4=1 5=1 6=18432 +Swish Mul_5 1 1 131 133 +Convolution Conv_6 1 1 133 134 0=64 1=1 5=1 6=4096 +Swish Mul_8 1 1 134 136 +Slice Split_9 1 2 136 137 138 -23300=2,32,-233 +Split splitncnn_0 1 3 138 138_splitncnn_0 138_splitncnn_1 138_splitncnn_2 +Convolution Conv_10 1 1 138_splitncnn_2 139 0=32 1=3 4=1 5=1 6=9216 +Swish Mul_12 1 1 139 141 +Convolution Conv_13 1 1 141 142 0=32 1=3 4=1 5=1 6=9216 +Swish Mul_15 1 1 142 144 +BinaryOp Add_16 2 1 138_splitncnn_1 144 145 +Concat Concat_17 3 1 137 138_splitncnn_0 145 146 +Convolution Conv_18 1 1 146 147 0=64 1=1 5=1 6=6144 +Swish Mul_20 1 1 147 149 +Convolution Conv_21 1 1 149 150 0=128 1=3 3=2 4=1 5=1 6=73728 +Swish Mul_23 1 1 150 152 +Convolution Conv_24 1 1 152 153 0=128 1=1 5=1 6=16384 +Swish Mul_26 1 1 153 155 +Slice Split_27 1 2 155 156 157 -23300=2,64,-233 +Split splitncnn_1 1 3 157 157_splitncnn_0 157_splitncnn_1 157_splitncnn_2 +Convolution Conv_28 1 1 157_splitncnn_2 158 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_30 1 1 158 160 +Convolution Conv_31 1 1 160 161 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_33 1 1 161 163 +BinaryOp Add_34 2 1 157_splitncnn_1 163 164 +Split splitncnn_2 1 3 164 164_splitncnn_0 164_splitncnn_1 164_splitncnn_2 +Convolution Conv_35 1 1 164_splitncnn_2 165 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_37 1 1 165 167 +Convolution Conv_38 1 1 167 168 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_40 1 1 168 170 +BinaryOp Add_41 2 1 164_splitncnn_1 170 171 +Concat Concat_42 4 1 156 157_splitncnn_0 164_splitncnn_0 171 172 +Convolution Conv_43 1 1 172 173 0=128 1=1 5=1 6=32768 +Swish Mul_45 1 1 173 175 +Split splitncnn_3 1 2 175 175_splitncnn_0 175_splitncnn_1 +Convolution Conv_46 1 1 175_splitncnn_1 176 0=256 1=3 3=2 4=1 5=1 6=294912 +Swish Mul_48 1 1 176 178 +Convolution Conv_49 1 1 178 179 0=256 1=1 5=1 6=65536 +Swish Mul_51 1 1 179 181 +Slice Split_52 1 2 181 182 183 -23300=2,128,-233 +Split splitncnn_4 1 3 183 183_splitncnn_0 183_splitncnn_1 183_splitncnn_2 +Convolution Conv_53 1 1 183_splitncnn_2 184 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_55 1 1 184 186 +Convolution Conv_56 1 1 186 187 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_58 1 1 187 189 +BinaryOp Add_59 2 1 183_splitncnn_1 189 190 +Split splitncnn_5 1 3 190 190_splitncnn_0 190_splitncnn_1 190_splitncnn_2 +Convolution Conv_60 1 1 190_splitncnn_2 191 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_62 1 1 191 193 +Convolution Conv_63 1 1 193 194 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_65 1 1 194 196 +BinaryOp Add_66 2 1 190_splitncnn_1 196 197 +Concat Concat_67 4 1 182 183_splitncnn_0 190_splitncnn_0 197 198 +Convolution Conv_68 1 1 198 199 0=256 1=1 5=1 6=131072 +Swish Mul_70 1 1 199 201 +Split splitncnn_6 1 2 201 201_splitncnn_0 201_splitncnn_1 +Convolution Conv_71 1 1 201_splitncnn_1 202 0=512 1=3 3=2 4=1 5=1 6=1179648 +Swish Mul_73 1 1 202 204 +Convolution Conv_74 1 1 204 205 0=512 1=1 5=1 6=262144 +Swish Mul_76 1 1 205 207 +Slice Split_77 1 2 207 208 209 -23300=2,256,-233 +Split splitncnn_7 1 3 209 209_splitncnn_0 209_splitncnn_1 209_splitncnn_2 +Convolution Conv_78 1 1 209_splitncnn_2 210 0=256 1=3 4=1 5=1 6=589824 +Swish Mul_80 1 1 210 212 +Convolution Conv_81 1 1 212 213 0=256 1=3 4=1 5=1 6=589824 +Swish Mul_83 1 1 213 215 +BinaryOp Add_84 2 1 209_splitncnn_1 215 216 +Concat Concat_85 3 1 208 209_splitncnn_0 216 217 +Convolution Conv_86 1 1 217 218 0=512 1=1 5=1 6=393216 +Swish Mul_88 1 1 218 220 +Convolution Conv_89 1 1 220 221 0=256 1=1 5=1 6=131072 +Swish Mul_91 1 1 221 223 +Split splitncnn_8 1 2 223 223_splitncnn_0 223_splitncnn_1 +Pooling MaxPool_92 1 1 223_splitncnn_1 224 1=5 3=2 5=1 +Split splitncnn_9 1 2 224 224_splitncnn_0 224_splitncnn_1 +Pooling MaxPool_93 1 1 224_splitncnn_1 225 1=5 3=2 5=1 +Split splitncnn_10 1 2 225 225_splitncnn_0 225_splitncnn_1 +Pooling MaxPool_94 1 1 225_splitncnn_1 226 1=5 3=2 5=1 +Concat Concat_95 4 1 223_splitncnn_0 224_splitncnn_0 225_splitncnn_0 226 227 +Convolution Conv_96 1 1 227 228 0=512 1=1 5=1 6=524288 +Swish Mul_98 1 1 228 230 +Split splitncnn_11 1 2 230 230_splitncnn_0 230_splitncnn_1 +Interp Resize_100 1 1 230_splitncnn_1 235 0=1 1=2.000000e+00 2=2.000000e+00 +Concat Concat_101 2 1 235 201_splitncnn_0 236 +Convolution Conv_102 1 1 236 237 0=256 1=1 5=1 6=196608 +Swish Mul_104 1 1 237 239 +Slice Split_105 1 2 239 240 241 -23300=2,128,-233 +Split splitncnn_12 1 2 241 241_splitncnn_0 241_splitncnn_1 +Convolution Conv_106 1 1 241_splitncnn_1 242 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_108 1 1 242 244 +Convolution Conv_109 1 1 244 245 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_111 1 1 245 247 +Concat Concat_112 3 1 240 241_splitncnn_0 247 248 +Convolution Conv_113 1 1 248 249 0=256 1=1 5=1 6=98304 +Swish Mul_115 1 1 249 251 +Split splitncnn_13 1 2 251 251_splitncnn_0 251_splitncnn_1 +Interp Resize_117 1 1 251_splitncnn_1 256 0=1 1=2.000000e+00 2=2.000000e+00 +Concat Concat_118 2 1 256 175_splitncnn_0 257 +Convolution Conv_119 1 1 257 258 0=128 1=1 5=1 6=49152 +Swish Mul_121 1 1 258 260 +Slice Split_122 1 2 260 261 262 -23300=2,64,-233 +Split splitncnn_14 1 2 262 262_splitncnn_0 262_splitncnn_1 +Convolution Conv_123 1 1 262_splitncnn_1 263 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_125 1 1 263 265 +Convolution Conv_126 1 1 265 266 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_128 1 1 266 268 +Concat Concat_129 3 1 261 262_splitncnn_0 268 269 +Convolution Conv_130 1 1 269 270 0=128 1=1 5=1 6=24576 +Swish Mul_132 1 1 270 272 +Split splitncnn_15 1 3 272 272_splitncnn_0 272_splitncnn_1 272_splitncnn_2 +Convolution Conv_133 1 1 272_splitncnn_2 273 0=128 1=3 3=2 4=1 5=1 6=147456 +Swish Mul_135 1 1 273 275 +Concat Concat_136 2 1 275 251_splitncnn_0 276 +Convolution Conv_137 1 1 276 277 0=256 1=1 5=1 6=98304 +Swish Mul_139 1 1 277 279 +Slice Split_140 1 2 279 280 281 -23300=2,128,-233 +Split splitncnn_16 1 2 281 281_splitncnn_0 281_splitncnn_1 +Convolution Conv_141 1 1 281_splitncnn_1 282 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_143 1 1 282 284 +Convolution Conv_144 1 1 284 285 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_146 1 1 285 287 +Concat Concat_147 3 1 280 281_splitncnn_0 287 288 +Convolution Conv_148 1 1 288 289 0=256 1=1 5=1 6=98304 +Swish Mul_150 1 1 289 291 +Split splitncnn_17 1 3 291 291_splitncnn_0 291_splitncnn_1 291_splitncnn_2 +Convolution Conv_151 1 1 291_splitncnn_2 292 0=256 1=3 3=2 4=1 5=1 6=589824 +Swish Mul_153 1 1 292 294 +Concat Concat_154 2 1 294 230_splitncnn_0 295 +Convolution Conv_155 1 1 295 296 0=512 1=1 5=1 6=393216 +Swish Mul_157 1 1 296 298 +Slice Split_158 1 2 298 299 300 -23300=2,256,-233 +Split splitncnn_18 1 2 300 300_splitncnn_0 300_splitncnn_1 +Convolution Conv_159 1 1 300_splitncnn_1 301 0=256 1=3 4=1 5=1 6=589824 +Swish Mul_161 1 1 301 303 +Convolution Conv_162 1 1 303 304 0=256 1=3 4=1 5=1 6=589824 +Swish Mul_164 1 1 304 306 +Concat Concat_165 3 1 299 300_splitncnn_0 306 307 +Convolution Conv_166 1 1 307 308 0=512 1=1 5=1 6=393216 +Swish Mul_168 1 1 308 310 +Split splitncnn_19 1 2 310 310_splitncnn_0 310_splitncnn_1 +Convolution Conv_169 1 1 272_splitncnn_1 311 0=64 1=3 4=1 5=1 6=73728 +Swish Mul_171 1 1 311 313 +Convolution Conv_172 1 1 313 314 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_174 1 1 314 316 +Convolution Conv_175 1 1 316 317 0=64 1=1 5=1 6=4096 +Convolution Conv_176 1 1 272_splitncnn_0 318 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_178 1 1 318 320 +Convolution Conv_179 1 1 320 321 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_181 1 1 321 323 +Convolution Conv_182 1 1 323 324 0=5 1=1 5=1 6=640 +Concat Concat_183 2 1 317 324 325 +Convolution Conv_184 1 1 291_splitncnn_1 326 0=64 1=3 4=1 5=1 6=147456 +Swish Mul_186 1 1 326 328 +Convolution Conv_187 1 1 328 329 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_189 1 1 329 331 +Convolution Conv_190 1 1 331 332 0=64 1=1 5=1 6=4096 +Convolution Conv_191 1 1 291_splitncnn_0 333 0=128 1=3 4=1 5=1 6=294912 +Swish Mul_193 1 1 333 335 +Convolution Conv_194 1 1 335 336 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_196 1 1 336 338 +Convolution Conv_197 1 1 338 339 0=5 1=1 5=1 6=640 +Concat Concat_198 2 1 332 339 340 +Convolution Conv_199 1 1 310_splitncnn_1 341 0=64 1=3 4=1 5=1 6=294912 +Swish Mul_201 1 1 341 343 +Convolution Conv_202 1 1 343 344 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_204 1 1 344 346 +Convolution Conv_205 1 1 346 347 0=64 1=1 5=1 6=4096 +Convolution Conv_206 1 1 310_splitncnn_0 348 0=128 1=3 4=1 5=1 6=589824 +Swish Mul_208 1 1 348 350 +Convolution Conv_209 1 1 350 351 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_211 1 1 351 353 +Convolution Conv_212 1 1 353 354 0=5 1=1 5=1 6=640 +Concat Concat_213 2 1 347 354 355 +Reshape Reshape_219 1 1 325 365 0=-1 1=69 +Reshape Reshape_222 1 1 340 372 0=-1 1=69 +Reshape Reshape_225 1 1 355 379 0=-1 1=69 +Concat Concat_226 3 1 365 372 379 380 0=1 +Permute Transpose_227 1 1 380 output 0=1 diff --git a/app/src/main/cpp/yolo.cpp b/app/src/main/cpp/yolo.cpp index fd0427f..63017a4 100644 --- a/app/src/main/cpp/yolo.cpp +++ b/app/src/main/cpp/yolo.cpp @@ -426,7 +426,7 @@ int height = rgb.rows; //把opencv Mat转为 ncnn Mat - ncnn::Mat in = ncnn::Mat::from_pixels(rgb.data, ncnn::Mat::PIXEL_RGB2BGR, width, height); + ncnn::Mat in = ncnn::Mat::from_pixels(rgb.data, ncnn::Mat::PIXEL_RGB, width, height); std::vector cls_scores; { @@ -480,7 +480,7 @@ w = w * scale; } - ncnn::Mat in = ncnn::Mat::from_pixels_resize(rgb.data, ncnn::Mat::PIXEL_BGR2RGB, width, + ncnn::Mat in = ncnn::Mat::from_pixels_resize(rgb.data, ncnn::Mat::PIXEL_RGB, width, height, w, h); // pad to target_size rectangle @@ -631,7 +631,7 @@ } ncnn::Mat in = ncnn::Mat::from_pixels_resize( - rgb.data, ncnn::Mat::PIXEL_RGB2BGR, width, height, w, h + rgb.data, ncnn::Mat::PIXEL_RGB, width, height, w, h ); // pad to target_size rectangle @@ -658,7 +658,8 @@ std::vector strides = {8, 16, 32}; // might have stride=64 std::vector grid_strides; generate_grids_and_stride(in_pad.w, in_pad.h, strides, grid_strides); - generate_proposals(grid_strides, out, prob_threshold, proposals, 43); +// generate_proposals(grid_strides, out, prob_threshold, proposals, 43); + generate_proposals(grid_strides, out, prob_threshold, proposals, 5); // sort all proposals by score from highest to lowest qsort_descent_inplace(proposals); @@ -706,31 +707,18 @@ javaVM->AttachCurrentThread(&env, nullptr); jclass callback_clazz = env->GetObjectClass(j_callback); jclass output_clazz = env->GetObjectClass(j_output); - /** - * I: 整数类型(int) - * J: 长整数类型(long) - * D: 双精度浮点数类型(double) - * F: 单精度浮点数类型(float) - * Z: 布尔类型(boolean) - * C: 字符类型(char) - * B: 字节类型(byte) - * S: 短整数类型(short) - *
-----------------------------------------------
- * Ljava/lang/Object;: 表示 Object 类型的引用 - * Ljava/lang/String;: 表示 String 类型的引用 - * L包名/类名;: 表示特定包名和类名的引用 - *
-----------------------------------------------
- * 例如: - * int add(int a, int b): (II)I - * - * String concat(String str1, String str2): (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; - *
-----------------------------------------------
- * [Ljava/lang/String;: 表示 String 类型的一维数组 - * */ + jmethodID j_method_id = env->GetMethodID( - callback_clazz, "onDetect", "(Lcom/casic/br/app/external/YoloResult;)V" + callback_clazz, "onDetect", "(Ljava/util/ArrayList;)V" ); + //获取ArrayList类 + jclass list_clazz = env->FindClass("java/util/ArrayList"); + jmethodID arraylist_init = env->GetMethodID(list_clazz, "", "()V"); + jmethodID arraylist_add = env->GetMethodID(list_clazz, "add", "(Ljava/lang/Object;)Z"); + //初始化ArrayList对象 + jobject arraylist_obj = env->NewObject(list_clazz, arraylist_init); + for (int i = 0; i < count; i++) { auto item = objects[i]; @@ -750,9 +738,17 @@ jfieldID prob = env->GetFieldID(output_clazz, "prob", "F"); env->SetFloatField(j_output, prob, item.prob); - //回调 - env->CallVoidMethod(j_callback, j_method_id, j_output); + __android_log_print( + ANDROID_LOG_DEBUG, + "ncnn", + "type %d %.1f%%", item.label, item.prob * 100 + ); + + //add + env->CallBooleanMethod(arraylist_obj, arraylist_add, j_output); } + //回调 + env->CallVoidMethod(j_callback, j_method_id, arraylist_obj); /** * Mat数据。 @@ -767,21 +763,24 @@ } int Yolo::draw(cv::Mat &rgb, const std::vector &objects) { +// static const char *class_names[] = { +// "tripod", "tee", "person", +// "shut-off valve", "hazard signs", "pressure tester", +// "pressure gauge", "reflective clothing", "respirator masks", +// "throat foil", "round-headed water gun", "safety signs", +// "helmet", "security identification", "safety ropes", +// "intercom", "pointed water gun", "switch", +// "alarm device", "joint", "construction street signs", +// "gas detectors", "hoses", "hose_rectangle", +// "flow-meter", "fire hydrant box", "fire extinguisher", +// "lighting equipment", "flame-out protection", "exposed wires", +// "circuit diagram", "cordon", "regulator", +// "length adjuster", "stickers", "across wires", +// "road cones", "hose", "filter", +// "distribution box", "long-shank valves", "valve", "ducts" +// }; static const char *class_names[] = { - "tripod", "tee", "person", - "shut-off valve", "hazard signs", "pressure tester", - "pressure gauge", "reflective clothing", "respirator masks", - "throat foil", "round-headed water gun", "safety signs", - "helmet", "security identification", "safety ropes", - "intercom", "pointed water gun", "switch", - "alarm device", "joint", "construction street signs", - "gas detectors", "hoses", "hose_rectangle", - "flow-meter", "fire hydrant box", "fire extinguisher", - "lighting equipment", "flame-out protection", "exposed wires", - "circuit diagram", "cordon", "regulator", - "length adjuster", "stickers", "across wires", - "road cones", "hose", "filter", - "distribution box", "long-shank valves", "valve", "ducts" + "Special Hose", "Person", "Hard Hat", "Overalls", "Non-Special Hose" }; static const unsigned char colors[19][3] = { diff --git a/app/src/main/assets/ji-sim-opt.bin b/app/src/main/assets/ji-sim-opt.bin new file mode 100644 index 0000000..a2695b4 --- /dev/null +++ b/app/src/main/assets/ji-sim-opt.bin Binary files differ diff --git a/app/src/main/assets/ji-sim-opt.param b/app/src/main/assets/ji-sim-opt.param new file mode 100644 index 0000000..1d0e424 --- /dev/null +++ b/app/src/main/assets/ji-sim-opt.param @@ -0,0 +1,183 @@ +7767517 +181 217 +Input images 0 1 images +Convolution Conv_0 1 1 images 128 0=32 1=3 3=2 4=1 5=1 6=864 +Swish Mul_2 1 1 128 130 +Convolution Conv_3 1 1 130 131 0=64 1=3 3=2 4=1 5=1 6=18432 +Swish Mul_5 1 1 131 133 +Convolution Conv_6 1 1 133 134 0=64 1=1 5=1 6=4096 +Swish Mul_8 1 1 134 136 +Slice Split_9 1 2 136 137 138 -23300=2,32,-233 +Split splitncnn_0 1 3 138 138_splitncnn_0 138_splitncnn_1 138_splitncnn_2 +Convolution Conv_10 1 1 138_splitncnn_2 139 0=32 1=3 4=1 5=1 6=9216 +Swish Mul_12 1 1 139 141 +Convolution Conv_13 1 1 141 142 0=32 1=3 4=1 5=1 6=9216 +Swish Mul_15 1 1 142 144 +BinaryOp Add_16 2 1 138_splitncnn_1 144 145 +Concat Concat_17 3 1 137 138_splitncnn_0 145 146 +Convolution Conv_18 1 1 146 147 0=64 1=1 5=1 6=6144 +Swish Mul_20 1 1 147 149 +Convolution Conv_21 1 1 149 150 0=128 1=3 3=2 4=1 5=1 6=73728 +Swish Mul_23 1 1 150 152 +Convolution Conv_24 1 1 152 153 0=128 1=1 5=1 6=16384 +Swish Mul_26 1 1 153 155 +Slice Split_27 1 2 155 156 157 -23300=2,64,-233 +Split splitncnn_1 1 3 157 157_splitncnn_0 157_splitncnn_1 157_splitncnn_2 +Convolution Conv_28 1 1 157_splitncnn_2 158 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_30 1 1 158 160 +Convolution Conv_31 1 1 160 161 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_33 1 1 161 163 +BinaryOp Add_34 2 1 157_splitncnn_1 163 164 +Split splitncnn_2 1 3 164 164_splitncnn_0 164_splitncnn_1 164_splitncnn_2 +Convolution Conv_35 1 1 164_splitncnn_2 165 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_37 1 1 165 167 +Convolution Conv_38 1 1 167 168 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_40 1 1 168 170 +BinaryOp Add_41 2 1 164_splitncnn_1 170 171 +Concat Concat_42 4 1 156 157_splitncnn_0 164_splitncnn_0 171 172 +Convolution Conv_43 1 1 172 173 0=128 1=1 5=1 6=32768 +Swish Mul_45 1 1 173 175 +Split splitncnn_3 1 2 175 175_splitncnn_0 175_splitncnn_1 +Convolution Conv_46 1 1 175_splitncnn_1 176 0=256 1=3 3=2 4=1 5=1 6=294912 +Swish Mul_48 1 1 176 178 +Convolution Conv_49 1 1 178 179 0=256 1=1 5=1 6=65536 +Swish Mul_51 1 1 179 181 +Slice Split_52 1 2 181 182 183 -23300=2,128,-233 +Split splitncnn_4 1 3 183 183_splitncnn_0 183_splitncnn_1 183_splitncnn_2 +Convolution Conv_53 1 1 183_splitncnn_2 184 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_55 1 1 184 186 +Convolution Conv_56 1 1 186 187 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_58 1 1 187 189 +BinaryOp Add_59 2 1 183_splitncnn_1 189 190 +Split splitncnn_5 1 3 190 190_splitncnn_0 190_splitncnn_1 190_splitncnn_2 +Convolution Conv_60 1 1 190_splitncnn_2 191 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_62 1 1 191 193 +Convolution Conv_63 1 1 193 194 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_65 1 1 194 196 +BinaryOp Add_66 2 1 190_splitncnn_1 196 197 +Concat Concat_67 4 1 182 183_splitncnn_0 190_splitncnn_0 197 198 +Convolution Conv_68 1 1 198 199 0=256 1=1 5=1 6=131072 +Swish Mul_70 1 1 199 201 +Split splitncnn_6 1 2 201 201_splitncnn_0 201_splitncnn_1 +Convolution Conv_71 1 1 201_splitncnn_1 202 0=512 1=3 3=2 4=1 5=1 6=1179648 +Swish Mul_73 1 1 202 204 +Convolution Conv_74 1 1 204 205 0=512 1=1 5=1 6=262144 +Swish Mul_76 1 1 205 207 +Slice Split_77 1 2 207 208 209 -23300=2,256,-233 +Split splitncnn_7 1 3 209 209_splitncnn_0 209_splitncnn_1 209_splitncnn_2 +Convolution Conv_78 1 1 209_splitncnn_2 210 0=256 1=3 4=1 5=1 6=589824 +Swish Mul_80 1 1 210 212 +Convolution Conv_81 1 1 212 213 0=256 1=3 4=1 5=1 6=589824 +Swish Mul_83 1 1 213 215 +BinaryOp Add_84 2 1 209_splitncnn_1 215 216 +Concat Concat_85 3 1 208 209_splitncnn_0 216 217 +Convolution Conv_86 1 1 217 218 0=512 1=1 5=1 6=393216 +Swish Mul_88 1 1 218 220 +Convolution Conv_89 1 1 220 221 0=256 1=1 5=1 6=131072 +Swish Mul_91 1 1 221 223 +Split splitncnn_8 1 2 223 223_splitncnn_0 223_splitncnn_1 +Pooling MaxPool_92 1 1 223_splitncnn_1 224 1=5 3=2 5=1 +Split splitncnn_9 1 2 224 224_splitncnn_0 224_splitncnn_1 +Pooling MaxPool_93 1 1 224_splitncnn_1 225 1=5 3=2 5=1 +Split splitncnn_10 1 2 225 225_splitncnn_0 225_splitncnn_1 +Pooling MaxPool_94 1 1 225_splitncnn_1 226 1=5 3=2 5=1 +Concat Concat_95 4 1 223_splitncnn_0 224_splitncnn_0 225_splitncnn_0 226 227 +Convolution Conv_96 1 1 227 228 0=512 1=1 5=1 6=524288 +Swish Mul_98 1 1 228 230 +Split splitncnn_11 1 2 230 230_splitncnn_0 230_splitncnn_1 +Interp Resize_100 1 1 230_splitncnn_1 235 0=1 1=2.000000e+00 2=2.000000e+00 +Concat Concat_101 2 1 235 201_splitncnn_0 236 +Convolution Conv_102 1 1 236 237 0=256 1=1 5=1 6=196608 +Swish Mul_104 1 1 237 239 +Slice Split_105 1 2 239 240 241 -23300=2,128,-233 +Split splitncnn_12 1 2 241 241_splitncnn_0 241_splitncnn_1 +Convolution Conv_106 1 1 241_splitncnn_1 242 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_108 1 1 242 244 +Convolution Conv_109 1 1 244 245 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_111 1 1 245 247 +Concat Concat_112 3 1 240 241_splitncnn_0 247 248 +Convolution Conv_113 1 1 248 249 0=256 1=1 5=1 6=98304 +Swish Mul_115 1 1 249 251 +Split splitncnn_13 1 2 251 251_splitncnn_0 251_splitncnn_1 +Interp Resize_117 1 1 251_splitncnn_1 256 0=1 1=2.000000e+00 2=2.000000e+00 +Concat Concat_118 2 1 256 175_splitncnn_0 257 +Convolution Conv_119 1 1 257 258 0=128 1=1 5=1 6=49152 +Swish Mul_121 1 1 258 260 +Slice Split_122 1 2 260 261 262 -23300=2,64,-233 +Split splitncnn_14 1 2 262 262_splitncnn_0 262_splitncnn_1 +Convolution Conv_123 1 1 262_splitncnn_1 263 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_125 1 1 263 265 +Convolution Conv_126 1 1 265 266 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_128 1 1 266 268 +Concat Concat_129 3 1 261 262_splitncnn_0 268 269 +Convolution Conv_130 1 1 269 270 0=128 1=1 5=1 6=24576 +Swish Mul_132 1 1 270 272 +Split splitncnn_15 1 3 272 272_splitncnn_0 272_splitncnn_1 272_splitncnn_2 +Convolution Conv_133 1 1 272_splitncnn_2 273 0=128 1=3 3=2 4=1 5=1 6=147456 +Swish Mul_135 1 1 273 275 +Concat Concat_136 2 1 275 251_splitncnn_0 276 +Convolution Conv_137 1 1 276 277 0=256 1=1 5=1 6=98304 +Swish Mul_139 1 1 277 279 +Slice Split_140 1 2 279 280 281 -23300=2,128,-233 +Split splitncnn_16 1 2 281 281_splitncnn_0 281_splitncnn_1 +Convolution Conv_141 1 1 281_splitncnn_1 282 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_143 1 1 282 284 +Convolution Conv_144 1 1 284 285 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_146 1 1 285 287 +Concat Concat_147 3 1 280 281_splitncnn_0 287 288 +Convolution Conv_148 1 1 288 289 0=256 1=1 5=1 6=98304 +Swish Mul_150 1 1 289 291 +Split splitncnn_17 1 3 291 291_splitncnn_0 291_splitncnn_1 291_splitncnn_2 +Convolution Conv_151 1 1 291_splitncnn_2 292 0=256 1=3 3=2 4=1 5=1 6=589824 +Swish Mul_153 1 1 292 294 +Concat Concat_154 2 1 294 230_splitncnn_0 295 +Convolution Conv_155 1 1 295 296 0=512 1=1 5=1 6=393216 +Swish Mul_157 1 1 296 298 +Slice Split_158 1 2 298 299 300 -23300=2,256,-233 +Split splitncnn_18 1 2 300 300_splitncnn_0 300_splitncnn_1 +Convolution Conv_159 1 1 300_splitncnn_1 301 0=256 1=3 4=1 5=1 6=589824 +Swish Mul_161 1 1 301 303 +Convolution Conv_162 1 1 303 304 0=256 1=3 4=1 5=1 6=589824 +Swish Mul_164 1 1 304 306 +Concat Concat_165 3 1 299 300_splitncnn_0 306 307 +Convolution Conv_166 1 1 307 308 0=512 1=1 5=1 6=393216 +Swish Mul_168 1 1 308 310 +Split splitncnn_19 1 2 310 310_splitncnn_0 310_splitncnn_1 +Convolution Conv_169 1 1 272_splitncnn_1 311 0=64 1=3 4=1 5=1 6=73728 +Swish Mul_171 1 1 311 313 +Convolution Conv_172 1 1 313 314 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_174 1 1 314 316 +Convolution Conv_175 1 1 316 317 0=64 1=1 5=1 6=4096 +Convolution Conv_176 1 1 272_splitncnn_0 318 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_178 1 1 318 320 +Convolution Conv_179 1 1 320 321 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_181 1 1 321 323 +Convolution Conv_182 1 1 323 324 0=5 1=1 5=1 6=640 +Concat Concat_183 2 1 317 324 325 +Convolution Conv_184 1 1 291_splitncnn_1 326 0=64 1=3 4=1 5=1 6=147456 +Swish Mul_186 1 1 326 328 +Convolution Conv_187 1 1 328 329 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_189 1 1 329 331 +Convolution Conv_190 1 1 331 332 0=64 1=1 5=1 6=4096 +Convolution Conv_191 1 1 291_splitncnn_0 333 0=128 1=3 4=1 5=1 6=294912 +Swish Mul_193 1 1 333 335 +Convolution Conv_194 1 1 335 336 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_196 1 1 336 338 +Convolution Conv_197 1 1 338 339 0=5 1=1 5=1 6=640 +Concat Concat_198 2 1 332 339 340 +Convolution Conv_199 1 1 310_splitncnn_1 341 0=64 1=3 4=1 5=1 6=294912 +Swish Mul_201 1 1 341 343 +Convolution Conv_202 1 1 343 344 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_204 1 1 344 346 +Convolution Conv_205 1 1 346 347 0=64 1=1 5=1 6=4096 +Convolution Conv_206 1 1 310_splitncnn_0 348 0=128 1=3 4=1 5=1 6=589824 +Swish Mul_208 1 1 348 350 +Convolution Conv_209 1 1 350 351 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_211 1 1 351 353 +Convolution Conv_212 1 1 353 354 0=5 1=1 5=1 6=640 +Concat Concat_213 2 1 347 354 355 +Reshape Reshape_219 1 1 325 365 0=-1 1=69 +Reshape Reshape_222 1 1 340 372 0=-1 1=69 +Reshape Reshape_225 1 1 355 379 0=-1 1=69 +Concat Concat_226 3 1 365 372 379 380 0=1 +Permute Transpose_227 1 1 380 output 0=1 diff --git a/app/src/main/cpp/yolo.cpp b/app/src/main/cpp/yolo.cpp index fd0427f..63017a4 100644 --- a/app/src/main/cpp/yolo.cpp +++ b/app/src/main/cpp/yolo.cpp @@ -426,7 +426,7 @@ int height = rgb.rows; //把opencv Mat转为 ncnn Mat - ncnn::Mat in = ncnn::Mat::from_pixels(rgb.data, ncnn::Mat::PIXEL_RGB2BGR, width, height); + ncnn::Mat in = ncnn::Mat::from_pixels(rgb.data, ncnn::Mat::PIXEL_RGB, width, height); std::vector cls_scores; { @@ -480,7 +480,7 @@ w = w * scale; } - ncnn::Mat in = ncnn::Mat::from_pixels_resize(rgb.data, ncnn::Mat::PIXEL_BGR2RGB, width, + ncnn::Mat in = ncnn::Mat::from_pixels_resize(rgb.data, ncnn::Mat::PIXEL_RGB, width, height, w, h); // pad to target_size rectangle @@ -631,7 +631,7 @@ } ncnn::Mat in = ncnn::Mat::from_pixels_resize( - rgb.data, ncnn::Mat::PIXEL_RGB2BGR, width, height, w, h + rgb.data, ncnn::Mat::PIXEL_RGB, width, height, w, h ); // pad to target_size rectangle @@ -658,7 +658,8 @@ std::vector strides = {8, 16, 32}; // might have stride=64 std::vector grid_strides; generate_grids_and_stride(in_pad.w, in_pad.h, strides, grid_strides); - generate_proposals(grid_strides, out, prob_threshold, proposals, 43); +// generate_proposals(grid_strides, out, prob_threshold, proposals, 43); + generate_proposals(grid_strides, out, prob_threshold, proposals, 5); // sort all proposals by score from highest to lowest qsort_descent_inplace(proposals); @@ -706,31 +707,18 @@ javaVM->AttachCurrentThread(&env, nullptr); jclass callback_clazz = env->GetObjectClass(j_callback); jclass output_clazz = env->GetObjectClass(j_output); - /** - * I: 整数类型(int) - * J: 长整数类型(long) - * D: 双精度浮点数类型(double) - * F: 单精度浮点数类型(float) - * Z: 布尔类型(boolean) - * C: 字符类型(char) - * B: 字节类型(byte) - * S: 短整数类型(short) - *
-----------------------------------------------
- * Ljava/lang/Object;: 表示 Object 类型的引用 - * Ljava/lang/String;: 表示 String 类型的引用 - * L包名/类名;: 表示特定包名和类名的引用 - *
-----------------------------------------------
- * 例如: - * int add(int a, int b): (II)I - * - * String concat(String str1, String str2): (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; - *
-----------------------------------------------
- * [Ljava/lang/String;: 表示 String 类型的一维数组 - * */ + jmethodID j_method_id = env->GetMethodID( - callback_clazz, "onDetect", "(Lcom/casic/br/app/external/YoloResult;)V" + callback_clazz, "onDetect", "(Ljava/util/ArrayList;)V" ); + //获取ArrayList类 + jclass list_clazz = env->FindClass("java/util/ArrayList"); + jmethodID arraylist_init = env->GetMethodID(list_clazz, "", "()V"); + jmethodID arraylist_add = env->GetMethodID(list_clazz, "add", "(Ljava/lang/Object;)Z"); + //初始化ArrayList对象 + jobject arraylist_obj = env->NewObject(list_clazz, arraylist_init); + for (int i = 0; i < count; i++) { auto item = objects[i]; @@ -750,9 +738,17 @@ jfieldID prob = env->GetFieldID(output_clazz, "prob", "F"); env->SetFloatField(j_output, prob, item.prob); - //回调 - env->CallVoidMethod(j_callback, j_method_id, j_output); + __android_log_print( + ANDROID_LOG_DEBUG, + "ncnn", + "type %d %.1f%%", item.label, item.prob * 100 + ); + + //add + env->CallBooleanMethod(arraylist_obj, arraylist_add, j_output); } + //回调 + env->CallVoidMethod(j_callback, j_method_id, arraylist_obj); /** * Mat数据。 @@ -767,21 +763,24 @@ } int Yolo::draw(cv::Mat &rgb, const std::vector &objects) { +// static const char *class_names[] = { +// "tripod", "tee", "person", +// "shut-off valve", "hazard signs", "pressure tester", +// "pressure gauge", "reflective clothing", "respirator masks", +// "throat foil", "round-headed water gun", "safety signs", +// "helmet", "security identification", "safety ropes", +// "intercom", "pointed water gun", "switch", +// "alarm device", "joint", "construction street signs", +// "gas detectors", "hoses", "hose_rectangle", +// "flow-meter", "fire hydrant box", "fire extinguisher", +// "lighting equipment", "flame-out protection", "exposed wires", +// "circuit diagram", "cordon", "regulator", +// "length adjuster", "stickers", "across wires", +// "road cones", "hose", "filter", +// "distribution box", "long-shank valves", "valve", "ducts" +// }; static const char *class_names[] = { - "tripod", "tee", "person", - "shut-off valve", "hazard signs", "pressure tester", - "pressure gauge", "reflective clothing", "respirator masks", - "throat foil", "round-headed water gun", "safety signs", - "helmet", "security identification", "safety ropes", - "intercom", "pointed water gun", "switch", - "alarm device", "joint", "construction street signs", - "gas detectors", "hoses", "hose_rectangle", - "flow-meter", "fire hydrant box", "fire extinguisher", - "lighting equipment", "flame-out protection", "exposed wires", - "circuit diagram", "cordon", "regulator", - "length adjuster", "stickers", "across wires", - "road cones", "hose", "filter", - "distribution box", "long-shank valves", "valve", "ducts" + "Special Hose", "Person", "Hard Hat", "Overalls", "Non-Special Hose" }; static const unsigned char colors[19][3] = { diff --git a/app/src/main/cpp/yolov8ncnn.cpp b/app/src/main/cpp/yolov8ncnn.cpp index e758ef5..403a025 100644 --- a/app/src/main/cpp/yolov8ncnn.cpp +++ b/app/src/main/cpp/yolov8ncnn.cpp @@ -132,6 +132,8 @@ //检测 g_yolo->detect(rgb, objects); + +// g_yolo->draw(rgb, objects); } else { draw_unsupported(rgb); } @@ -175,19 +177,27 @@ AAssetManager *mgr = AAssetManager_fromJava(env, assetManager); //分割、分类、检测 - const char *model_types[] = {"best-sim-opt-fp16", "model.ncnn", "yolov8s-detect-sim-opt-fp16"}; +// const char *model_types[] = {"best-sim-opt-fp16", "model.ncnn", "yolov8s-detect-sim-opt-fp16"}; + const char *model_types[] = {"ji-sim-opt"}; - const int target_sizes[] = {320, 320, 320}; +// const int target_sizes[] = {320, 320, 320}; + const int target_sizes[] = {320}; +// const float mean_values[][3] = { +// {103.53f, 116.28f, 123.675f}, +// {103.53f, 116.28f, 123.675f}, +// {103.53f, 116.28f, 123.675f} +// }; const float mean_values[][3] = { - {103.53f, 116.28f, 123.675f}, - {103.53f, 116.28f, 123.675f}, {103.53f, 116.28f, 123.675f} }; +// const float norm_values[][3] = { +// {1 / 255.f, 1 / 255.f, 1 / 255.f}, +// {1 / 255.f, 1 / 255.f, 1 / 255.f}, +// {1 / 255.f, 1 / 255.f, 1 / 255.f} +// }; const float norm_values[][3] = { - {1 / 255.f, 1 / 255.f, 1 / 255.f}, - {1 / 255.f, 1 / 255.f, 1 / 255.f}, {1 / 255.f, 1 / 255.f, 1 / 255.f} }; diff --git a/app/src/main/assets/ji-sim-opt.bin b/app/src/main/assets/ji-sim-opt.bin new file mode 100644 index 0000000..a2695b4 --- /dev/null +++ b/app/src/main/assets/ji-sim-opt.bin Binary files differ diff --git a/app/src/main/assets/ji-sim-opt.param b/app/src/main/assets/ji-sim-opt.param new file mode 100644 index 0000000..1d0e424 --- /dev/null +++ b/app/src/main/assets/ji-sim-opt.param @@ -0,0 +1,183 @@ +7767517 +181 217 +Input images 0 1 images +Convolution Conv_0 1 1 images 128 0=32 1=3 3=2 4=1 5=1 6=864 +Swish Mul_2 1 1 128 130 +Convolution Conv_3 1 1 130 131 0=64 1=3 3=2 4=1 5=1 6=18432 +Swish Mul_5 1 1 131 133 +Convolution Conv_6 1 1 133 134 0=64 1=1 5=1 6=4096 +Swish Mul_8 1 1 134 136 +Slice Split_9 1 2 136 137 138 -23300=2,32,-233 +Split splitncnn_0 1 3 138 138_splitncnn_0 138_splitncnn_1 138_splitncnn_2 +Convolution Conv_10 1 1 138_splitncnn_2 139 0=32 1=3 4=1 5=1 6=9216 +Swish Mul_12 1 1 139 141 +Convolution Conv_13 1 1 141 142 0=32 1=3 4=1 5=1 6=9216 +Swish Mul_15 1 1 142 144 +BinaryOp Add_16 2 1 138_splitncnn_1 144 145 +Concat Concat_17 3 1 137 138_splitncnn_0 145 146 +Convolution Conv_18 1 1 146 147 0=64 1=1 5=1 6=6144 +Swish Mul_20 1 1 147 149 +Convolution Conv_21 1 1 149 150 0=128 1=3 3=2 4=1 5=1 6=73728 +Swish Mul_23 1 1 150 152 +Convolution Conv_24 1 1 152 153 0=128 1=1 5=1 6=16384 +Swish Mul_26 1 1 153 155 +Slice Split_27 1 2 155 156 157 -23300=2,64,-233 +Split splitncnn_1 1 3 157 157_splitncnn_0 157_splitncnn_1 157_splitncnn_2 +Convolution Conv_28 1 1 157_splitncnn_2 158 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_30 1 1 158 160 +Convolution Conv_31 1 1 160 161 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_33 1 1 161 163 +BinaryOp Add_34 2 1 157_splitncnn_1 163 164 +Split splitncnn_2 1 3 164 164_splitncnn_0 164_splitncnn_1 164_splitncnn_2 +Convolution Conv_35 1 1 164_splitncnn_2 165 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_37 1 1 165 167 +Convolution Conv_38 1 1 167 168 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_40 1 1 168 170 +BinaryOp Add_41 2 1 164_splitncnn_1 170 171 +Concat Concat_42 4 1 156 157_splitncnn_0 164_splitncnn_0 171 172 +Convolution Conv_43 1 1 172 173 0=128 1=1 5=1 6=32768 +Swish Mul_45 1 1 173 175 +Split splitncnn_3 1 2 175 175_splitncnn_0 175_splitncnn_1 +Convolution Conv_46 1 1 175_splitncnn_1 176 0=256 1=3 3=2 4=1 5=1 6=294912 +Swish Mul_48 1 1 176 178 +Convolution Conv_49 1 1 178 179 0=256 1=1 5=1 6=65536 +Swish Mul_51 1 1 179 181 +Slice Split_52 1 2 181 182 183 -23300=2,128,-233 +Split splitncnn_4 1 3 183 183_splitncnn_0 183_splitncnn_1 183_splitncnn_2 +Convolution Conv_53 1 1 183_splitncnn_2 184 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_55 1 1 184 186 +Convolution Conv_56 1 1 186 187 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_58 1 1 187 189 +BinaryOp Add_59 2 1 183_splitncnn_1 189 190 +Split splitncnn_5 1 3 190 190_splitncnn_0 190_splitncnn_1 190_splitncnn_2 +Convolution Conv_60 1 1 190_splitncnn_2 191 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_62 1 1 191 193 +Convolution Conv_63 1 1 193 194 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_65 1 1 194 196 +BinaryOp Add_66 2 1 190_splitncnn_1 196 197 +Concat Concat_67 4 1 182 183_splitncnn_0 190_splitncnn_0 197 198 +Convolution Conv_68 1 1 198 199 0=256 1=1 5=1 6=131072 +Swish Mul_70 1 1 199 201 +Split splitncnn_6 1 2 201 201_splitncnn_0 201_splitncnn_1 +Convolution Conv_71 1 1 201_splitncnn_1 202 0=512 1=3 3=2 4=1 5=1 6=1179648 +Swish Mul_73 1 1 202 204 +Convolution Conv_74 1 1 204 205 0=512 1=1 5=1 6=262144 +Swish Mul_76 1 1 205 207 +Slice Split_77 1 2 207 208 209 -23300=2,256,-233 +Split splitncnn_7 1 3 209 209_splitncnn_0 209_splitncnn_1 209_splitncnn_2 +Convolution Conv_78 1 1 209_splitncnn_2 210 0=256 1=3 4=1 5=1 6=589824 +Swish Mul_80 1 1 210 212 +Convolution Conv_81 1 1 212 213 0=256 1=3 4=1 5=1 6=589824 +Swish Mul_83 1 1 213 215 +BinaryOp Add_84 2 1 209_splitncnn_1 215 216 +Concat Concat_85 3 1 208 209_splitncnn_0 216 217 +Convolution Conv_86 1 1 217 218 0=512 1=1 5=1 6=393216 +Swish Mul_88 1 1 218 220 +Convolution Conv_89 1 1 220 221 0=256 1=1 5=1 6=131072 +Swish Mul_91 1 1 221 223 +Split splitncnn_8 1 2 223 223_splitncnn_0 223_splitncnn_1 +Pooling MaxPool_92 1 1 223_splitncnn_1 224 1=5 3=2 5=1 +Split splitncnn_9 1 2 224 224_splitncnn_0 224_splitncnn_1 +Pooling MaxPool_93 1 1 224_splitncnn_1 225 1=5 3=2 5=1 +Split splitncnn_10 1 2 225 225_splitncnn_0 225_splitncnn_1 +Pooling MaxPool_94 1 1 225_splitncnn_1 226 1=5 3=2 5=1 +Concat Concat_95 4 1 223_splitncnn_0 224_splitncnn_0 225_splitncnn_0 226 227 +Convolution Conv_96 1 1 227 228 0=512 1=1 5=1 6=524288 +Swish Mul_98 1 1 228 230 +Split splitncnn_11 1 2 230 230_splitncnn_0 230_splitncnn_1 +Interp Resize_100 1 1 230_splitncnn_1 235 0=1 1=2.000000e+00 2=2.000000e+00 +Concat Concat_101 2 1 235 201_splitncnn_0 236 +Convolution Conv_102 1 1 236 237 0=256 1=1 5=1 6=196608 +Swish Mul_104 1 1 237 239 +Slice Split_105 1 2 239 240 241 -23300=2,128,-233 +Split splitncnn_12 1 2 241 241_splitncnn_0 241_splitncnn_1 +Convolution Conv_106 1 1 241_splitncnn_1 242 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_108 1 1 242 244 +Convolution Conv_109 1 1 244 245 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_111 1 1 245 247 +Concat Concat_112 3 1 240 241_splitncnn_0 247 248 +Convolution Conv_113 1 1 248 249 0=256 1=1 5=1 6=98304 +Swish Mul_115 1 1 249 251 +Split splitncnn_13 1 2 251 251_splitncnn_0 251_splitncnn_1 +Interp Resize_117 1 1 251_splitncnn_1 256 0=1 1=2.000000e+00 2=2.000000e+00 +Concat Concat_118 2 1 256 175_splitncnn_0 257 +Convolution Conv_119 1 1 257 258 0=128 1=1 5=1 6=49152 +Swish Mul_121 1 1 258 260 +Slice Split_122 1 2 260 261 262 -23300=2,64,-233 +Split splitncnn_14 1 2 262 262_splitncnn_0 262_splitncnn_1 +Convolution Conv_123 1 1 262_splitncnn_1 263 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_125 1 1 263 265 +Convolution Conv_126 1 1 265 266 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_128 1 1 266 268 +Concat Concat_129 3 1 261 262_splitncnn_0 268 269 +Convolution Conv_130 1 1 269 270 0=128 1=1 5=1 6=24576 +Swish Mul_132 1 1 270 272 +Split splitncnn_15 1 3 272 272_splitncnn_0 272_splitncnn_1 272_splitncnn_2 +Convolution Conv_133 1 1 272_splitncnn_2 273 0=128 1=3 3=2 4=1 5=1 6=147456 +Swish Mul_135 1 1 273 275 +Concat Concat_136 2 1 275 251_splitncnn_0 276 +Convolution Conv_137 1 1 276 277 0=256 1=1 5=1 6=98304 +Swish Mul_139 1 1 277 279 +Slice Split_140 1 2 279 280 281 -23300=2,128,-233 +Split splitncnn_16 1 2 281 281_splitncnn_0 281_splitncnn_1 +Convolution Conv_141 1 1 281_splitncnn_1 282 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_143 1 1 282 284 +Convolution Conv_144 1 1 284 285 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_146 1 1 285 287 +Concat Concat_147 3 1 280 281_splitncnn_0 287 288 +Convolution Conv_148 1 1 288 289 0=256 1=1 5=1 6=98304 +Swish Mul_150 1 1 289 291 +Split splitncnn_17 1 3 291 291_splitncnn_0 291_splitncnn_1 291_splitncnn_2 +Convolution Conv_151 1 1 291_splitncnn_2 292 0=256 1=3 3=2 4=1 5=1 6=589824 +Swish Mul_153 1 1 292 294 +Concat Concat_154 2 1 294 230_splitncnn_0 295 +Convolution Conv_155 1 1 295 296 0=512 1=1 5=1 6=393216 +Swish Mul_157 1 1 296 298 +Slice Split_158 1 2 298 299 300 -23300=2,256,-233 +Split splitncnn_18 1 2 300 300_splitncnn_0 300_splitncnn_1 +Convolution Conv_159 1 1 300_splitncnn_1 301 0=256 1=3 4=1 5=1 6=589824 +Swish Mul_161 1 1 301 303 +Convolution Conv_162 1 1 303 304 0=256 1=3 4=1 5=1 6=589824 +Swish Mul_164 1 1 304 306 +Concat Concat_165 3 1 299 300_splitncnn_0 306 307 +Convolution Conv_166 1 1 307 308 0=512 1=1 5=1 6=393216 +Swish Mul_168 1 1 308 310 +Split splitncnn_19 1 2 310 310_splitncnn_0 310_splitncnn_1 +Convolution Conv_169 1 1 272_splitncnn_1 311 0=64 1=3 4=1 5=1 6=73728 +Swish Mul_171 1 1 311 313 +Convolution Conv_172 1 1 313 314 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_174 1 1 314 316 +Convolution Conv_175 1 1 316 317 0=64 1=1 5=1 6=4096 +Convolution Conv_176 1 1 272_splitncnn_0 318 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_178 1 1 318 320 +Convolution Conv_179 1 1 320 321 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_181 1 1 321 323 +Convolution Conv_182 1 1 323 324 0=5 1=1 5=1 6=640 +Concat Concat_183 2 1 317 324 325 +Convolution Conv_184 1 1 291_splitncnn_1 326 0=64 1=3 4=1 5=1 6=147456 +Swish Mul_186 1 1 326 328 +Convolution Conv_187 1 1 328 329 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_189 1 1 329 331 +Convolution Conv_190 1 1 331 332 0=64 1=1 5=1 6=4096 +Convolution Conv_191 1 1 291_splitncnn_0 333 0=128 1=3 4=1 5=1 6=294912 +Swish Mul_193 1 1 333 335 +Convolution Conv_194 1 1 335 336 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_196 1 1 336 338 +Convolution Conv_197 1 1 338 339 0=5 1=1 5=1 6=640 +Concat Concat_198 2 1 332 339 340 +Convolution Conv_199 1 1 310_splitncnn_1 341 0=64 1=3 4=1 5=1 6=294912 +Swish Mul_201 1 1 341 343 +Convolution Conv_202 1 1 343 344 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_204 1 1 344 346 +Convolution Conv_205 1 1 346 347 0=64 1=1 5=1 6=4096 +Convolution Conv_206 1 1 310_splitncnn_0 348 0=128 1=3 4=1 5=1 6=589824 +Swish Mul_208 1 1 348 350 +Convolution Conv_209 1 1 350 351 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_211 1 1 351 353 +Convolution Conv_212 1 1 353 354 0=5 1=1 5=1 6=640 +Concat Concat_213 2 1 347 354 355 +Reshape Reshape_219 1 1 325 365 0=-1 1=69 +Reshape Reshape_222 1 1 340 372 0=-1 1=69 +Reshape Reshape_225 1 1 355 379 0=-1 1=69 +Concat Concat_226 3 1 365 372 379 380 0=1 +Permute Transpose_227 1 1 380 output 0=1 diff --git a/app/src/main/cpp/yolo.cpp b/app/src/main/cpp/yolo.cpp index fd0427f..63017a4 100644 --- a/app/src/main/cpp/yolo.cpp +++ b/app/src/main/cpp/yolo.cpp @@ -426,7 +426,7 @@ int height = rgb.rows; //把opencv Mat转为 ncnn Mat - ncnn::Mat in = ncnn::Mat::from_pixels(rgb.data, ncnn::Mat::PIXEL_RGB2BGR, width, height); + ncnn::Mat in = ncnn::Mat::from_pixels(rgb.data, ncnn::Mat::PIXEL_RGB, width, height); std::vector cls_scores; { @@ -480,7 +480,7 @@ w = w * scale; } - ncnn::Mat in = ncnn::Mat::from_pixels_resize(rgb.data, ncnn::Mat::PIXEL_BGR2RGB, width, + ncnn::Mat in = ncnn::Mat::from_pixels_resize(rgb.data, ncnn::Mat::PIXEL_RGB, width, height, w, h); // pad to target_size rectangle @@ -631,7 +631,7 @@ } ncnn::Mat in = ncnn::Mat::from_pixels_resize( - rgb.data, ncnn::Mat::PIXEL_RGB2BGR, width, height, w, h + rgb.data, ncnn::Mat::PIXEL_RGB, width, height, w, h ); // pad to target_size rectangle @@ -658,7 +658,8 @@ std::vector strides = {8, 16, 32}; // might have stride=64 std::vector grid_strides; generate_grids_and_stride(in_pad.w, in_pad.h, strides, grid_strides); - generate_proposals(grid_strides, out, prob_threshold, proposals, 43); +// generate_proposals(grid_strides, out, prob_threshold, proposals, 43); + generate_proposals(grid_strides, out, prob_threshold, proposals, 5); // sort all proposals by score from highest to lowest qsort_descent_inplace(proposals); @@ -706,31 +707,18 @@ javaVM->AttachCurrentThread(&env, nullptr); jclass callback_clazz = env->GetObjectClass(j_callback); jclass output_clazz = env->GetObjectClass(j_output); - /** - * I: 整数类型(int) - * J: 长整数类型(long) - * D: 双精度浮点数类型(double) - * F: 单精度浮点数类型(float) - * Z: 布尔类型(boolean) - * C: 字符类型(char) - * B: 字节类型(byte) - * S: 短整数类型(short) - *
-----------------------------------------------
- * Ljava/lang/Object;: 表示 Object 类型的引用 - * Ljava/lang/String;: 表示 String 类型的引用 - * L包名/类名;: 表示特定包名和类名的引用 - *
-----------------------------------------------
- * 例如: - * int add(int a, int b): (II)I - * - * String concat(String str1, String str2): (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; - *
-----------------------------------------------
- * [Ljava/lang/String;: 表示 String 类型的一维数组 - * */ + jmethodID j_method_id = env->GetMethodID( - callback_clazz, "onDetect", "(Lcom/casic/br/app/external/YoloResult;)V" + callback_clazz, "onDetect", "(Ljava/util/ArrayList;)V" ); + //获取ArrayList类 + jclass list_clazz = env->FindClass("java/util/ArrayList"); + jmethodID arraylist_init = env->GetMethodID(list_clazz, "", "()V"); + jmethodID arraylist_add = env->GetMethodID(list_clazz, "add", "(Ljava/lang/Object;)Z"); + //初始化ArrayList对象 + jobject arraylist_obj = env->NewObject(list_clazz, arraylist_init); + for (int i = 0; i < count; i++) { auto item = objects[i]; @@ -750,9 +738,17 @@ jfieldID prob = env->GetFieldID(output_clazz, "prob", "F"); env->SetFloatField(j_output, prob, item.prob); - //回调 - env->CallVoidMethod(j_callback, j_method_id, j_output); + __android_log_print( + ANDROID_LOG_DEBUG, + "ncnn", + "type %d %.1f%%", item.label, item.prob * 100 + ); + + //add + env->CallBooleanMethod(arraylist_obj, arraylist_add, j_output); } + //回调 + env->CallVoidMethod(j_callback, j_method_id, arraylist_obj); /** * Mat数据。 @@ -767,21 +763,24 @@ } int Yolo::draw(cv::Mat &rgb, const std::vector &objects) { +// static const char *class_names[] = { +// "tripod", "tee", "person", +// "shut-off valve", "hazard signs", "pressure tester", +// "pressure gauge", "reflective clothing", "respirator masks", +// "throat foil", "round-headed water gun", "safety signs", +// "helmet", "security identification", "safety ropes", +// "intercom", "pointed water gun", "switch", +// "alarm device", "joint", "construction street signs", +// "gas detectors", "hoses", "hose_rectangle", +// "flow-meter", "fire hydrant box", "fire extinguisher", +// "lighting equipment", "flame-out protection", "exposed wires", +// "circuit diagram", "cordon", "regulator", +// "length adjuster", "stickers", "across wires", +// "road cones", "hose", "filter", +// "distribution box", "long-shank valves", "valve", "ducts" +// }; static const char *class_names[] = { - "tripod", "tee", "person", - "shut-off valve", "hazard signs", "pressure tester", - "pressure gauge", "reflective clothing", "respirator masks", - "throat foil", "round-headed water gun", "safety signs", - "helmet", "security identification", "safety ropes", - "intercom", "pointed water gun", "switch", - "alarm device", "joint", "construction street signs", - "gas detectors", "hoses", "hose_rectangle", - "flow-meter", "fire hydrant box", "fire extinguisher", - "lighting equipment", "flame-out protection", "exposed wires", - "circuit diagram", "cordon", "regulator", - "length adjuster", "stickers", "across wires", - "road cones", "hose", "filter", - "distribution box", "long-shank valves", "valve", "ducts" + "Special Hose", "Person", "Hard Hat", "Overalls", "Non-Special Hose" }; static const unsigned char colors[19][3] = { diff --git a/app/src/main/cpp/yolov8ncnn.cpp b/app/src/main/cpp/yolov8ncnn.cpp index e758ef5..403a025 100644 --- a/app/src/main/cpp/yolov8ncnn.cpp +++ b/app/src/main/cpp/yolov8ncnn.cpp @@ -132,6 +132,8 @@ //检测 g_yolo->detect(rgb, objects); + +// g_yolo->draw(rgb, objects); } else { draw_unsupported(rgb); } @@ -175,19 +177,27 @@ AAssetManager *mgr = AAssetManager_fromJava(env, assetManager); //分割、分类、检测 - const char *model_types[] = {"best-sim-opt-fp16", "model.ncnn", "yolov8s-detect-sim-opt-fp16"}; +// const char *model_types[] = {"best-sim-opt-fp16", "model.ncnn", "yolov8s-detect-sim-opt-fp16"}; + const char *model_types[] = {"ji-sim-opt"}; - const int target_sizes[] = {320, 320, 320}; +// const int target_sizes[] = {320, 320, 320}; + const int target_sizes[] = {320}; +// const float mean_values[][3] = { +// {103.53f, 116.28f, 123.675f}, +// {103.53f, 116.28f, 123.675f}, +// {103.53f, 116.28f, 123.675f} +// }; const float mean_values[][3] = { - {103.53f, 116.28f, 123.675f}, - {103.53f, 116.28f, 123.675f}, {103.53f, 116.28f, 123.675f} }; +// const float norm_values[][3] = { +// {1 / 255.f, 1 / 255.f, 1 / 255.f}, +// {1 / 255.f, 1 / 255.f, 1 / 255.f}, +// {1 / 255.f, 1 / 255.f, 1 / 255.f} +// }; const float norm_values[][3] = { - {1 / 255.f, 1 / 255.f, 1 / 255.f}, - {1 / 255.f, 1 / 255.f, 1 / 255.f}, {1 / 255.f, 1 / 255.f, 1 / 255.f} }; diff --git a/app/src/main/java/com/casic/br/app/external/INativeCallback.kt b/app/src/main/java/com/casic/br/app/external/INativeCallback.kt index c353971..a17c804 100644 --- a/app/src/main/java/com/casic/br/app/external/INativeCallback.kt +++ b/app/src/main/java/com/casic/br/app/external/INativeCallback.kt @@ -14,5 +14,5 @@ /** * 检测 */ - fun onDetect(output: YoloResult) + fun onDetect(output: ArrayList) } \ No newline at end of file diff --git a/app/src/main/assets/ji-sim-opt.bin b/app/src/main/assets/ji-sim-opt.bin new file mode 100644 index 0000000..a2695b4 --- /dev/null +++ b/app/src/main/assets/ji-sim-opt.bin Binary files differ diff --git a/app/src/main/assets/ji-sim-opt.param b/app/src/main/assets/ji-sim-opt.param new file mode 100644 index 0000000..1d0e424 --- /dev/null +++ b/app/src/main/assets/ji-sim-opt.param @@ -0,0 +1,183 @@ +7767517 +181 217 +Input images 0 1 images +Convolution Conv_0 1 1 images 128 0=32 1=3 3=2 4=1 5=1 6=864 +Swish Mul_2 1 1 128 130 +Convolution Conv_3 1 1 130 131 0=64 1=3 3=2 4=1 5=1 6=18432 +Swish Mul_5 1 1 131 133 +Convolution Conv_6 1 1 133 134 0=64 1=1 5=1 6=4096 +Swish Mul_8 1 1 134 136 +Slice Split_9 1 2 136 137 138 -23300=2,32,-233 +Split splitncnn_0 1 3 138 138_splitncnn_0 138_splitncnn_1 138_splitncnn_2 +Convolution Conv_10 1 1 138_splitncnn_2 139 0=32 1=3 4=1 5=1 6=9216 +Swish Mul_12 1 1 139 141 +Convolution Conv_13 1 1 141 142 0=32 1=3 4=1 5=1 6=9216 +Swish Mul_15 1 1 142 144 +BinaryOp Add_16 2 1 138_splitncnn_1 144 145 +Concat Concat_17 3 1 137 138_splitncnn_0 145 146 +Convolution Conv_18 1 1 146 147 0=64 1=1 5=1 6=6144 +Swish Mul_20 1 1 147 149 +Convolution Conv_21 1 1 149 150 0=128 1=3 3=2 4=1 5=1 6=73728 +Swish Mul_23 1 1 150 152 +Convolution Conv_24 1 1 152 153 0=128 1=1 5=1 6=16384 +Swish Mul_26 1 1 153 155 +Slice Split_27 1 2 155 156 157 -23300=2,64,-233 +Split splitncnn_1 1 3 157 157_splitncnn_0 157_splitncnn_1 157_splitncnn_2 +Convolution Conv_28 1 1 157_splitncnn_2 158 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_30 1 1 158 160 +Convolution Conv_31 1 1 160 161 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_33 1 1 161 163 +BinaryOp Add_34 2 1 157_splitncnn_1 163 164 +Split splitncnn_2 1 3 164 164_splitncnn_0 164_splitncnn_1 164_splitncnn_2 +Convolution Conv_35 1 1 164_splitncnn_2 165 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_37 1 1 165 167 +Convolution Conv_38 1 1 167 168 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_40 1 1 168 170 +BinaryOp Add_41 2 1 164_splitncnn_1 170 171 +Concat Concat_42 4 1 156 157_splitncnn_0 164_splitncnn_0 171 172 +Convolution Conv_43 1 1 172 173 0=128 1=1 5=1 6=32768 +Swish Mul_45 1 1 173 175 +Split splitncnn_3 1 2 175 175_splitncnn_0 175_splitncnn_1 +Convolution Conv_46 1 1 175_splitncnn_1 176 0=256 1=3 3=2 4=1 5=1 6=294912 +Swish Mul_48 1 1 176 178 +Convolution Conv_49 1 1 178 179 0=256 1=1 5=1 6=65536 +Swish Mul_51 1 1 179 181 +Slice Split_52 1 2 181 182 183 -23300=2,128,-233 +Split splitncnn_4 1 3 183 183_splitncnn_0 183_splitncnn_1 183_splitncnn_2 +Convolution Conv_53 1 1 183_splitncnn_2 184 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_55 1 1 184 186 +Convolution Conv_56 1 1 186 187 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_58 1 1 187 189 +BinaryOp Add_59 2 1 183_splitncnn_1 189 190 +Split splitncnn_5 1 3 190 190_splitncnn_0 190_splitncnn_1 190_splitncnn_2 +Convolution Conv_60 1 1 190_splitncnn_2 191 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_62 1 1 191 193 +Convolution Conv_63 1 1 193 194 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_65 1 1 194 196 +BinaryOp Add_66 2 1 190_splitncnn_1 196 197 +Concat Concat_67 4 1 182 183_splitncnn_0 190_splitncnn_0 197 198 +Convolution Conv_68 1 1 198 199 0=256 1=1 5=1 6=131072 +Swish Mul_70 1 1 199 201 +Split splitncnn_6 1 2 201 201_splitncnn_0 201_splitncnn_1 +Convolution Conv_71 1 1 201_splitncnn_1 202 0=512 1=3 3=2 4=1 5=1 6=1179648 +Swish Mul_73 1 1 202 204 +Convolution Conv_74 1 1 204 205 0=512 1=1 5=1 6=262144 +Swish Mul_76 1 1 205 207 +Slice Split_77 1 2 207 208 209 -23300=2,256,-233 +Split splitncnn_7 1 3 209 209_splitncnn_0 209_splitncnn_1 209_splitncnn_2 +Convolution Conv_78 1 1 209_splitncnn_2 210 0=256 1=3 4=1 5=1 6=589824 +Swish Mul_80 1 1 210 212 +Convolution Conv_81 1 1 212 213 0=256 1=3 4=1 5=1 6=589824 +Swish Mul_83 1 1 213 215 +BinaryOp Add_84 2 1 209_splitncnn_1 215 216 +Concat Concat_85 3 1 208 209_splitncnn_0 216 217 +Convolution Conv_86 1 1 217 218 0=512 1=1 5=1 6=393216 +Swish Mul_88 1 1 218 220 +Convolution Conv_89 1 1 220 221 0=256 1=1 5=1 6=131072 +Swish Mul_91 1 1 221 223 +Split splitncnn_8 1 2 223 223_splitncnn_0 223_splitncnn_1 +Pooling MaxPool_92 1 1 223_splitncnn_1 224 1=5 3=2 5=1 +Split splitncnn_9 1 2 224 224_splitncnn_0 224_splitncnn_1 +Pooling MaxPool_93 1 1 224_splitncnn_1 225 1=5 3=2 5=1 +Split splitncnn_10 1 2 225 225_splitncnn_0 225_splitncnn_1 +Pooling MaxPool_94 1 1 225_splitncnn_1 226 1=5 3=2 5=1 +Concat Concat_95 4 1 223_splitncnn_0 224_splitncnn_0 225_splitncnn_0 226 227 +Convolution Conv_96 1 1 227 228 0=512 1=1 5=1 6=524288 +Swish Mul_98 1 1 228 230 +Split splitncnn_11 1 2 230 230_splitncnn_0 230_splitncnn_1 +Interp Resize_100 1 1 230_splitncnn_1 235 0=1 1=2.000000e+00 2=2.000000e+00 +Concat Concat_101 2 1 235 201_splitncnn_0 236 +Convolution Conv_102 1 1 236 237 0=256 1=1 5=1 6=196608 +Swish Mul_104 1 1 237 239 +Slice Split_105 1 2 239 240 241 -23300=2,128,-233 +Split splitncnn_12 1 2 241 241_splitncnn_0 241_splitncnn_1 +Convolution Conv_106 1 1 241_splitncnn_1 242 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_108 1 1 242 244 +Convolution Conv_109 1 1 244 245 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_111 1 1 245 247 +Concat Concat_112 3 1 240 241_splitncnn_0 247 248 +Convolution Conv_113 1 1 248 249 0=256 1=1 5=1 6=98304 +Swish Mul_115 1 1 249 251 +Split splitncnn_13 1 2 251 251_splitncnn_0 251_splitncnn_1 +Interp Resize_117 1 1 251_splitncnn_1 256 0=1 1=2.000000e+00 2=2.000000e+00 +Concat Concat_118 2 1 256 175_splitncnn_0 257 +Convolution Conv_119 1 1 257 258 0=128 1=1 5=1 6=49152 +Swish Mul_121 1 1 258 260 +Slice Split_122 1 2 260 261 262 -23300=2,64,-233 +Split splitncnn_14 1 2 262 262_splitncnn_0 262_splitncnn_1 +Convolution Conv_123 1 1 262_splitncnn_1 263 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_125 1 1 263 265 +Convolution Conv_126 1 1 265 266 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_128 1 1 266 268 +Concat Concat_129 3 1 261 262_splitncnn_0 268 269 +Convolution Conv_130 1 1 269 270 0=128 1=1 5=1 6=24576 +Swish Mul_132 1 1 270 272 +Split splitncnn_15 1 3 272 272_splitncnn_0 272_splitncnn_1 272_splitncnn_2 +Convolution Conv_133 1 1 272_splitncnn_2 273 0=128 1=3 3=2 4=1 5=1 6=147456 +Swish Mul_135 1 1 273 275 +Concat Concat_136 2 1 275 251_splitncnn_0 276 +Convolution Conv_137 1 1 276 277 0=256 1=1 5=1 6=98304 +Swish Mul_139 1 1 277 279 +Slice Split_140 1 2 279 280 281 -23300=2,128,-233 +Split splitncnn_16 1 2 281 281_splitncnn_0 281_splitncnn_1 +Convolution Conv_141 1 1 281_splitncnn_1 282 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_143 1 1 282 284 +Convolution Conv_144 1 1 284 285 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_146 1 1 285 287 +Concat Concat_147 3 1 280 281_splitncnn_0 287 288 +Convolution Conv_148 1 1 288 289 0=256 1=1 5=1 6=98304 +Swish Mul_150 1 1 289 291 +Split splitncnn_17 1 3 291 291_splitncnn_0 291_splitncnn_1 291_splitncnn_2 +Convolution Conv_151 1 1 291_splitncnn_2 292 0=256 1=3 3=2 4=1 5=1 6=589824 +Swish Mul_153 1 1 292 294 +Concat Concat_154 2 1 294 230_splitncnn_0 295 +Convolution Conv_155 1 1 295 296 0=512 1=1 5=1 6=393216 +Swish Mul_157 1 1 296 298 +Slice Split_158 1 2 298 299 300 -23300=2,256,-233 +Split splitncnn_18 1 2 300 300_splitncnn_0 300_splitncnn_1 +Convolution Conv_159 1 1 300_splitncnn_1 301 0=256 1=3 4=1 5=1 6=589824 +Swish Mul_161 1 1 301 303 +Convolution Conv_162 1 1 303 304 0=256 1=3 4=1 5=1 6=589824 +Swish Mul_164 1 1 304 306 +Concat Concat_165 3 1 299 300_splitncnn_0 306 307 +Convolution Conv_166 1 1 307 308 0=512 1=1 5=1 6=393216 +Swish Mul_168 1 1 308 310 +Split splitncnn_19 1 2 310 310_splitncnn_0 310_splitncnn_1 +Convolution Conv_169 1 1 272_splitncnn_1 311 0=64 1=3 4=1 5=1 6=73728 +Swish Mul_171 1 1 311 313 +Convolution Conv_172 1 1 313 314 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_174 1 1 314 316 +Convolution Conv_175 1 1 316 317 0=64 1=1 5=1 6=4096 +Convolution Conv_176 1 1 272_splitncnn_0 318 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_178 1 1 318 320 +Convolution Conv_179 1 1 320 321 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_181 1 1 321 323 +Convolution Conv_182 1 1 323 324 0=5 1=1 5=1 6=640 +Concat Concat_183 2 1 317 324 325 +Convolution Conv_184 1 1 291_splitncnn_1 326 0=64 1=3 4=1 5=1 6=147456 +Swish Mul_186 1 1 326 328 +Convolution Conv_187 1 1 328 329 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_189 1 1 329 331 +Convolution Conv_190 1 1 331 332 0=64 1=1 5=1 6=4096 +Convolution Conv_191 1 1 291_splitncnn_0 333 0=128 1=3 4=1 5=1 6=294912 +Swish Mul_193 1 1 333 335 +Convolution Conv_194 1 1 335 336 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_196 1 1 336 338 +Convolution Conv_197 1 1 338 339 0=5 1=1 5=1 6=640 +Concat Concat_198 2 1 332 339 340 +Convolution Conv_199 1 1 310_splitncnn_1 341 0=64 1=3 4=1 5=1 6=294912 +Swish Mul_201 1 1 341 343 +Convolution Conv_202 1 1 343 344 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_204 1 1 344 346 +Convolution Conv_205 1 1 346 347 0=64 1=1 5=1 6=4096 +Convolution Conv_206 1 1 310_splitncnn_0 348 0=128 1=3 4=1 5=1 6=589824 +Swish Mul_208 1 1 348 350 +Convolution Conv_209 1 1 350 351 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_211 1 1 351 353 +Convolution Conv_212 1 1 353 354 0=5 1=1 5=1 6=640 +Concat Concat_213 2 1 347 354 355 +Reshape Reshape_219 1 1 325 365 0=-1 1=69 +Reshape Reshape_222 1 1 340 372 0=-1 1=69 +Reshape Reshape_225 1 1 355 379 0=-1 1=69 +Concat Concat_226 3 1 365 372 379 380 0=1 +Permute Transpose_227 1 1 380 output 0=1 diff --git a/app/src/main/cpp/yolo.cpp b/app/src/main/cpp/yolo.cpp index fd0427f..63017a4 100644 --- a/app/src/main/cpp/yolo.cpp +++ b/app/src/main/cpp/yolo.cpp @@ -426,7 +426,7 @@ int height = rgb.rows; //把opencv Mat转为 ncnn Mat - ncnn::Mat in = ncnn::Mat::from_pixels(rgb.data, ncnn::Mat::PIXEL_RGB2BGR, width, height); + ncnn::Mat in = ncnn::Mat::from_pixels(rgb.data, ncnn::Mat::PIXEL_RGB, width, height); std::vector cls_scores; { @@ -480,7 +480,7 @@ w = w * scale; } - ncnn::Mat in = ncnn::Mat::from_pixels_resize(rgb.data, ncnn::Mat::PIXEL_BGR2RGB, width, + ncnn::Mat in = ncnn::Mat::from_pixels_resize(rgb.data, ncnn::Mat::PIXEL_RGB, width, height, w, h); // pad to target_size rectangle @@ -631,7 +631,7 @@ } ncnn::Mat in = ncnn::Mat::from_pixels_resize( - rgb.data, ncnn::Mat::PIXEL_RGB2BGR, width, height, w, h + rgb.data, ncnn::Mat::PIXEL_RGB, width, height, w, h ); // pad to target_size rectangle @@ -658,7 +658,8 @@ std::vector strides = {8, 16, 32}; // might have stride=64 std::vector grid_strides; generate_grids_and_stride(in_pad.w, in_pad.h, strides, grid_strides); - generate_proposals(grid_strides, out, prob_threshold, proposals, 43); +// generate_proposals(grid_strides, out, prob_threshold, proposals, 43); + generate_proposals(grid_strides, out, prob_threshold, proposals, 5); // sort all proposals by score from highest to lowest qsort_descent_inplace(proposals); @@ -706,31 +707,18 @@ javaVM->AttachCurrentThread(&env, nullptr); jclass callback_clazz = env->GetObjectClass(j_callback); jclass output_clazz = env->GetObjectClass(j_output); - /** - * I: 整数类型(int) - * J: 长整数类型(long) - * D: 双精度浮点数类型(double) - * F: 单精度浮点数类型(float) - * Z: 布尔类型(boolean) - * C: 字符类型(char) - * B: 字节类型(byte) - * S: 短整数类型(short) - *
-----------------------------------------------
- * Ljava/lang/Object;: 表示 Object 类型的引用 - * Ljava/lang/String;: 表示 String 类型的引用 - * L包名/类名;: 表示特定包名和类名的引用 - *
-----------------------------------------------
- * 例如: - * int add(int a, int b): (II)I - * - * String concat(String str1, String str2): (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; - *
-----------------------------------------------
- * [Ljava/lang/String;: 表示 String 类型的一维数组 - * */ + jmethodID j_method_id = env->GetMethodID( - callback_clazz, "onDetect", "(Lcom/casic/br/app/external/YoloResult;)V" + callback_clazz, "onDetect", "(Ljava/util/ArrayList;)V" ); + //获取ArrayList类 + jclass list_clazz = env->FindClass("java/util/ArrayList"); + jmethodID arraylist_init = env->GetMethodID(list_clazz, "", "()V"); + jmethodID arraylist_add = env->GetMethodID(list_clazz, "add", "(Ljava/lang/Object;)Z"); + //初始化ArrayList对象 + jobject arraylist_obj = env->NewObject(list_clazz, arraylist_init); + for (int i = 0; i < count; i++) { auto item = objects[i]; @@ -750,9 +738,17 @@ jfieldID prob = env->GetFieldID(output_clazz, "prob", "F"); env->SetFloatField(j_output, prob, item.prob); - //回调 - env->CallVoidMethod(j_callback, j_method_id, j_output); + __android_log_print( + ANDROID_LOG_DEBUG, + "ncnn", + "type %d %.1f%%", item.label, item.prob * 100 + ); + + //add + env->CallBooleanMethod(arraylist_obj, arraylist_add, j_output); } + //回调 + env->CallVoidMethod(j_callback, j_method_id, arraylist_obj); /** * Mat数据。 @@ -767,21 +763,24 @@ } int Yolo::draw(cv::Mat &rgb, const std::vector &objects) { +// static const char *class_names[] = { +// "tripod", "tee", "person", +// "shut-off valve", "hazard signs", "pressure tester", +// "pressure gauge", "reflective clothing", "respirator masks", +// "throat foil", "round-headed water gun", "safety signs", +// "helmet", "security identification", "safety ropes", +// "intercom", "pointed water gun", "switch", +// "alarm device", "joint", "construction street signs", +// "gas detectors", "hoses", "hose_rectangle", +// "flow-meter", "fire hydrant box", "fire extinguisher", +// "lighting equipment", "flame-out protection", "exposed wires", +// "circuit diagram", "cordon", "regulator", +// "length adjuster", "stickers", "across wires", +// "road cones", "hose", "filter", +// "distribution box", "long-shank valves", "valve", "ducts" +// }; static const char *class_names[] = { - "tripod", "tee", "person", - "shut-off valve", "hazard signs", "pressure tester", - "pressure gauge", "reflective clothing", "respirator masks", - "throat foil", "round-headed water gun", "safety signs", - "helmet", "security identification", "safety ropes", - "intercom", "pointed water gun", "switch", - "alarm device", "joint", "construction street signs", - "gas detectors", "hoses", "hose_rectangle", - "flow-meter", "fire hydrant box", "fire extinguisher", - "lighting equipment", "flame-out protection", "exposed wires", - "circuit diagram", "cordon", "regulator", - "length adjuster", "stickers", "across wires", - "road cones", "hose", "filter", - "distribution box", "long-shank valves", "valve", "ducts" + "Special Hose", "Person", "Hard Hat", "Overalls", "Non-Special Hose" }; static const unsigned char colors[19][3] = { diff --git a/app/src/main/cpp/yolov8ncnn.cpp b/app/src/main/cpp/yolov8ncnn.cpp index e758ef5..403a025 100644 --- a/app/src/main/cpp/yolov8ncnn.cpp +++ b/app/src/main/cpp/yolov8ncnn.cpp @@ -132,6 +132,8 @@ //检测 g_yolo->detect(rgb, objects); + +// g_yolo->draw(rgb, objects); } else { draw_unsupported(rgb); } @@ -175,19 +177,27 @@ AAssetManager *mgr = AAssetManager_fromJava(env, assetManager); //分割、分类、检测 - const char *model_types[] = {"best-sim-opt-fp16", "model.ncnn", "yolov8s-detect-sim-opt-fp16"}; +// const char *model_types[] = {"best-sim-opt-fp16", "model.ncnn", "yolov8s-detect-sim-opt-fp16"}; + const char *model_types[] = {"ji-sim-opt"}; - const int target_sizes[] = {320, 320, 320}; +// const int target_sizes[] = {320, 320, 320}; + const int target_sizes[] = {320}; +// const float mean_values[][3] = { +// {103.53f, 116.28f, 123.675f}, +// {103.53f, 116.28f, 123.675f}, +// {103.53f, 116.28f, 123.675f} +// }; const float mean_values[][3] = { - {103.53f, 116.28f, 123.675f}, - {103.53f, 116.28f, 123.675f}, {103.53f, 116.28f, 123.675f} }; +// const float norm_values[][3] = { +// {1 / 255.f, 1 / 255.f, 1 / 255.f}, +// {1 / 255.f, 1 / 255.f, 1 / 255.f}, +// {1 / 255.f, 1 / 255.f, 1 / 255.f} +// }; const float norm_values[][3] = { - {1 / 255.f, 1 / 255.f, 1 / 255.f}, - {1 / 255.f, 1 / 255.f, 1 / 255.f}, {1 / 255.f, 1 / 255.f, 1 / 255.f} }; diff --git a/app/src/main/java/com/casic/br/app/external/INativeCallback.kt b/app/src/main/java/com/casic/br/app/external/INativeCallback.kt index c353971..a17c804 100644 --- a/app/src/main/java/com/casic/br/app/external/INativeCallback.kt +++ b/app/src/main/java/com/casic/br/app/external/INativeCallback.kt @@ -14,5 +14,5 @@ /** * 检测 */ - fun onDetect(output: YoloResult) + fun onDetect(output: ArrayList) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt index 62d23b2..e5464e0 100644 --- a/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt @@ -39,16 +39,19 @@ ) } + // val CLASS_NAMES_ARRAY = arrayListOf( +// "三脚架", "三通", "人", "切断阀", "危险告知牌", +// "压力测试仪", "压力表", "反光衣", "呼吸面罩", "喉箍", +// "圆头水枪", "安全告知牌", "安全帽", "安全标识", "安全绳", +// "对讲机", "尖头水枪", "开关", "报警装置", "接头", +// "施工路牌", "气体检测仪", "水带", "水带_矩形", "流量计", +// "消火栓箱", "灭火器", "照明设备", "熄火保护", "电线暴露", +// "电路图", "警戒线", "调压器", "调长器", "贴纸", +// "跨电线", "路锥", "软管", "过滤器", "配电箱", +// "长柄阀门", "阀门", "风管" +// ) val CLASS_NAMES_ARRAY = arrayListOf( - "三脚架", "三通", "人", "切断阀", "危险告知牌", - "压力测试仪", "压力表", "反光衣", "呼吸面罩", "喉箍", - "圆头水枪", "安全告知牌", "安全帽", "安全标识", "安全绳", - "对讲机", "尖头水枪", "开关", "报警装置", "接头", - "施工路牌", "气体检测仪", "水带", "水带_矩形", "流量计", - "消火栓箱", "灭火器", "照明设备", "熄火保护", "电线暴露", - "电路图", "警戒线", "调压器", "调长器", "贴纸", - "跨电线", "路锥", "软管", "过滤器", "配电箱", - "长柄阀门", "阀门", "风管" + "专用软管", "人", "安全帽", "工服", "非专用软管" ) //配电箱 diff --git a/app/src/main/assets/ji-sim-opt.bin b/app/src/main/assets/ji-sim-opt.bin new file mode 100644 index 0000000..a2695b4 --- /dev/null +++ b/app/src/main/assets/ji-sim-opt.bin Binary files differ diff --git a/app/src/main/assets/ji-sim-opt.param b/app/src/main/assets/ji-sim-opt.param new file mode 100644 index 0000000..1d0e424 --- /dev/null +++ b/app/src/main/assets/ji-sim-opt.param @@ -0,0 +1,183 @@ +7767517 +181 217 +Input images 0 1 images +Convolution Conv_0 1 1 images 128 0=32 1=3 3=2 4=1 5=1 6=864 +Swish Mul_2 1 1 128 130 +Convolution Conv_3 1 1 130 131 0=64 1=3 3=2 4=1 5=1 6=18432 +Swish Mul_5 1 1 131 133 +Convolution Conv_6 1 1 133 134 0=64 1=1 5=1 6=4096 +Swish Mul_8 1 1 134 136 +Slice Split_9 1 2 136 137 138 -23300=2,32,-233 +Split splitncnn_0 1 3 138 138_splitncnn_0 138_splitncnn_1 138_splitncnn_2 +Convolution Conv_10 1 1 138_splitncnn_2 139 0=32 1=3 4=1 5=1 6=9216 +Swish Mul_12 1 1 139 141 +Convolution Conv_13 1 1 141 142 0=32 1=3 4=1 5=1 6=9216 +Swish Mul_15 1 1 142 144 +BinaryOp Add_16 2 1 138_splitncnn_1 144 145 +Concat Concat_17 3 1 137 138_splitncnn_0 145 146 +Convolution Conv_18 1 1 146 147 0=64 1=1 5=1 6=6144 +Swish Mul_20 1 1 147 149 +Convolution Conv_21 1 1 149 150 0=128 1=3 3=2 4=1 5=1 6=73728 +Swish Mul_23 1 1 150 152 +Convolution Conv_24 1 1 152 153 0=128 1=1 5=1 6=16384 +Swish Mul_26 1 1 153 155 +Slice Split_27 1 2 155 156 157 -23300=2,64,-233 +Split splitncnn_1 1 3 157 157_splitncnn_0 157_splitncnn_1 157_splitncnn_2 +Convolution Conv_28 1 1 157_splitncnn_2 158 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_30 1 1 158 160 +Convolution Conv_31 1 1 160 161 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_33 1 1 161 163 +BinaryOp Add_34 2 1 157_splitncnn_1 163 164 +Split splitncnn_2 1 3 164 164_splitncnn_0 164_splitncnn_1 164_splitncnn_2 +Convolution Conv_35 1 1 164_splitncnn_2 165 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_37 1 1 165 167 +Convolution Conv_38 1 1 167 168 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_40 1 1 168 170 +BinaryOp Add_41 2 1 164_splitncnn_1 170 171 +Concat Concat_42 4 1 156 157_splitncnn_0 164_splitncnn_0 171 172 +Convolution Conv_43 1 1 172 173 0=128 1=1 5=1 6=32768 +Swish Mul_45 1 1 173 175 +Split splitncnn_3 1 2 175 175_splitncnn_0 175_splitncnn_1 +Convolution Conv_46 1 1 175_splitncnn_1 176 0=256 1=3 3=2 4=1 5=1 6=294912 +Swish Mul_48 1 1 176 178 +Convolution Conv_49 1 1 178 179 0=256 1=1 5=1 6=65536 +Swish Mul_51 1 1 179 181 +Slice Split_52 1 2 181 182 183 -23300=2,128,-233 +Split splitncnn_4 1 3 183 183_splitncnn_0 183_splitncnn_1 183_splitncnn_2 +Convolution Conv_53 1 1 183_splitncnn_2 184 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_55 1 1 184 186 +Convolution Conv_56 1 1 186 187 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_58 1 1 187 189 +BinaryOp Add_59 2 1 183_splitncnn_1 189 190 +Split splitncnn_5 1 3 190 190_splitncnn_0 190_splitncnn_1 190_splitncnn_2 +Convolution Conv_60 1 1 190_splitncnn_2 191 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_62 1 1 191 193 +Convolution Conv_63 1 1 193 194 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_65 1 1 194 196 +BinaryOp Add_66 2 1 190_splitncnn_1 196 197 +Concat Concat_67 4 1 182 183_splitncnn_0 190_splitncnn_0 197 198 +Convolution Conv_68 1 1 198 199 0=256 1=1 5=1 6=131072 +Swish Mul_70 1 1 199 201 +Split splitncnn_6 1 2 201 201_splitncnn_0 201_splitncnn_1 +Convolution Conv_71 1 1 201_splitncnn_1 202 0=512 1=3 3=2 4=1 5=1 6=1179648 +Swish Mul_73 1 1 202 204 +Convolution Conv_74 1 1 204 205 0=512 1=1 5=1 6=262144 +Swish Mul_76 1 1 205 207 +Slice Split_77 1 2 207 208 209 -23300=2,256,-233 +Split splitncnn_7 1 3 209 209_splitncnn_0 209_splitncnn_1 209_splitncnn_2 +Convolution Conv_78 1 1 209_splitncnn_2 210 0=256 1=3 4=1 5=1 6=589824 +Swish Mul_80 1 1 210 212 +Convolution Conv_81 1 1 212 213 0=256 1=3 4=1 5=1 6=589824 +Swish Mul_83 1 1 213 215 +BinaryOp Add_84 2 1 209_splitncnn_1 215 216 +Concat Concat_85 3 1 208 209_splitncnn_0 216 217 +Convolution Conv_86 1 1 217 218 0=512 1=1 5=1 6=393216 +Swish Mul_88 1 1 218 220 +Convolution Conv_89 1 1 220 221 0=256 1=1 5=1 6=131072 +Swish Mul_91 1 1 221 223 +Split splitncnn_8 1 2 223 223_splitncnn_0 223_splitncnn_1 +Pooling MaxPool_92 1 1 223_splitncnn_1 224 1=5 3=2 5=1 +Split splitncnn_9 1 2 224 224_splitncnn_0 224_splitncnn_1 +Pooling MaxPool_93 1 1 224_splitncnn_1 225 1=5 3=2 5=1 +Split splitncnn_10 1 2 225 225_splitncnn_0 225_splitncnn_1 +Pooling MaxPool_94 1 1 225_splitncnn_1 226 1=5 3=2 5=1 +Concat Concat_95 4 1 223_splitncnn_0 224_splitncnn_0 225_splitncnn_0 226 227 +Convolution Conv_96 1 1 227 228 0=512 1=1 5=1 6=524288 +Swish Mul_98 1 1 228 230 +Split splitncnn_11 1 2 230 230_splitncnn_0 230_splitncnn_1 +Interp Resize_100 1 1 230_splitncnn_1 235 0=1 1=2.000000e+00 2=2.000000e+00 +Concat Concat_101 2 1 235 201_splitncnn_0 236 +Convolution Conv_102 1 1 236 237 0=256 1=1 5=1 6=196608 +Swish Mul_104 1 1 237 239 +Slice Split_105 1 2 239 240 241 -23300=2,128,-233 +Split splitncnn_12 1 2 241 241_splitncnn_0 241_splitncnn_1 +Convolution Conv_106 1 1 241_splitncnn_1 242 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_108 1 1 242 244 +Convolution Conv_109 1 1 244 245 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_111 1 1 245 247 +Concat Concat_112 3 1 240 241_splitncnn_0 247 248 +Convolution Conv_113 1 1 248 249 0=256 1=1 5=1 6=98304 +Swish Mul_115 1 1 249 251 +Split splitncnn_13 1 2 251 251_splitncnn_0 251_splitncnn_1 +Interp Resize_117 1 1 251_splitncnn_1 256 0=1 1=2.000000e+00 2=2.000000e+00 +Concat Concat_118 2 1 256 175_splitncnn_0 257 +Convolution Conv_119 1 1 257 258 0=128 1=1 5=1 6=49152 +Swish Mul_121 1 1 258 260 +Slice Split_122 1 2 260 261 262 -23300=2,64,-233 +Split splitncnn_14 1 2 262 262_splitncnn_0 262_splitncnn_1 +Convolution Conv_123 1 1 262_splitncnn_1 263 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_125 1 1 263 265 +Convolution Conv_126 1 1 265 266 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_128 1 1 266 268 +Concat Concat_129 3 1 261 262_splitncnn_0 268 269 +Convolution Conv_130 1 1 269 270 0=128 1=1 5=1 6=24576 +Swish Mul_132 1 1 270 272 +Split splitncnn_15 1 3 272 272_splitncnn_0 272_splitncnn_1 272_splitncnn_2 +Convolution Conv_133 1 1 272_splitncnn_2 273 0=128 1=3 3=2 4=1 5=1 6=147456 +Swish Mul_135 1 1 273 275 +Concat Concat_136 2 1 275 251_splitncnn_0 276 +Convolution Conv_137 1 1 276 277 0=256 1=1 5=1 6=98304 +Swish Mul_139 1 1 277 279 +Slice Split_140 1 2 279 280 281 -23300=2,128,-233 +Split splitncnn_16 1 2 281 281_splitncnn_0 281_splitncnn_1 +Convolution Conv_141 1 1 281_splitncnn_1 282 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_143 1 1 282 284 +Convolution Conv_144 1 1 284 285 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_146 1 1 285 287 +Concat Concat_147 3 1 280 281_splitncnn_0 287 288 +Convolution Conv_148 1 1 288 289 0=256 1=1 5=1 6=98304 +Swish Mul_150 1 1 289 291 +Split splitncnn_17 1 3 291 291_splitncnn_0 291_splitncnn_1 291_splitncnn_2 +Convolution Conv_151 1 1 291_splitncnn_2 292 0=256 1=3 3=2 4=1 5=1 6=589824 +Swish Mul_153 1 1 292 294 +Concat Concat_154 2 1 294 230_splitncnn_0 295 +Convolution Conv_155 1 1 295 296 0=512 1=1 5=1 6=393216 +Swish Mul_157 1 1 296 298 +Slice Split_158 1 2 298 299 300 -23300=2,256,-233 +Split splitncnn_18 1 2 300 300_splitncnn_0 300_splitncnn_1 +Convolution Conv_159 1 1 300_splitncnn_1 301 0=256 1=3 4=1 5=1 6=589824 +Swish Mul_161 1 1 301 303 +Convolution Conv_162 1 1 303 304 0=256 1=3 4=1 5=1 6=589824 +Swish Mul_164 1 1 304 306 +Concat Concat_165 3 1 299 300_splitncnn_0 306 307 +Convolution Conv_166 1 1 307 308 0=512 1=1 5=1 6=393216 +Swish Mul_168 1 1 308 310 +Split splitncnn_19 1 2 310 310_splitncnn_0 310_splitncnn_1 +Convolution Conv_169 1 1 272_splitncnn_1 311 0=64 1=3 4=1 5=1 6=73728 +Swish Mul_171 1 1 311 313 +Convolution Conv_172 1 1 313 314 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_174 1 1 314 316 +Convolution Conv_175 1 1 316 317 0=64 1=1 5=1 6=4096 +Convolution Conv_176 1 1 272_splitncnn_0 318 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_178 1 1 318 320 +Convolution Conv_179 1 1 320 321 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_181 1 1 321 323 +Convolution Conv_182 1 1 323 324 0=5 1=1 5=1 6=640 +Concat Concat_183 2 1 317 324 325 +Convolution Conv_184 1 1 291_splitncnn_1 326 0=64 1=3 4=1 5=1 6=147456 +Swish Mul_186 1 1 326 328 +Convolution Conv_187 1 1 328 329 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_189 1 1 329 331 +Convolution Conv_190 1 1 331 332 0=64 1=1 5=1 6=4096 +Convolution Conv_191 1 1 291_splitncnn_0 333 0=128 1=3 4=1 5=1 6=294912 +Swish Mul_193 1 1 333 335 +Convolution Conv_194 1 1 335 336 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_196 1 1 336 338 +Convolution Conv_197 1 1 338 339 0=5 1=1 5=1 6=640 +Concat Concat_198 2 1 332 339 340 +Convolution Conv_199 1 1 310_splitncnn_1 341 0=64 1=3 4=1 5=1 6=294912 +Swish Mul_201 1 1 341 343 +Convolution Conv_202 1 1 343 344 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_204 1 1 344 346 +Convolution Conv_205 1 1 346 347 0=64 1=1 5=1 6=4096 +Convolution Conv_206 1 1 310_splitncnn_0 348 0=128 1=3 4=1 5=1 6=589824 +Swish Mul_208 1 1 348 350 +Convolution Conv_209 1 1 350 351 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_211 1 1 351 353 +Convolution Conv_212 1 1 353 354 0=5 1=1 5=1 6=640 +Concat Concat_213 2 1 347 354 355 +Reshape Reshape_219 1 1 325 365 0=-1 1=69 +Reshape Reshape_222 1 1 340 372 0=-1 1=69 +Reshape Reshape_225 1 1 355 379 0=-1 1=69 +Concat Concat_226 3 1 365 372 379 380 0=1 +Permute Transpose_227 1 1 380 output 0=1 diff --git a/app/src/main/cpp/yolo.cpp b/app/src/main/cpp/yolo.cpp index fd0427f..63017a4 100644 --- a/app/src/main/cpp/yolo.cpp +++ b/app/src/main/cpp/yolo.cpp @@ -426,7 +426,7 @@ int height = rgb.rows; //把opencv Mat转为 ncnn Mat - ncnn::Mat in = ncnn::Mat::from_pixels(rgb.data, ncnn::Mat::PIXEL_RGB2BGR, width, height); + ncnn::Mat in = ncnn::Mat::from_pixels(rgb.data, ncnn::Mat::PIXEL_RGB, width, height); std::vector cls_scores; { @@ -480,7 +480,7 @@ w = w * scale; } - ncnn::Mat in = ncnn::Mat::from_pixels_resize(rgb.data, ncnn::Mat::PIXEL_BGR2RGB, width, + ncnn::Mat in = ncnn::Mat::from_pixels_resize(rgb.data, ncnn::Mat::PIXEL_RGB, width, height, w, h); // pad to target_size rectangle @@ -631,7 +631,7 @@ } ncnn::Mat in = ncnn::Mat::from_pixels_resize( - rgb.data, ncnn::Mat::PIXEL_RGB2BGR, width, height, w, h + rgb.data, ncnn::Mat::PIXEL_RGB, width, height, w, h ); // pad to target_size rectangle @@ -658,7 +658,8 @@ std::vector strides = {8, 16, 32}; // might have stride=64 std::vector grid_strides; generate_grids_and_stride(in_pad.w, in_pad.h, strides, grid_strides); - generate_proposals(grid_strides, out, prob_threshold, proposals, 43); +// generate_proposals(grid_strides, out, prob_threshold, proposals, 43); + generate_proposals(grid_strides, out, prob_threshold, proposals, 5); // sort all proposals by score from highest to lowest qsort_descent_inplace(proposals); @@ -706,31 +707,18 @@ javaVM->AttachCurrentThread(&env, nullptr); jclass callback_clazz = env->GetObjectClass(j_callback); jclass output_clazz = env->GetObjectClass(j_output); - /** - * I: 整数类型(int) - * J: 长整数类型(long) - * D: 双精度浮点数类型(double) - * F: 单精度浮点数类型(float) - * Z: 布尔类型(boolean) - * C: 字符类型(char) - * B: 字节类型(byte) - * S: 短整数类型(short) - *
-----------------------------------------------
- * Ljava/lang/Object;: 表示 Object 类型的引用 - * Ljava/lang/String;: 表示 String 类型的引用 - * L包名/类名;: 表示特定包名和类名的引用 - *
-----------------------------------------------
- * 例如: - * int add(int a, int b): (II)I - * - * String concat(String str1, String str2): (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; - *
-----------------------------------------------
- * [Ljava/lang/String;: 表示 String 类型的一维数组 - * */ + jmethodID j_method_id = env->GetMethodID( - callback_clazz, "onDetect", "(Lcom/casic/br/app/external/YoloResult;)V" + callback_clazz, "onDetect", "(Ljava/util/ArrayList;)V" ); + //获取ArrayList类 + jclass list_clazz = env->FindClass("java/util/ArrayList"); + jmethodID arraylist_init = env->GetMethodID(list_clazz, "", "()V"); + jmethodID arraylist_add = env->GetMethodID(list_clazz, "add", "(Ljava/lang/Object;)Z"); + //初始化ArrayList对象 + jobject arraylist_obj = env->NewObject(list_clazz, arraylist_init); + for (int i = 0; i < count; i++) { auto item = objects[i]; @@ -750,9 +738,17 @@ jfieldID prob = env->GetFieldID(output_clazz, "prob", "F"); env->SetFloatField(j_output, prob, item.prob); - //回调 - env->CallVoidMethod(j_callback, j_method_id, j_output); + __android_log_print( + ANDROID_LOG_DEBUG, + "ncnn", + "type %d %.1f%%", item.label, item.prob * 100 + ); + + //add + env->CallBooleanMethod(arraylist_obj, arraylist_add, j_output); } + //回调 + env->CallVoidMethod(j_callback, j_method_id, arraylist_obj); /** * Mat数据。 @@ -767,21 +763,24 @@ } int Yolo::draw(cv::Mat &rgb, const std::vector &objects) { +// static const char *class_names[] = { +// "tripod", "tee", "person", +// "shut-off valve", "hazard signs", "pressure tester", +// "pressure gauge", "reflective clothing", "respirator masks", +// "throat foil", "round-headed water gun", "safety signs", +// "helmet", "security identification", "safety ropes", +// "intercom", "pointed water gun", "switch", +// "alarm device", "joint", "construction street signs", +// "gas detectors", "hoses", "hose_rectangle", +// "flow-meter", "fire hydrant box", "fire extinguisher", +// "lighting equipment", "flame-out protection", "exposed wires", +// "circuit diagram", "cordon", "regulator", +// "length adjuster", "stickers", "across wires", +// "road cones", "hose", "filter", +// "distribution box", "long-shank valves", "valve", "ducts" +// }; static const char *class_names[] = { - "tripod", "tee", "person", - "shut-off valve", "hazard signs", "pressure tester", - "pressure gauge", "reflective clothing", "respirator masks", - "throat foil", "round-headed water gun", "safety signs", - "helmet", "security identification", "safety ropes", - "intercom", "pointed water gun", "switch", - "alarm device", "joint", "construction street signs", - "gas detectors", "hoses", "hose_rectangle", - "flow-meter", "fire hydrant box", "fire extinguisher", - "lighting equipment", "flame-out protection", "exposed wires", - "circuit diagram", "cordon", "regulator", - "length adjuster", "stickers", "across wires", - "road cones", "hose", "filter", - "distribution box", "long-shank valves", "valve", "ducts" + "Special Hose", "Person", "Hard Hat", "Overalls", "Non-Special Hose" }; static const unsigned char colors[19][3] = { diff --git a/app/src/main/cpp/yolov8ncnn.cpp b/app/src/main/cpp/yolov8ncnn.cpp index e758ef5..403a025 100644 --- a/app/src/main/cpp/yolov8ncnn.cpp +++ b/app/src/main/cpp/yolov8ncnn.cpp @@ -132,6 +132,8 @@ //检测 g_yolo->detect(rgb, objects); + +// g_yolo->draw(rgb, objects); } else { draw_unsupported(rgb); } @@ -175,19 +177,27 @@ AAssetManager *mgr = AAssetManager_fromJava(env, assetManager); //分割、分类、检测 - const char *model_types[] = {"best-sim-opt-fp16", "model.ncnn", "yolov8s-detect-sim-opt-fp16"}; +// const char *model_types[] = {"best-sim-opt-fp16", "model.ncnn", "yolov8s-detect-sim-opt-fp16"}; + const char *model_types[] = {"ji-sim-opt"}; - const int target_sizes[] = {320, 320, 320}; +// const int target_sizes[] = {320, 320, 320}; + const int target_sizes[] = {320}; +// const float mean_values[][3] = { +// {103.53f, 116.28f, 123.675f}, +// {103.53f, 116.28f, 123.675f}, +// {103.53f, 116.28f, 123.675f} +// }; const float mean_values[][3] = { - {103.53f, 116.28f, 123.675f}, - {103.53f, 116.28f, 123.675f}, {103.53f, 116.28f, 123.675f} }; +// const float norm_values[][3] = { +// {1 / 255.f, 1 / 255.f, 1 / 255.f}, +// {1 / 255.f, 1 / 255.f, 1 / 255.f}, +// {1 / 255.f, 1 / 255.f, 1 / 255.f} +// }; const float norm_values[][3] = { - {1 / 255.f, 1 / 255.f, 1 / 255.f}, - {1 / 255.f, 1 / 255.f, 1 / 255.f}, {1 / 255.f, 1 / 255.f, 1 / 255.f} }; diff --git a/app/src/main/java/com/casic/br/app/external/INativeCallback.kt b/app/src/main/java/com/casic/br/app/external/INativeCallback.kt index c353971..a17c804 100644 --- a/app/src/main/java/com/casic/br/app/external/INativeCallback.kt +++ b/app/src/main/java/com/casic/br/app/external/INativeCallback.kt @@ -14,5 +14,5 @@ /** * 检测 */ - fun onDetect(output: YoloResult) + fun onDetect(output: ArrayList) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt index 62d23b2..e5464e0 100644 --- a/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt @@ -39,16 +39,19 @@ ) } + // val CLASS_NAMES_ARRAY = arrayListOf( +// "三脚架", "三通", "人", "切断阀", "危险告知牌", +// "压力测试仪", "压力表", "反光衣", "呼吸面罩", "喉箍", +// "圆头水枪", "安全告知牌", "安全帽", "安全标识", "安全绳", +// "对讲机", "尖头水枪", "开关", "报警装置", "接头", +// "施工路牌", "气体检测仪", "水带", "水带_矩形", "流量计", +// "消火栓箱", "灭火器", "照明设备", "熄火保护", "电线暴露", +// "电路图", "警戒线", "调压器", "调长器", "贴纸", +// "跨电线", "路锥", "软管", "过滤器", "配电箱", +// "长柄阀门", "阀门", "风管" +// ) val CLASS_NAMES_ARRAY = arrayListOf( - "三脚架", "三通", "人", "切断阀", "危险告知牌", - "压力测试仪", "压力表", "反光衣", "呼吸面罩", "喉箍", - "圆头水枪", "安全告知牌", "安全帽", "安全标识", "安全绳", - "对讲机", "尖头水枪", "开关", "报警装置", "接头", - "施工路牌", "气体检测仪", "水带", "水带_矩形", "流量计", - "消火栓箱", "灭火器", "照明设备", "熄火保护", "电线暴露", - "电路图", "警戒线", "调压器", "调长器", "贴纸", - "跨电线", "路锥", "软管", "过滤器", "配电箱", - "长柄阀门", "阀门", "风管" + "专用软管", "人", "安全帽", "工服", "非专用软管" ) //配电箱 diff --git a/app/src/main/java/com/casic/br/app/view/LoginActivity.kt b/app/src/main/java/com/casic/br/app/view/LoginActivity.kt index cc1f13e..aef48b0 100644 --- a/app/src/main/java/com/casic/br/app/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/LoginActivity.kt @@ -50,8 +50,8 @@ //协程预加载算法模型 lifecycleScope.launch(Dispatchers.IO) { - yolov8ncnn.loadModel(assets, 1, 0) - yolov8ncnn.updateYoloState(YoloStateConst.CLASSIFY) + yolov8ncnn.loadModel(assets, 0, 0) + yolov8ncnn.updateYoloState(YoloStateConst.DETECT) } //初始化OpenCV diff --git a/app/src/main/assets/ji-sim-opt.bin b/app/src/main/assets/ji-sim-opt.bin new file mode 100644 index 0000000..a2695b4 --- /dev/null +++ b/app/src/main/assets/ji-sim-opt.bin Binary files differ diff --git a/app/src/main/assets/ji-sim-opt.param b/app/src/main/assets/ji-sim-opt.param new file mode 100644 index 0000000..1d0e424 --- /dev/null +++ b/app/src/main/assets/ji-sim-opt.param @@ -0,0 +1,183 @@ +7767517 +181 217 +Input images 0 1 images +Convolution Conv_0 1 1 images 128 0=32 1=3 3=2 4=1 5=1 6=864 +Swish Mul_2 1 1 128 130 +Convolution Conv_3 1 1 130 131 0=64 1=3 3=2 4=1 5=1 6=18432 +Swish Mul_5 1 1 131 133 +Convolution Conv_6 1 1 133 134 0=64 1=1 5=1 6=4096 +Swish Mul_8 1 1 134 136 +Slice Split_9 1 2 136 137 138 -23300=2,32,-233 +Split splitncnn_0 1 3 138 138_splitncnn_0 138_splitncnn_1 138_splitncnn_2 +Convolution Conv_10 1 1 138_splitncnn_2 139 0=32 1=3 4=1 5=1 6=9216 +Swish Mul_12 1 1 139 141 +Convolution Conv_13 1 1 141 142 0=32 1=3 4=1 5=1 6=9216 +Swish Mul_15 1 1 142 144 +BinaryOp Add_16 2 1 138_splitncnn_1 144 145 +Concat Concat_17 3 1 137 138_splitncnn_0 145 146 +Convolution Conv_18 1 1 146 147 0=64 1=1 5=1 6=6144 +Swish Mul_20 1 1 147 149 +Convolution Conv_21 1 1 149 150 0=128 1=3 3=2 4=1 5=1 6=73728 +Swish Mul_23 1 1 150 152 +Convolution Conv_24 1 1 152 153 0=128 1=1 5=1 6=16384 +Swish Mul_26 1 1 153 155 +Slice Split_27 1 2 155 156 157 -23300=2,64,-233 +Split splitncnn_1 1 3 157 157_splitncnn_0 157_splitncnn_1 157_splitncnn_2 +Convolution Conv_28 1 1 157_splitncnn_2 158 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_30 1 1 158 160 +Convolution Conv_31 1 1 160 161 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_33 1 1 161 163 +BinaryOp Add_34 2 1 157_splitncnn_1 163 164 +Split splitncnn_2 1 3 164 164_splitncnn_0 164_splitncnn_1 164_splitncnn_2 +Convolution Conv_35 1 1 164_splitncnn_2 165 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_37 1 1 165 167 +Convolution Conv_38 1 1 167 168 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_40 1 1 168 170 +BinaryOp Add_41 2 1 164_splitncnn_1 170 171 +Concat Concat_42 4 1 156 157_splitncnn_0 164_splitncnn_0 171 172 +Convolution Conv_43 1 1 172 173 0=128 1=1 5=1 6=32768 +Swish Mul_45 1 1 173 175 +Split splitncnn_3 1 2 175 175_splitncnn_0 175_splitncnn_1 +Convolution Conv_46 1 1 175_splitncnn_1 176 0=256 1=3 3=2 4=1 5=1 6=294912 +Swish Mul_48 1 1 176 178 +Convolution Conv_49 1 1 178 179 0=256 1=1 5=1 6=65536 +Swish Mul_51 1 1 179 181 +Slice Split_52 1 2 181 182 183 -23300=2,128,-233 +Split splitncnn_4 1 3 183 183_splitncnn_0 183_splitncnn_1 183_splitncnn_2 +Convolution Conv_53 1 1 183_splitncnn_2 184 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_55 1 1 184 186 +Convolution Conv_56 1 1 186 187 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_58 1 1 187 189 +BinaryOp Add_59 2 1 183_splitncnn_1 189 190 +Split splitncnn_5 1 3 190 190_splitncnn_0 190_splitncnn_1 190_splitncnn_2 +Convolution Conv_60 1 1 190_splitncnn_2 191 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_62 1 1 191 193 +Convolution Conv_63 1 1 193 194 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_65 1 1 194 196 +BinaryOp Add_66 2 1 190_splitncnn_1 196 197 +Concat Concat_67 4 1 182 183_splitncnn_0 190_splitncnn_0 197 198 +Convolution Conv_68 1 1 198 199 0=256 1=1 5=1 6=131072 +Swish Mul_70 1 1 199 201 +Split splitncnn_6 1 2 201 201_splitncnn_0 201_splitncnn_1 +Convolution Conv_71 1 1 201_splitncnn_1 202 0=512 1=3 3=2 4=1 5=1 6=1179648 +Swish Mul_73 1 1 202 204 +Convolution Conv_74 1 1 204 205 0=512 1=1 5=1 6=262144 +Swish Mul_76 1 1 205 207 +Slice Split_77 1 2 207 208 209 -23300=2,256,-233 +Split splitncnn_7 1 3 209 209_splitncnn_0 209_splitncnn_1 209_splitncnn_2 +Convolution Conv_78 1 1 209_splitncnn_2 210 0=256 1=3 4=1 5=1 6=589824 +Swish Mul_80 1 1 210 212 +Convolution Conv_81 1 1 212 213 0=256 1=3 4=1 5=1 6=589824 +Swish Mul_83 1 1 213 215 +BinaryOp Add_84 2 1 209_splitncnn_1 215 216 +Concat Concat_85 3 1 208 209_splitncnn_0 216 217 +Convolution Conv_86 1 1 217 218 0=512 1=1 5=1 6=393216 +Swish Mul_88 1 1 218 220 +Convolution Conv_89 1 1 220 221 0=256 1=1 5=1 6=131072 +Swish Mul_91 1 1 221 223 +Split splitncnn_8 1 2 223 223_splitncnn_0 223_splitncnn_1 +Pooling MaxPool_92 1 1 223_splitncnn_1 224 1=5 3=2 5=1 +Split splitncnn_9 1 2 224 224_splitncnn_0 224_splitncnn_1 +Pooling MaxPool_93 1 1 224_splitncnn_1 225 1=5 3=2 5=1 +Split splitncnn_10 1 2 225 225_splitncnn_0 225_splitncnn_1 +Pooling MaxPool_94 1 1 225_splitncnn_1 226 1=5 3=2 5=1 +Concat Concat_95 4 1 223_splitncnn_0 224_splitncnn_0 225_splitncnn_0 226 227 +Convolution Conv_96 1 1 227 228 0=512 1=1 5=1 6=524288 +Swish Mul_98 1 1 228 230 +Split splitncnn_11 1 2 230 230_splitncnn_0 230_splitncnn_1 +Interp Resize_100 1 1 230_splitncnn_1 235 0=1 1=2.000000e+00 2=2.000000e+00 +Concat Concat_101 2 1 235 201_splitncnn_0 236 +Convolution Conv_102 1 1 236 237 0=256 1=1 5=1 6=196608 +Swish Mul_104 1 1 237 239 +Slice Split_105 1 2 239 240 241 -23300=2,128,-233 +Split splitncnn_12 1 2 241 241_splitncnn_0 241_splitncnn_1 +Convolution Conv_106 1 1 241_splitncnn_1 242 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_108 1 1 242 244 +Convolution Conv_109 1 1 244 245 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_111 1 1 245 247 +Concat Concat_112 3 1 240 241_splitncnn_0 247 248 +Convolution Conv_113 1 1 248 249 0=256 1=1 5=1 6=98304 +Swish Mul_115 1 1 249 251 +Split splitncnn_13 1 2 251 251_splitncnn_0 251_splitncnn_1 +Interp Resize_117 1 1 251_splitncnn_1 256 0=1 1=2.000000e+00 2=2.000000e+00 +Concat Concat_118 2 1 256 175_splitncnn_0 257 +Convolution Conv_119 1 1 257 258 0=128 1=1 5=1 6=49152 +Swish Mul_121 1 1 258 260 +Slice Split_122 1 2 260 261 262 -23300=2,64,-233 +Split splitncnn_14 1 2 262 262_splitncnn_0 262_splitncnn_1 +Convolution Conv_123 1 1 262_splitncnn_1 263 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_125 1 1 263 265 +Convolution Conv_126 1 1 265 266 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_128 1 1 266 268 +Concat Concat_129 3 1 261 262_splitncnn_0 268 269 +Convolution Conv_130 1 1 269 270 0=128 1=1 5=1 6=24576 +Swish Mul_132 1 1 270 272 +Split splitncnn_15 1 3 272 272_splitncnn_0 272_splitncnn_1 272_splitncnn_2 +Convolution Conv_133 1 1 272_splitncnn_2 273 0=128 1=3 3=2 4=1 5=1 6=147456 +Swish Mul_135 1 1 273 275 +Concat Concat_136 2 1 275 251_splitncnn_0 276 +Convolution Conv_137 1 1 276 277 0=256 1=1 5=1 6=98304 +Swish Mul_139 1 1 277 279 +Slice Split_140 1 2 279 280 281 -23300=2,128,-233 +Split splitncnn_16 1 2 281 281_splitncnn_0 281_splitncnn_1 +Convolution Conv_141 1 1 281_splitncnn_1 282 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_143 1 1 282 284 +Convolution Conv_144 1 1 284 285 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_146 1 1 285 287 +Concat Concat_147 3 1 280 281_splitncnn_0 287 288 +Convolution Conv_148 1 1 288 289 0=256 1=1 5=1 6=98304 +Swish Mul_150 1 1 289 291 +Split splitncnn_17 1 3 291 291_splitncnn_0 291_splitncnn_1 291_splitncnn_2 +Convolution Conv_151 1 1 291_splitncnn_2 292 0=256 1=3 3=2 4=1 5=1 6=589824 +Swish Mul_153 1 1 292 294 +Concat Concat_154 2 1 294 230_splitncnn_0 295 +Convolution Conv_155 1 1 295 296 0=512 1=1 5=1 6=393216 +Swish Mul_157 1 1 296 298 +Slice Split_158 1 2 298 299 300 -23300=2,256,-233 +Split splitncnn_18 1 2 300 300_splitncnn_0 300_splitncnn_1 +Convolution Conv_159 1 1 300_splitncnn_1 301 0=256 1=3 4=1 5=1 6=589824 +Swish Mul_161 1 1 301 303 +Convolution Conv_162 1 1 303 304 0=256 1=3 4=1 5=1 6=589824 +Swish Mul_164 1 1 304 306 +Concat Concat_165 3 1 299 300_splitncnn_0 306 307 +Convolution Conv_166 1 1 307 308 0=512 1=1 5=1 6=393216 +Swish Mul_168 1 1 308 310 +Split splitncnn_19 1 2 310 310_splitncnn_0 310_splitncnn_1 +Convolution Conv_169 1 1 272_splitncnn_1 311 0=64 1=3 4=1 5=1 6=73728 +Swish Mul_171 1 1 311 313 +Convolution Conv_172 1 1 313 314 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_174 1 1 314 316 +Convolution Conv_175 1 1 316 317 0=64 1=1 5=1 6=4096 +Convolution Conv_176 1 1 272_splitncnn_0 318 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_178 1 1 318 320 +Convolution Conv_179 1 1 320 321 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_181 1 1 321 323 +Convolution Conv_182 1 1 323 324 0=5 1=1 5=1 6=640 +Concat Concat_183 2 1 317 324 325 +Convolution Conv_184 1 1 291_splitncnn_1 326 0=64 1=3 4=1 5=1 6=147456 +Swish Mul_186 1 1 326 328 +Convolution Conv_187 1 1 328 329 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_189 1 1 329 331 +Convolution Conv_190 1 1 331 332 0=64 1=1 5=1 6=4096 +Convolution Conv_191 1 1 291_splitncnn_0 333 0=128 1=3 4=1 5=1 6=294912 +Swish Mul_193 1 1 333 335 +Convolution Conv_194 1 1 335 336 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_196 1 1 336 338 +Convolution Conv_197 1 1 338 339 0=5 1=1 5=1 6=640 +Concat Concat_198 2 1 332 339 340 +Convolution Conv_199 1 1 310_splitncnn_1 341 0=64 1=3 4=1 5=1 6=294912 +Swish Mul_201 1 1 341 343 +Convolution Conv_202 1 1 343 344 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_204 1 1 344 346 +Convolution Conv_205 1 1 346 347 0=64 1=1 5=1 6=4096 +Convolution Conv_206 1 1 310_splitncnn_0 348 0=128 1=3 4=1 5=1 6=589824 +Swish Mul_208 1 1 348 350 +Convolution Conv_209 1 1 350 351 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_211 1 1 351 353 +Convolution Conv_212 1 1 353 354 0=5 1=1 5=1 6=640 +Concat Concat_213 2 1 347 354 355 +Reshape Reshape_219 1 1 325 365 0=-1 1=69 +Reshape Reshape_222 1 1 340 372 0=-1 1=69 +Reshape Reshape_225 1 1 355 379 0=-1 1=69 +Concat Concat_226 3 1 365 372 379 380 0=1 +Permute Transpose_227 1 1 380 output 0=1 diff --git a/app/src/main/cpp/yolo.cpp b/app/src/main/cpp/yolo.cpp index fd0427f..63017a4 100644 --- a/app/src/main/cpp/yolo.cpp +++ b/app/src/main/cpp/yolo.cpp @@ -426,7 +426,7 @@ int height = rgb.rows; //把opencv Mat转为 ncnn Mat - ncnn::Mat in = ncnn::Mat::from_pixels(rgb.data, ncnn::Mat::PIXEL_RGB2BGR, width, height); + ncnn::Mat in = ncnn::Mat::from_pixels(rgb.data, ncnn::Mat::PIXEL_RGB, width, height); std::vector cls_scores; { @@ -480,7 +480,7 @@ w = w * scale; } - ncnn::Mat in = ncnn::Mat::from_pixels_resize(rgb.data, ncnn::Mat::PIXEL_BGR2RGB, width, + ncnn::Mat in = ncnn::Mat::from_pixels_resize(rgb.data, ncnn::Mat::PIXEL_RGB, width, height, w, h); // pad to target_size rectangle @@ -631,7 +631,7 @@ } ncnn::Mat in = ncnn::Mat::from_pixels_resize( - rgb.data, ncnn::Mat::PIXEL_RGB2BGR, width, height, w, h + rgb.data, ncnn::Mat::PIXEL_RGB, width, height, w, h ); // pad to target_size rectangle @@ -658,7 +658,8 @@ std::vector strides = {8, 16, 32}; // might have stride=64 std::vector grid_strides; generate_grids_and_stride(in_pad.w, in_pad.h, strides, grid_strides); - generate_proposals(grid_strides, out, prob_threshold, proposals, 43); +// generate_proposals(grid_strides, out, prob_threshold, proposals, 43); + generate_proposals(grid_strides, out, prob_threshold, proposals, 5); // sort all proposals by score from highest to lowest qsort_descent_inplace(proposals); @@ -706,31 +707,18 @@ javaVM->AttachCurrentThread(&env, nullptr); jclass callback_clazz = env->GetObjectClass(j_callback); jclass output_clazz = env->GetObjectClass(j_output); - /** - * I: 整数类型(int) - * J: 长整数类型(long) - * D: 双精度浮点数类型(double) - * F: 单精度浮点数类型(float) - * Z: 布尔类型(boolean) - * C: 字符类型(char) - * B: 字节类型(byte) - * S: 短整数类型(short) - *
-----------------------------------------------
- * Ljava/lang/Object;: 表示 Object 类型的引用 - * Ljava/lang/String;: 表示 String 类型的引用 - * L包名/类名;: 表示特定包名和类名的引用 - *
-----------------------------------------------
- * 例如: - * int add(int a, int b): (II)I - * - * String concat(String str1, String str2): (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; - *
-----------------------------------------------
- * [Ljava/lang/String;: 表示 String 类型的一维数组 - * */ + jmethodID j_method_id = env->GetMethodID( - callback_clazz, "onDetect", "(Lcom/casic/br/app/external/YoloResult;)V" + callback_clazz, "onDetect", "(Ljava/util/ArrayList;)V" ); + //获取ArrayList类 + jclass list_clazz = env->FindClass("java/util/ArrayList"); + jmethodID arraylist_init = env->GetMethodID(list_clazz, "", "()V"); + jmethodID arraylist_add = env->GetMethodID(list_clazz, "add", "(Ljava/lang/Object;)Z"); + //初始化ArrayList对象 + jobject arraylist_obj = env->NewObject(list_clazz, arraylist_init); + for (int i = 0; i < count; i++) { auto item = objects[i]; @@ -750,9 +738,17 @@ jfieldID prob = env->GetFieldID(output_clazz, "prob", "F"); env->SetFloatField(j_output, prob, item.prob); - //回调 - env->CallVoidMethod(j_callback, j_method_id, j_output); + __android_log_print( + ANDROID_LOG_DEBUG, + "ncnn", + "type %d %.1f%%", item.label, item.prob * 100 + ); + + //add + env->CallBooleanMethod(arraylist_obj, arraylist_add, j_output); } + //回调 + env->CallVoidMethod(j_callback, j_method_id, arraylist_obj); /** * Mat数据。 @@ -767,21 +763,24 @@ } int Yolo::draw(cv::Mat &rgb, const std::vector &objects) { +// static const char *class_names[] = { +// "tripod", "tee", "person", +// "shut-off valve", "hazard signs", "pressure tester", +// "pressure gauge", "reflective clothing", "respirator masks", +// "throat foil", "round-headed water gun", "safety signs", +// "helmet", "security identification", "safety ropes", +// "intercom", "pointed water gun", "switch", +// "alarm device", "joint", "construction street signs", +// "gas detectors", "hoses", "hose_rectangle", +// "flow-meter", "fire hydrant box", "fire extinguisher", +// "lighting equipment", "flame-out protection", "exposed wires", +// "circuit diagram", "cordon", "regulator", +// "length adjuster", "stickers", "across wires", +// "road cones", "hose", "filter", +// "distribution box", "long-shank valves", "valve", "ducts" +// }; static const char *class_names[] = { - "tripod", "tee", "person", - "shut-off valve", "hazard signs", "pressure tester", - "pressure gauge", "reflective clothing", "respirator masks", - "throat foil", "round-headed water gun", "safety signs", - "helmet", "security identification", "safety ropes", - "intercom", "pointed water gun", "switch", - "alarm device", "joint", "construction street signs", - "gas detectors", "hoses", "hose_rectangle", - "flow-meter", "fire hydrant box", "fire extinguisher", - "lighting equipment", "flame-out protection", "exposed wires", - "circuit diagram", "cordon", "regulator", - "length adjuster", "stickers", "across wires", - "road cones", "hose", "filter", - "distribution box", "long-shank valves", "valve", "ducts" + "Special Hose", "Person", "Hard Hat", "Overalls", "Non-Special Hose" }; static const unsigned char colors[19][3] = { diff --git a/app/src/main/cpp/yolov8ncnn.cpp b/app/src/main/cpp/yolov8ncnn.cpp index e758ef5..403a025 100644 --- a/app/src/main/cpp/yolov8ncnn.cpp +++ b/app/src/main/cpp/yolov8ncnn.cpp @@ -132,6 +132,8 @@ //检测 g_yolo->detect(rgb, objects); + +// g_yolo->draw(rgb, objects); } else { draw_unsupported(rgb); } @@ -175,19 +177,27 @@ AAssetManager *mgr = AAssetManager_fromJava(env, assetManager); //分割、分类、检测 - const char *model_types[] = {"best-sim-opt-fp16", "model.ncnn", "yolov8s-detect-sim-opt-fp16"}; +// const char *model_types[] = {"best-sim-opt-fp16", "model.ncnn", "yolov8s-detect-sim-opt-fp16"}; + const char *model_types[] = {"ji-sim-opt"}; - const int target_sizes[] = {320, 320, 320}; +// const int target_sizes[] = {320, 320, 320}; + const int target_sizes[] = {320}; +// const float mean_values[][3] = { +// {103.53f, 116.28f, 123.675f}, +// {103.53f, 116.28f, 123.675f}, +// {103.53f, 116.28f, 123.675f} +// }; const float mean_values[][3] = { - {103.53f, 116.28f, 123.675f}, - {103.53f, 116.28f, 123.675f}, {103.53f, 116.28f, 123.675f} }; +// const float norm_values[][3] = { +// {1 / 255.f, 1 / 255.f, 1 / 255.f}, +// {1 / 255.f, 1 / 255.f, 1 / 255.f}, +// {1 / 255.f, 1 / 255.f, 1 / 255.f} +// }; const float norm_values[][3] = { - {1 / 255.f, 1 / 255.f, 1 / 255.f}, - {1 / 255.f, 1 / 255.f, 1 / 255.f}, {1 / 255.f, 1 / 255.f, 1 / 255.f} }; diff --git a/app/src/main/java/com/casic/br/app/external/INativeCallback.kt b/app/src/main/java/com/casic/br/app/external/INativeCallback.kt index c353971..a17c804 100644 --- a/app/src/main/java/com/casic/br/app/external/INativeCallback.kt +++ b/app/src/main/java/com/casic/br/app/external/INativeCallback.kt @@ -14,5 +14,5 @@ /** * 检测 */ - fun onDetect(output: YoloResult) + fun onDetect(output: ArrayList) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt index 62d23b2..e5464e0 100644 --- a/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt @@ -39,16 +39,19 @@ ) } + // val CLASS_NAMES_ARRAY = arrayListOf( +// "三脚架", "三通", "人", "切断阀", "危险告知牌", +// "压力测试仪", "压力表", "反光衣", "呼吸面罩", "喉箍", +// "圆头水枪", "安全告知牌", "安全帽", "安全标识", "安全绳", +// "对讲机", "尖头水枪", "开关", "报警装置", "接头", +// "施工路牌", "气体检测仪", "水带", "水带_矩形", "流量计", +// "消火栓箱", "灭火器", "照明设备", "熄火保护", "电线暴露", +// "电路图", "警戒线", "调压器", "调长器", "贴纸", +// "跨电线", "路锥", "软管", "过滤器", "配电箱", +// "长柄阀门", "阀门", "风管" +// ) val CLASS_NAMES_ARRAY = arrayListOf( - "三脚架", "三通", "人", "切断阀", "危险告知牌", - "压力测试仪", "压力表", "反光衣", "呼吸面罩", "喉箍", - "圆头水枪", "安全告知牌", "安全帽", "安全标识", "安全绳", - "对讲机", "尖头水枪", "开关", "报警装置", "接头", - "施工路牌", "气体检测仪", "水带", "水带_矩形", "流量计", - "消火栓箱", "灭火器", "照明设备", "熄火保护", "电线暴露", - "电路图", "警戒线", "调压器", "调长器", "贴纸", - "跨电线", "路锥", "软管", "过滤器", "配电箱", - "长柄阀门", "阀门", "风管" + "专用软管", "人", "安全帽", "工服", "非专用软管" ) //配电箱 diff --git a/app/src/main/java/com/casic/br/app/view/LoginActivity.kt b/app/src/main/java/com/casic/br/app/view/LoginActivity.kt index cc1f13e..aef48b0 100644 --- a/app/src/main/java/com/casic/br/app/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/LoginActivity.kt @@ -50,8 +50,8 @@ //协程预加载算法模型 lifecycleScope.launch(Dispatchers.IO) { - yolov8ncnn.loadModel(assets, 1, 0) - yolov8ncnn.updateYoloState(YoloStateConst.CLASSIFY) + yolov8ncnn.loadModel(assets, 0, 0) + yolov8ncnn.updateYoloState(YoloStateConst.DETECT) } //初始化OpenCV diff --git a/app/src/main/java/com/casic/br/app/view/StartCheckByYoloActivity.kt b/app/src/main/java/com/casic/br/app/view/StartCheckByYoloActivity.kt index 08610a8..c90685b 100644 --- a/app/src/main/java/com/casic/br/app/view/StartCheckByYoloActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/StartCheckByYoloActivity.kt @@ -6,7 +6,6 @@ import android.os.Bundle import android.util.Log import android.view.SurfaceHolder -import android.view.View import android.view.WindowManager import androidx.activity.result.ActivityResultCallback import androidx.activity.result.contract.ActivityResultContracts @@ -15,7 +14,6 @@ import com.amap.api.location.AMapLocation import com.casic.br.app.R import com.casic.br.app.databinding.ActivityStartCheckByYoloBinding -import com.casic.br.app.extensions.getSceneByTarget import com.casic.br.app.extensions.initImmersionBar import com.casic.br.app.external.INativeCallback import com.casic.br.app.external.YoloResult @@ -222,7 +220,6 @@ } try { - Log.d(kTag, "onClassify: ${classArray[maxIndex]}") lifecycleScope.launch(Dispatchers.Main) { isShowing = true if (classArray[maxIndex] == classArray[2]) { @@ -260,19 +257,20 @@ } - override fun onDetect(output: YoloResult) { + override fun onDetect(output: ArrayList) { //需要根据检测结果反推属于什么场景 - val label = LocaleConstant.CLASS_NAMES_ARRAY[output.type] +// val label = LocaleConstant.CLASS_NAMES_ARRAY[output.type] +// +// targetSet.add(label) +// detectedScene = label.getSceneByTarget() +// lifecycleScope.launch(Dispatchers.Main) { +// binding.titleView.setTitle(detectedScene) +// //显示角标 +// binding.tipsTagView.visibility = View.VISIBLE +// binding.tipsTagView.text = "${targetSet.size}" +// } - targetSet.add(label) - detectedScene = label.getSceneByTarget() - lifecycleScope.launch(Dispatchers.Main) { - binding.titleView.setTitle(detectedScene) - //显示角标 - binding.tipsTagView.visibility = View.VISIBLE - binding.tipsTagView.text = "${targetSet.size}" - } - + Log.d(kTag, output.toJson()) binding.detectView.updateTargetPosition(output) // if (mat.width() > 0 && mat.height() > 0) { // val bitmap = Bitmap.createBitmap(mat.width(), mat.height(), Bitmap.Config.ARGB_8888) diff --git a/app/src/main/assets/ji-sim-opt.bin b/app/src/main/assets/ji-sim-opt.bin new file mode 100644 index 0000000..a2695b4 --- /dev/null +++ b/app/src/main/assets/ji-sim-opt.bin Binary files differ diff --git a/app/src/main/assets/ji-sim-opt.param b/app/src/main/assets/ji-sim-opt.param new file mode 100644 index 0000000..1d0e424 --- /dev/null +++ b/app/src/main/assets/ji-sim-opt.param @@ -0,0 +1,183 @@ +7767517 +181 217 +Input images 0 1 images +Convolution Conv_0 1 1 images 128 0=32 1=3 3=2 4=1 5=1 6=864 +Swish Mul_2 1 1 128 130 +Convolution Conv_3 1 1 130 131 0=64 1=3 3=2 4=1 5=1 6=18432 +Swish Mul_5 1 1 131 133 +Convolution Conv_6 1 1 133 134 0=64 1=1 5=1 6=4096 +Swish Mul_8 1 1 134 136 +Slice Split_9 1 2 136 137 138 -23300=2,32,-233 +Split splitncnn_0 1 3 138 138_splitncnn_0 138_splitncnn_1 138_splitncnn_2 +Convolution Conv_10 1 1 138_splitncnn_2 139 0=32 1=3 4=1 5=1 6=9216 +Swish Mul_12 1 1 139 141 +Convolution Conv_13 1 1 141 142 0=32 1=3 4=1 5=1 6=9216 +Swish Mul_15 1 1 142 144 +BinaryOp Add_16 2 1 138_splitncnn_1 144 145 +Concat Concat_17 3 1 137 138_splitncnn_0 145 146 +Convolution Conv_18 1 1 146 147 0=64 1=1 5=1 6=6144 +Swish Mul_20 1 1 147 149 +Convolution Conv_21 1 1 149 150 0=128 1=3 3=2 4=1 5=1 6=73728 +Swish Mul_23 1 1 150 152 +Convolution Conv_24 1 1 152 153 0=128 1=1 5=1 6=16384 +Swish Mul_26 1 1 153 155 +Slice Split_27 1 2 155 156 157 -23300=2,64,-233 +Split splitncnn_1 1 3 157 157_splitncnn_0 157_splitncnn_1 157_splitncnn_2 +Convolution Conv_28 1 1 157_splitncnn_2 158 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_30 1 1 158 160 +Convolution Conv_31 1 1 160 161 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_33 1 1 161 163 +BinaryOp Add_34 2 1 157_splitncnn_1 163 164 +Split splitncnn_2 1 3 164 164_splitncnn_0 164_splitncnn_1 164_splitncnn_2 +Convolution Conv_35 1 1 164_splitncnn_2 165 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_37 1 1 165 167 +Convolution Conv_38 1 1 167 168 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_40 1 1 168 170 +BinaryOp Add_41 2 1 164_splitncnn_1 170 171 +Concat Concat_42 4 1 156 157_splitncnn_0 164_splitncnn_0 171 172 +Convolution Conv_43 1 1 172 173 0=128 1=1 5=1 6=32768 +Swish Mul_45 1 1 173 175 +Split splitncnn_3 1 2 175 175_splitncnn_0 175_splitncnn_1 +Convolution Conv_46 1 1 175_splitncnn_1 176 0=256 1=3 3=2 4=1 5=1 6=294912 +Swish Mul_48 1 1 176 178 +Convolution Conv_49 1 1 178 179 0=256 1=1 5=1 6=65536 +Swish Mul_51 1 1 179 181 +Slice Split_52 1 2 181 182 183 -23300=2,128,-233 +Split splitncnn_4 1 3 183 183_splitncnn_0 183_splitncnn_1 183_splitncnn_2 +Convolution Conv_53 1 1 183_splitncnn_2 184 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_55 1 1 184 186 +Convolution Conv_56 1 1 186 187 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_58 1 1 187 189 +BinaryOp Add_59 2 1 183_splitncnn_1 189 190 +Split splitncnn_5 1 3 190 190_splitncnn_0 190_splitncnn_1 190_splitncnn_2 +Convolution Conv_60 1 1 190_splitncnn_2 191 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_62 1 1 191 193 +Convolution Conv_63 1 1 193 194 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_65 1 1 194 196 +BinaryOp Add_66 2 1 190_splitncnn_1 196 197 +Concat Concat_67 4 1 182 183_splitncnn_0 190_splitncnn_0 197 198 +Convolution Conv_68 1 1 198 199 0=256 1=1 5=1 6=131072 +Swish Mul_70 1 1 199 201 +Split splitncnn_6 1 2 201 201_splitncnn_0 201_splitncnn_1 +Convolution Conv_71 1 1 201_splitncnn_1 202 0=512 1=3 3=2 4=1 5=1 6=1179648 +Swish Mul_73 1 1 202 204 +Convolution Conv_74 1 1 204 205 0=512 1=1 5=1 6=262144 +Swish Mul_76 1 1 205 207 +Slice Split_77 1 2 207 208 209 -23300=2,256,-233 +Split splitncnn_7 1 3 209 209_splitncnn_0 209_splitncnn_1 209_splitncnn_2 +Convolution Conv_78 1 1 209_splitncnn_2 210 0=256 1=3 4=1 5=1 6=589824 +Swish Mul_80 1 1 210 212 +Convolution Conv_81 1 1 212 213 0=256 1=3 4=1 5=1 6=589824 +Swish Mul_83 1 1 213 215 +BinaryOp Add_84 2 1 209_splitncnn_1 215 216 +Concat Concat_85 3 1 208 209_splitncnn_0 216 217 +Convolution Conv_86 1 1 217 218 0=512 1=1 5=1 6=393216 +Swish Mul_88 1 1 218 220 +Convolution Conv_89 1 1 220 221 0=256 1=1 5=1 6=131072 +Swish Mul_91 1 1 221 223 +Split splitncnn_8 1 2 223 223_splitncnn_0 223_splitncnn_1 +Pooling MaxPool_92 1 1 223_splitncnn_1 224 1=5 3=2 5=1 +Split splitncnn_9 1 2 224 224_splitncnn_0 224_splitncnn_1 +Pooling MaxPool_93 1 1 224_splitncnn_1 225 1=5 3=2 5=1 +Split splitncnn_10 1 2 225 225_splitncnn_0 225_splitncnn_1 +Pooling MaxPool_94 1 1 225_splitncnn_1 226 1=5 3=2 5=1 +Concat Concat_95 4 1 223_splitncnn_0 224_splitncnn_0 225_splitncnn_0 226 227 +Convolution Conv_96 1 1 227 228 0=512 1=1 5=1 6=524288 +Swish Mul_98 1 1 228 230 +Split splitncnn_11 1 2 230 230_splitncnn_0 230_splitncnn_1 +Interp Resize_100 1 1 230_splitncnn_1 235 0=1 1=2.000000e+00 2=2.000000e+00 +Concat Concat_101 2 1 235 201_splitncnn_0 236 +Convolution Conv_102 1 1 236 237 0=256 1=1 5=1 6=196608 +Swish Mul_104 1 1 237 239 +Slice Split_105 1 2 239 240 241 -23300=2,128,-233 +Split splitncnn_12 1 2 241 241_splitncnn_0 241_splitncnn_1 +Convolution Conv_106 1 1 241_splitncnn_1 242 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_108 1 1 242 244 +Convolution Conv_109 1 1 244 245 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_111 1 1 245 247 +Concat Concat_112 3 1 240 241_splitncnn_0 247 248 +Convolution Conv_113 1 1 248 249 0=256 1=1 5=1 6=98304 +Swish Mul_115 1 1 249 251 +Split splitncnn_13 1 2 251 251_splitncnn_0 251_splitncnn_1 +Interp Resize_117 1 1 251_splitncnn_1 256 0=1 1=2.000000e+00 2=2.000000e+00 +Concat Concat_118 2 1 256 175_splitncnn_0 257 +Convolution Conv_119 1 1 257 258 0=128 1=1 5=1 6=49152 +Swish Mul_121 1 1 258 260 +Slice Split_122 1 2 260 261 262 -23300=2,64,-233 +Split splitncnn_14 1 2 262 262_splitncnn_0 262_splitncnn_1 +Convolution Conv_123 1 1 262_splitncnn_1 263 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_125 1 1 263 265 +Convolution Conv_126 1 1 265 266 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_128 1 1 266 268 +Concat Concat_129 3 1 261 262_splitncnn_0 268 269 +Convolution Conv_130 1 1 269 270 0=128 1=1 5=1 6=24576 +Swish Mul_132 1 1 270 272 +Split splitncnn_15 1 3 272 272_splitncnn_0 272_splitncnn_1 272_splitncnn_2 +Convolution Conv_133 1 1 272_splitncnn_2 273 0=128 1=3 3=2 4=1 5=1 6=147456 +Swish Mul_135 1 1 273 275 +Concat Concat_136 2 1 275 251_splitncnn_0 276 +Convolution Conv_137 1 1 276 277 0=256 1=1 5=1 6=98304 +Swish Mul_139 1 1 277 279 +Slice Split_140 1 2 279 280 281 -23300=2,128,-233 +Split splitncnn_16 1 2 281 281_splitncnn_0 281_splitncnn_1 +Convolution Conv_141 1 1 281_splitncnn_1 282 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_143 1 1 282 284 +Convolution Conv_144 1 1 284 285 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_146 1 1 285 287 +Concat Concat_147 3 1 280 281_splitncnn_0 287 288 +Convolution Conv_148 1 1 288 289 0=256 1=1 5=1 6=98304 +Swish Mul_150 1 1 289 291 +Split splitncnn_17 1 3 291 291_splitncnn_0 291_splitncnn_1 291_splitncnn_2 +Convolution Conv_151 1 1 291_splitncnn_2 292 0=256 1=3 3=2 4=1 5=1 6=589824 +Swish Mul_153 1 1 292 294 +Concat Concat_154 2 1 294 230_splitncnn_0 295 +Convolution Conv_155 1 1 295 296 0=512 1=1 5=1 6=393216 +Swish Mul_157 1 1 296 298 +Slice Split_158 1 2 298 299 300 -23300=2,256,-233 +Split splitncnn_18 1 2 300 300_splitncnn_0 300_splitncnn_1 +Convolution Conv_159 1 1 300_splitncnn_1 301 0=256 1=3 4=1 5=1 6=589824 +Swish Mul_161 1 1 301 303 +Convolution Conv_162 1 1 303 304 0=256 1=3 4=1 5=1 6=589824 +Swish Mul_164 1 1 304 306 +Concat Concat_165 3 1 299 300_splitncnn_0 306 307 +Convolution Conv_166 1 1 307 308 0=512 1=1 5=1 6=393216 +Swish Mul_168 1 1 308 310 +Split splitncnn_19 1 2 310 310_splitncnn_0 310_splitncnn_1 +Convolution Conv_169 1 1 272_splitncnn_1 311 0=64 1=3 4=1 5=1 6=73728 +Swish Mul_171 1 1 311 313 +Convolution Conv_172 1 1 313 314 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_174 1 1 314 316 +Convolution Conv_175 1 1 316 317 0=64 1=1 5=1 6=4096 +Convolution Conv_176 1 1 272_splitncnn_0 318 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_178 1 1 318 320 +Convolution Conv_179 1 1 320 321 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_181 1 1 321 323 +Convolution Conv_182 1 1 323 324 0=5 1=1 5=1 6=640 +Concat Concat_183 2 1 317 324 325 +Convolution Conv_184 1 1 291_splitncnn_1 326 0=64 1=3 4=1 5=1 6=147456 +Swish Mul_186 1 1 326 328 +Convolution Conv_187 1 1 328 329 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_189 1 1 329 331 +Convolution Conv_190 1 1 331 332 0=64 1=1 5=1 6=4096 +Convolution Conv_191 1 1 291_splitncnn_0 333 0=128 1=3 4=1 5=1 6=294912 +Swish Mul_193 1 1 333 335 +Convolution Conv_194 1 1 335 336 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_196 1 1 336 338 +Convolution Conv_197 1 1 338 339 0=5 1=1 5=1 6=640 +Concat Concat_198 2 1 332 339 340 +Convolution Conv_199 1 1 310_splitncnn_1 341 0=64 1=3 4=1 5=1 6=294912 +Swish Mul_201 1 1 341 343 +Convolution Conv_202 1 1 343 344 0=64 1=3 4=1 5=1 6=36864 +Swish Mul_204 1 1 344 346 +Convolution Conv_205 1 1 346 347 0=64 1=1 5=1 6=4096 +Convolution Conv_206 1 1 310_splitncnn_0 348 0=128 1=3 4=1 5=1 6=589824 +Swish Mul_208 1 1 348 350 +Convolution Conv_209 1 1 350 351 0=128 1=3 4=1 5=1 6=147456 +Swish Mul_211 1 1 351 353 +Convolution Conv_212 1 1 353 354 0=5 1=1 5=1 6=640 +Concat Concat_213 2 1 347 354 355 +Reshape Reshape_219 1 1 325 365 0=-1 1=69 +Reshape Reshape_222 1 1 340 372 0=-1 1=69 +Reshape Reshape_225 1 1 355 379 0=-1 1=69 +Concat Concat_226 3 1 365 372 379 380 0=1 +Permute Transpose_227 1 1 380 output 0=1 diff --git a/app/src/main/cpp/yolo.cpp b/app/src/main/cpp/yolo.cpp index fd0427f..63017a4 100644 --- a/app/src/main/cpp/yolo.cpp +++ b/app/src/main/cpp/yolo.cpp @@ -426,7 +426,7 @@ int height = rgb.rows; //把opencv Mat转为 ncnn Mat - ncnn::Mat in = ncnn::Mat::from_pixels(rgb.data, ncnn::Mat::PIXEL_RGB2BGR, width, height); + ncnn::Mat in = ncnn::Mat::from_pixels(rgb.data, ncnn::Mat::PIXEL_RGB, width, height); std::vector cls_scores; { @@ -480,7 +480,7 @@ w = w * scale; } - ncnn::Mat in = ncnn::Mat::from_pixels_resize(rgb.data, ncnn::Mat::PIXEL_BGR2RGB, width, + ncnn::Mat in = ncnn::Mat::from_pixels_resize(rgb.data, ncnn::Mat::PIXEL_RGB, width, height, w, h); // pad to target_size rectangle @@ -631,7 +631,7 @@ } ncnn::Mat in = ncnn::Mat::from_pixels_resize( - rgb.data, ncnn::Mat::PIXEL_RGB2BGR, width, height, w, h + rgb.data, ncnn::Mat::PIXEL_RGB, width, height, w, h ); // pad to target_size rectangle @@ -658,7 +658,8 @@ std::vector strides = {8, 16, 32}; // might have stride=64 std::vector grid_strides; generate_grids_and_stride(in_pad.w, in_pad.h, strides, grid_strides); - generate_proposals(grid_strides, out, prob_threshold, proposals, 43); +// generate_proposals(grid_strides, out, prob_threshold, proposals, 43); + generate_proposals(grid_strides, out, prob_threshold, proposals, 5); // sort all proposals by score from highest to lowest qsort_descent_inplace(proposals); @@ -706,31 +707,18 @@ javaVM->AttachCurrentThread(&env, nullptr); jclass callback_clazz = env->GetObjectClass(j_callback); jclass output_clazz = env->GetObjectClass(j_output); - /** - * I: 整数类型(int) - * J: 长整数类型(long) - * D: 双精度浮点数类型(double) - * F: 单精度浮点数类型(float) - * Z: 布尔类型(boolean) - * C: 字符类型(char) - * B: 字节类型(byte) - * S: 短整数类型(short) - *
-----------------------------------------------
- * Ljava/lang/Object;: 表示 Object 类型的引用 - * Ljava/lang/String;: 表示 String 类型的引用 - * L包名/类名;: 表示特定包名和类名的引用 - *
-----------------------------------------------
- * 例如: - * int add(int a, int b): (II)I - * - * String concat(String str1, String str2): (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; - *
-----------------------------------------------
- * [Ljava/lang/String;: 表示 String 类型的一维数组 - * */ + jmethodID j_method_id = env->GetMethodID( - callback_clazz, "onDetect", "(Lcom/casic/br/app/external/YoloResult;)V" + callback_clazz, "onDetect", "(Ljava/util/ArrayList;)V" ); + //获取ArrayList类 + jclass list_clazz = env->FindClass("java/util/ArrayList"); + jmethodID arraylist_init = env->GetMethodID(list_clazz, "", "()V"); + jmethodID arraylist_add = env->GetMethodID(list_clazz, "add", "(Ljava/lang/Object;)Z"); + //初始化ArrayList对象 + jobject arraylist_obj = env->NewObject(list_clazz, arraylist_init); + for (int i = 0; i < count; i++) { auto item = objects[i]; @@ -750,9 +738,17 @@ jfieldID prob = env->GetFieldID(output_clazz, "prob", "F"); env->SetFloatField(j_output, prob, item.prob); - //回调 - env->CallVoidMethod(j_callback, j_method_id, j_output); + __android_log_print( + ANDROID_LOG_DEBUG, + "ncnn", + "type %d %.1f%%", item.label, item.prob * 100 + ); + + //add + env->CallBooleanMethod(arraylist_obj, arraylist_add, j_output); } + //回调 + env->CallVoidMethod(j_callback, j_method_id, arraylist_obj); /** * Mat数据。 @@ -767,21 +763,24 @@ } int Yolo::draw(cv::Mat &rgb, const std::vector &objects) { +// static const char *class_names[] = { +// "tripod", "tee", "person", +// "shut-off valve", "hazard signs", "pressure tester", +// "pressure gauge", "reflective clothing", "respirator masks", +// "throat foil", "round-headed water gun", "safety signs", +// "helmet", "security identification", "safety ropes", +// "intercom", "pointed water gun", "switch", +// "alarm device", "joint", "construction street signs", +// "gas detectors", "hoses", "hose_rectangle", +// "flow-meter", "fire hydrant box", "fire extinguisher", +// "lighting equipment", "flame-out protection", "exposed wires", +// "circuit diagram", "cordon", "regulator", +// "length adjuster", "stickers", "across wires", +// "road cones", "hose", "filter", +// "distribution box", "long-shank valves", "valve", "ducts" +// }; static const char *class_names[] = { - "tripod", "tee", "person", - "shut-off valve", "hazard signs", "pressure tester", - "pressure gauge", "reflective clothing", "respirator masks", - "throat foil", "round-headed water gun", "safety signs", - "helmet", "security identification", "safety ropes", - "intercom", "pointed water gun", "switch", - "alarm device", "joint", "construction street signs", - "gas detectors", "hoses", "hose_rectangle", - "flow-meter", "fire hydrant box", "fire extinguisher", - "lighting equipment", "flame-out protection", "exposed wires", - "circuit diagram", "cordon", "regulator", - "length adjuster", "stickers", "across wires", - "road cones", "hose", "filter", - "distribution box", "long-shank valves", "valve", "ducts" + "Special Hose", "Person", "Hard Hat", "Overalls", "Non-Special Hose" }; static const unsigned char colors[19][3] = { diff --git a/app/src/main/cpp/yolov8ncnn.cpp b/app/src/main/cpp/yolov8ncnn.cpp index e758ef5..403a025 100644 --- a/app/src/main/cpp/yolov8ncnn.cpp +++ b/app/src/main/cpp/yolov8ncnn.cpp @@ -132,6 +132,8 @@ //检测 g_yolo->detect(rgb, objects); + +// g_yolo->draw(rgb, objects); } else { draw_unsupported(rgb); } @@ -175,19 +177,27 @@ AAssetManager *mgr = AAssetManager_fromJava(env, assetManager); //分割、分类、检测 - const char *model_types[] = {"best-sim-opt-fp16", "model.ncnn", "yolov8s-detect-sim-opt-fp16"}; +// const char *model_types[] = {"best-sim-opt-fp16", "model.ncnn", "yolov8s-detect-sim-opt-fp16"}; + const char *model_types[] = {"ji-sim-opt"}; - const int target_sizes[] = {320, 320, 320}; +// const int target_sizes[] = {320, 320, 320}; + const int target_sizes[] = {320}; +// const float mean_values[][3] = { +// {103.53f, 116.28f, 123.675f}, +// {103.53f, 116.28f, 123.675f}, +// {103.53f, 116.28f, 123.675f} +// }; const float mean_values[][3] = { - {103.53f, 116.28f, 123.675f}, - {103.53f, 116.28f, 123.675f}, {103.53f, 116.28f, 123.675f} }; +// const float norm_values[][3] = { +// {1 / 255.f, 1 / 255.f, 1 / 255.f}, +// {1 / 255.f, 1 / 255.f, 1 / 255.f}, +// {1 / 255.f, 1 / 255.f, 1 / 255.f} +// }; const float norm_values[][3] = { - {1 / 255.f, 1 / 255.f, 1 / 255.f}, - {1 / 255.f, 1 / 255.f, 1 / 255.f}, {1 / 255.f, 1 / 255.f, 1 / 255.f} }; diff --git a/app/src/main/java/com/casic/br/app/external/INativeCallback.kt b/app/src/main/java/com/casic/br/app/external/INativeCallback.kt index c353971..a17c804 100644 --- a/app/src/main/java/com/casic/br/app/external/INativeCallback.kt +++ b/app/src/main/java/com/casic/br/app/external/INativeCallback.kt @@ -14,5 +14,5 @@ /** * 检测 */ - fun onDetect(output: YoloResult) + fun onDetect(output: ArrayList) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt index 62d23b2..e5464e0 100644 --- a/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt @@ -39,16 +39,19 @@ ) } + // val CLASS_NAMES_ARRAY = arrayListOf( +// "三脚架", "三通", "人", "切断阀", "危险告知牌", +// "压力测试仪", "压力表", "反光衣", "呼吸面罩", "喉箍", +// "圆头水枪", "安全告知牌", "安全帽", "安全标识", "安全绳", +// "对讲机", "尖头水枪", "开关", "报警装置", "接头", +// "施工路牌", "气体检测仪", "水带", "水带_矩形", "流量计", +// "消火栓箱", "灭火器", "照明设备", "熄火保护", "电线暴露", +// "电路图", "警戒线", "调压器", "调长器", "贴纸", +// "跨电线", "路锥", "软管", "过滤器", "配电箱", +// "长柄阀门", "阀门", "风管" +// ) val CLASS_NAMES_ARRAY = arrayListOf( - "三脚架", "三通", "人", "切断阀", "危险告知牌", - "压力测试仪", "压力表", "反光衣", "呼吸面罩", "喉箍", - "圆头水枪", "安全告知牌", "安全帽", "安全标识", "安全绳", - "对讲机", "尖头水枪", "开关", "报警装置", "接头", - "施工路牌", "气体检测仪", "水带", "水带_矩形", "流量计", - "消火栓箱", "灭火器", "照明设备", "熄火保护", "电线暴露", - "电路图", "警戒线", "调压器", "调长器", "贴纸", - "跨电线", "路锥", "软管", "过滤器", "配电箱", - "长柄阀门", "阀门", "风管" + "专用软管", "人", "安全帽", "工服", "非专用软管" ) //配电箱 diff --git a/app/src/main/java/com/casic/br/app/view/LoginActivity.kt b/app/src/main/java/com/casic/br/app/view/LoginActivity.kt index cc1f13e..aef48b0 100644 --- a/app/src/main/java/com/casic/br/app/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/LoginActivity.kt @@ -50,8 +50,8 @@ //协程预加载算法模型 lifecycleScope.launch(Dispatchers.IO) { - yolov8ncnn.loadModel(assets, 1, 0) - yolov8ncnn.updateYoloState(YoloStateConst.CLASSIFY) + yolov8ncnn.loadModel(assets, 0, 0) + yolov8ncnn.updateYoloState(YoloStateConst.DETECT) } //初始化OpenCV diff --git a/app/src/main/java/com/casic/br/app/view/StartCheckByYoloActivity.kt b/app/src/main/java/com/casic/br/app/view/StartCheckByYoloActivity.kt index 08610a8..c90685b 100644 --- a/app/src/main/java/com/casic/br/app/view/StartCheckByYoloActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/StartCheckByYoloActivity.kt @@ -6,7 +6,6 @@ import android.os.Bundle import android.util.Log import android.view.SurfaceHolder -import android.view.View import android.view.WindowManager import androidx.activity.result.ActivityResultCallback import androidx.activity.result.contract.ActivityResultContracts @@ -15,7 +14,6 @@ import com.amap.api.location.AMapLocation import com.casic.br.app.R import com.casic.br.app.databinding.ActivityStartCheckByYoloBinding -import com.casic.br.app.extensions.getSceneByTarget import com.casic.br.app.extensions.initImmersionBar import com.casic.br.app.external.INativeCallback import com.casic.br.app.external.YoloResult @@ -222,7 +220,6 @@ } try { - Log.d(kTag, "onClassify: ${classArray[maxIndex]}") lifecycleScope.launch(Dispatchers.Main) { isShowing = true if (classArray[maxIndex] == classArray[2]) { @@ -260,19 +257,20 @@ } - override fun onDetect(output: YoloResult) { + override fun onDetect(output: ArrayList) { //需要根据检测结果反推属于什么场景 - val label = LocaleConstant.CLASS_NAMES_ARRAY[output.type] +// val label = LocaleConstant.CLASS_NAMES_ARRAY[output.type] +// +// targetSet.add(label) +// detectedScene = label.getSceneByTarget() +// lifecycleScope.launch(Dispatchers.Main) { +// binding.titleView.setTitle(detectedScene) +// //显示角标 +// binding.tipsTagView.visibility = View.VISIBLE +// binding.tipsTagView.text = "${targetSet.size}" +// } - targetSet.add(label) - detectedScene = label.getSceneByTarget() - lifecycleScope.launch(Dispatchers.Main) { - binding.titleView.setTitle(detectedScene) - //显示角标 - binding.tipsTagView.visibility = View.VISIBLE - binding.tipsTagView.text = "${targetSet.size}" - } - + Log.d(kTag, output.toJson()) binding.detectView.updateTargetPosition(output) // if (mat.width() > 0 && mat.height() > 0) { // val bitmap = Bitmap.createBitmap(mat.width(), mat.height(), Bitmap.Config.ARGB_8888) diff --git a/app/src/main/java/com/casic/br/app/widgets/YoloTargetDetectView.kt b/app/src/main/java/com/casic/br/app/widgets/YoloTargetDetectView.kt index b997dd4..0c47418 100644 --- a/app/src/main/java/com/casic/br/app/widgets/YoloTargetDetectView.kt +++ b/app/src/main/java/com/casic/br/app/widgets/YoloTargetDetectView.kt @@ -21,7 +21,7 @@ private val backgroundPaint by lazy { Paint() } private val borderPaint by lazy { Paint() } private val rect by lazy { Rect() } - private var result: YoloResult? = null + private var results = ArrayList() init { textPaint.color = Color.WHITE @@ -39,41 +39,41 @@ borderPaint.isAntiAlias = true } - fun updateTargetPosition(result: YoloResult) { - this.result = result + fun updateTargetPosition(results: ArrayList) { + this.results = results postInvalidate() } override fun onDraw(canvas: Canvas) { super.onDraw(canvas) - result?.apply { - val prob = String.format("%.2f", this.prob * 100) - val label = "${LocaleConstant.CLASS_NAMES_ARRAY[this.type]} ${prob}%" + results.forEach { + val prob = String.format("%.2f", it.prob * 100) + val label = "${LocaleConstant.CLASS_NAMES_ARRAY[it.type]} ${prob}%" val textLength = textPaint.measureText(label) //文字背景 rect.set( - (this.position[0].dp2px(context)).toInt(), - (this.position[1].dp2px(context)).toInt(), - (this.position[0].dp2px(context) + textLength).toInt() + 10, - this.position[1].dp2px(context).toInt() - 50 + (it.position[0].dp2px(context)).toInt(), + (it.position[1].dp2px(context)).toInt(), + (it.position[0].dp2px(context) + textLength).toInt() + 10, + it.position[1].dp2px(context).toInt() - 50 ) canvas.drawRect(rect, backgroundPaint) //画文字。数值是文字左右边距,可酌情调整 canvas.drawText( label, - this.position[0].dp2px(context) + (textLength + 10) / 2, - this.position[1].dp2px(context) - 10, + it.position[0].dp2px(context) + (textLength + 10) / 2, + it.position[1].dp2px(context) - 10, textPaint ) //画框 rect.set( - (this.position[0].dp2px(context)).toInt(), - (this.position[1].dp2px(context)).toInt(), - (this.position[2] + this.position[0]).dp2px(context).toInt(), - (this.position[3] + this.position[1]).dp2px(context).toInt() + (it.position[0].dp2px(context)).toInt(), + (it.position[1].dp2px(context)).toInt(), + (it.position[2] + it.position[0]).dp2px(context).toInt(), + (it.position[3] + it.position[1]).dp2px(context).toInt() ) canvas.drawRect(rect, borderPaint) }