@@ -194,6 +194,7 @@ public List<Recognition> recognizeImage(final Bitmap bitmap) {
194
194
int [] b = new int [46 * 46 * 57 ];
195
195
//取出第一个通道色彩值
196
196
float [][] floats5 = new float [(outputs .length / 57 ) * 19 ][19 ];
197
+ //转成矩阵把小于0.1的值归0
197
198
for (int i = 0 , sum = -1 ; i < outputs .length ; i ++) {
198
199
if (0 <= i % 57 && i % 57 < 19 ) {
199
200
if (0 == i % 57 )
@@ -207,32 +208,181 @@ public List<Recognition> recognizeImage(final Bitmap bitmap) {
207
208
for (int i = 0 ; i < floats5 .length ; i ++) {
208
209
System .arraycopy (floats5 [i ], 0 , floats2 [i ], 0 , 18 );
209
210
}
211
+
212
+ //取出每18个点中的最大的点
210
213
float max = 0 ;
211
214
float [] floats3 = new float [(outputs .length / 57 ) * 19 ];
212
- for (int i = 0 ; i < floats2 .length ; i ++) {
215
+ for (int i = 0 , sum = - 1 ; i < floats2 .length ; i ++) {
213
216
for (int j = 0 ; j < floats2 [i ].length ; j ++) {
214
- if (floats2 [i ][j ] > max )
215
- max = floats2 [i ][j ];
217
+ sum ++;
218
+ if (floats2 [i ][j ] > max ) {
219
+ //这个是设置识别准确度多少以上保留数值越大越精确 同样识别出来的东西越少
220
+ if (floats2 [i ][j ] > 0.3f )
221
+ switch (sum % 18 ) {
222
+ case 0 :
223
+ //鼻子
224
+ //这里写20的原因是因为 0太多了 如果写0的话 就会和空白处重复
225
+ max = 19 ;
226
+ break ;
227
+ case 1 :
228
+ //脖子
229
+ max = 1 ;
230
+ break ;
231
+ case 2 :
232
+ //右上臂
233
+ max = 2 ;
234
+ break ;
235
+ case 3 :
236
+ //右肘关节
237
+ max = 3 ;
238
+ break ;
239
+ case 4 :
240
+ //右手腕关节
241
+ max = 4 ;
242
+ break ;
243
+ case 5 :
244
+ //左肩
245
+ max = 5 ;
246
+ break ;
247
+ case 6 :
248
+ //左肘关节
249
+ max = 6 ;
250
+ break ;
251
+ case 7 :
252
+ //左手腕关节
253
+ max = 7 ;
254
+ break ;
255
+ case 8 :
256
+ //右臀部
257
+ max = 8 ;
258
+ break ;
259
+ case 9 :
260
+ //右膝关节
261
+ max = 9 ;
262
+ break ;
263
+ case 10 :
264
+ //右裸关节
265
+ max = 10 ;
266
+ break ;
267
+ case 11 :
268
+ //左臀部
269
+ max = 11 ;
270
+ break ;
271
+ case 12 :
272
+ //左膝关节
273
+ max = 12 ;
274
+ break ;
275
+ case 13 :
276
+ //左裸关节
277
+ max = 13 ;
278
+ break ;
279
+ case 14 :
280
+ //右眼
281
+ max = 14 ;
282
+ break ;
283
+ case 15 :
284
+ //左眼
285
+ max = 15 ;
286
+ break ;
287
+ case 16 :
288
+ //右耳
289
+ max = 16 ;
290
+ break ;
291
+ case 17 :
292
+ //左耳
293
+ max = 17 ;
294
+ break ;
295
+ case 18 :
296
+ //背景(因为背景没有识别值 所以自动过滤掉了)
297
+ max = 18 ;
298
+ break ;
299
+ }
300
+ }
216
301
}
217
302
floats3 [i ] = max ;
218
303
max = 0 ;
219
304
}
220
305
221
- //取出每18个点中最大的点
222
- float [] floats4 = new float [((outputs .length / 57 ) * 19 ) * 18 ];
223
- for (int i = 0 , sum = 0 ; i < floats2 .length ; i ++) {
224
- for (int j = 0 ; j < floats2 [i ].length ; j ++) {
225
- floats4 [sum ] = floats2 [i ][j ];
226
- sum ++;
227
- }
228
- }
229
-
230
306
//将点颜色显示出来
231
307
for (int j = 0 ; j < floats3 .length ; j ++) {
232
- //这个是设置识别准确度多少以上保留数值越大越精确 同样识别出来的东西越少
233
- if (floats3 [j ] > 0.3f ) {
234
- //识别准确度大于0.3f则显示为绿色
235
- b [j ] = 0xff << 24 | 0xff << 8 ;
308
+ //以下为20种颜色值(不保证是否重复,不同颜色值的意义是 告诉大家这是不同部位)
309
+ switch ((int ) floats3 [j ]) {
310
+ case 1 :
311
+ //脖子
312
+ b [j ] = 0xff << 24 | 0xff << 8 ;
313
+ break ;
314
+ case 2 :
315
+ //右肩
316
+ b [j ] = 0xff << 24 | 0xff ;
317
+ break ;
318
+ case 3 :
319
+ //右肘关节
320
+ b [j ] = 0xff << 24 | 0xff << 8 | 0xff ;
321
+ break ;
322
+ case 4 :
323
+ //右手腕关节
324
+ b [j ] = 0xff << 24 | 0xff << 16 | 0xff ;
325
+ break ;
326
+ case 5 :
327
+ //左肩
328
+ b [j ] = 0xff << 24 | 0xff << 16 | 0xff << 8 ;
329
+ break ;
330
+ case 6 :
331
+ //左肘关节
332
+ b [j ] = 0xff << 24 | 0xff << 16 | 0x0f << 8 ;
333
+ break ;
334
+ case 7 :
335
+ //左手腕关节
336
+ b [j ] = 0xff << 24 | 0x0f << 16 | 0x0f << 8 ;
337
+ break ;
338
+ case 8 :
339
+ //右臀部
340
+ b [j ] = 0xff << 24 | 0x0f << 16 | 0x0f << 8 | 0xff ;
341
+ break ;
342
+ case 9 :
343
+ //右膝关节
344
+ b [j ] = 0xff << 24 | 0xff << 16 | 0x0f << 8 | 0x0f ;
345
+ break ;
346
+ case 10 :
347
+ //右裸关节
348
+ b [j ] = 0xff << 24 | 0xff << 16 | 0xff << 8 | 0x0f ;
349
+ break ;
350
+ case 11 :
351
+ //左臀部
352
+ b [j ] = 0xff << 24 | 0x0f << 16 | 0xff << 8 | 0x0f ;
353
+ break ;
354
+ case 12 :
355
+ //左膝关节
356
+ b [j ] = 0xff << 24 | 0xff << 8 | 0x0f ;
357
+ break ;
358
+ case 13 :
359
+ //左裸关节
360
+ b [j ] = 0xff << 24 | 0x0f << 8 | 0x0f ;
361
+ break ;
362
+ case 14 :
363
+ //右眼
364
+ b [j ] = 0xff << 24 | 0x0f << 16 | 0x0f << 8 | 0x0f ;
365
+ break ;
366
+ case 15 :
367
+ //左眼
368
+ b [j ] = 0xff << 24 | 0x5f << 16 ;
369
+ break ;
370
+ case 16 :
371
+ //右耳
372
+ b [j ] = 0xff << 24 | 0x5f << 8 ;
373
+ break ;
374
+ case 17 :
375
+ //左耳
376
+ b [j ] = 0xff << 24 | 0xff << 16 | 0x0f ;
377
+ break ;
378
+ case 18 :
379
+ //背景(因为背景没有识别值 所以自动过滤掉了)
380
+ b [j ] = 0xff << 24 | 0x0f ;
381
+ break ;
382
+ case 19 :
383
+ //鼻子
384
+ b [j ] = 0xff << 24 | 0x0f << 8 ;
385
+ break ;
236
386
}
237
387
}
238
388
0 commit comments