@@ -194,6 +194,7 @@ public List<Recognition> recognizeImage(final Bitmap bitmap) {
194194 int [] b = new int [46 * 46 * 57 ];
195195 //取出第一个通道色彩值
196196 float [][] floats5 = new float [(outputs .length / 57 ) * 19 ][19 ];
197+ //转成矩阵把小于0.1的值归0
197198 for (int i = 0 , sum = -1 ; i < outputs .length ; i ++) {
198199 if (0 <= i % 57 && i % 57 < 19 ) {
199200 if (0 == i % 57 )
@@ -207,32 +208,181 @@ public List<Recognition> recognizeImage(final Bitmap bitmap) {
207208 for (int i = 0 ; i < floats5 .length ; i ++) {
208209 System .arraycopy (floats5 [i ], 0 , floats2 [i ], 0 , 18 );
209210 }
211+
212+ //取出每18个点中的最大的点
210213 float max = 0 ;
211214 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 ++) {
213216 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+ }
216301 }
217302 floats3 [i ] = max ;
218303 max = 0 ;
219304 }
220305
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-
230306 //将点颜色显示出来
231307 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 ;
236386 }
237387 }
238388
0 commit comments