Android人脸识别Demo竖屏YUV方向调整和图片保存
生活随笔
收集整理的這篇文章主要介紹了
Android人脸识别Demo竖屏YUV方向调整和图片保存
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2019獨角獸企業重金招聘Python工程師標準>>>
本博客包含三個常用方法,用于盛開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 yfor (int j = width - 1; j >= 0; j--) {for (int i = 0; i < height; i++) {des[count++] = src[width * i + j];}}//u,vfor (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 width, 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轉成bitmapYuvImage image = new YuvImage(data, ImageFormat.NV21, width, height, null);ByteArrayOutputStream stream = new ByteArrayOutputStream();image.compressToJpeg(new Rect(0, 0, width, height), 80, stream);Bitmap bmp = BitmapFactory.decodeByteArray(stream.toByteArray(), 0, 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());}}轉載于:https://my.oschina.net/bangbangda/blog/3041733
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
以上是生活随笔為你收集整理的Android人脸识别Demo竖屏YUV方向调整和图片保存的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mysql表分区的选择与实践小结
- 下一篇: 【SRX】RE与PFE策略不同步,导致C