本博客包含三个常用方法,用于盛开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方向调整和图片保存(分享)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)