Android人脸识别Demo竖屏YUV方向调整和图片保存(分享)

Android人脸识别Demo竖屏YUV方向调整和图片保存(分享),第1张

概述本博客包含三个常用方法,用于盛开Android版人脸识别Demo中竖屏使用时送入yuv数据,但一直无法识别的情况。

本博客包含三个常用方法,用于盛开AndroID版人脸识别Demo中竖屏使用时送入yuv数据,但一直无法识别的情况。

1.首先可以尝试顺时针旋转90°或270°,然后送入识别SDK。

2.旋转方向后依然无法识别时,可以尝试saveimg( ),保存本地检查图片是否符合要求。

 /**  * 视频顺时针旋转90  * 该方法仅仅在竖屏时候使用  * */ public static byte[] rotateYUV420Degree90(byte[] data,int imageWIDth,int imageHeight) {  byte[] yuv = new byte[imageWIDth * imageHeight * 3 / 2];  int i = 0;  for (int x = 0; x < imageWIDth; x++) {   for (int y = imageHeight - 1; y >= 0; y--) {    yuv[i] = data[y * imageWIDth + x];    i++;   }  }  i = imageWIDth * imageHeight * 3 / 2 - 1;  for (int x = imageWIDth - 1; x > 0; x = x - 2) {   for (int y = 0; y < imageHeight / 2; y++) {    yuv[i] = data[(imageWIDth * imageHeight) + (y * imageWIDth) + x];    i--;    yuv[i] = data[(imageWIDth * imageHeight) + (y * imageWIDth)      + (x - 1)];    i--;   }  }  return yuv; } public static byte[] YUV420spRotate270(byte[] src,int wIDth,int height) {  int count = 0;  int uvHeight = height >> 1;  int imgSize = wIDth * height;  byte[] des = new byte[imgSize * 3 >> 1];  //copy y  for (int j = wIDth - 1; j >= 0; j--) {   for (int i = 0; i < height; i++) {    des[count++] = src[wIDth * i + j];   }  }  //u,v  for (int j = wIDth - 1; j > 0; j -= 2) {   for (int i = 0; i < uvHeight; i++) {    des[count++] = src[imgSize + wIDth * i + j - 1];    des[count++] = src[imgSize + wIDth * i + j];   }  }  return des; } private int i = 1; private String path = Environment.getExternalStorageDirectory().getabsolutePath() + "/0Face/"; private Calendar Now = new GregorianCalendar(); private SimpleDateFormat simpleDate = new SimpleDateFormat("yyyyMMddHHmmss",Locale.getDefault()); private String filename = simpleDate.format(Now.getTime()); /**  * @param data yuv图像数据  * @param wIDth   * @param height  */ public voID saveimg(byte[] data,int height) {  file dir = new file(path);  if (!dir.exists()) dir.mkdirs();  file f = new file(path + (filename + "-" + i++) + ".jpg");  fileOutputStream fOut = null;  try {   //yuv转成bitmap   YuvImage image = new YuvImage(data,ImageFormat.NV21,wIDth,height,null);   ByteArrayOutputStream stream = new ByteArrayOutputStream();   image.compresstoJpeg(new Rect(0,height),80,stream);   Bitmap bmp = BitmapFactory.decodeByteArray(stream.toByteArray(),stream.size());   //bitmap保存至本地   fOut = new fileOutputStream(f);   bmp.compress(Bitmap.CompressFormat.JPEG,100,fOut);   fOut.flush();   fOut.close();   bmp.recycle();   stream.close();  } catch (Exception ex) {   Log.e("Sys","Error:" + ex.getMessage());  } }
@H_403_14@

以上这篇AndroID人脸识别Demo竖屏YUV方向调整和图片保存(分享)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持编程小技巧。

总结

以上是内存溢出为你收集整理的Android人脸识别Demo竖屏YUV方向调整和图片保存(分享)全部内容,希望文章能够帮你解决Android人脸识别Demo竖屏YUV方向调整和图片保存(分享)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1143291.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存