English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

تعديل الاتجاه YUV والتحميل في Demo التعرف على الوجه Android (مشاركة)

هذا الموقع يحتوي على ثلاثة طرق شائعة تستخدم في عرض Demo التعرف على الوجه لـ Android في استخدام الشاشة العمودية، لكنه لم يتمكن من التعرف على الحالة.

1. يمكنك محاولة تدوير الشاشة 90° أو 270° في الاتجاه المعاكس، ثم إرسالها إلى SDK التعرف.

2. إذا لم يتم التعرف على الاتجاه بعد التدوير، يمكنك محاولة استدعاء saveImg( )، لتحقق من الصورة المحفوظة في الملف.

 /**
  /* يتم تدوير الفيديو بعيداً عن الشاشة 90 درجة في الاتجاه المعاكس */
  /* يتم استخدام هذا الطريقة فقط عند الشاشة العمودية */
  /* */
 public static byte[] rotateYUV420Degree90(byte[] البيانات، int عرض الصورة,
          int الارتفاع الصورة) {
  byte[] يوفي = new byte[عرض الصورة * الارتفاع الصورة * 3 / 2];
  int اـي = 0;
  لـ(int x = 0; x < عرض الصورة; x++) {
   لـ(int ي = الارتفاع الصورة - 1; ي >= 0; ي--) {
    يوفي[اـي] = البيانات[ي * عرض الصورة + x];
    اـي++;
   }
  }
  اـي = عرض الصورة * الارتفاع الصورة * 3 / 2 - 1;
  لـ(int x = عرض الصورة - 1; x > 0; x = x - 2) {
   لـ(int ي = 0; ي < الارتفاع الصورة / 2; ي++) {
    يوفي[اـي] = البيانات[(عرض الصورة * الارتفاع الصورة) + (ي * عرض الصورة) + x];
    اـي--;
    يوفي[اـي] = البيانات[(عرض الصورة * الارتفاع الصورة) + (ي * عرض الصورة)
      + (x - 1)];
    اـي--;
   }
  }
  return يوفي;
 }
 public static byte[] YUV420spRotate270(byte[] المصدر، int عرض، int الارتفاع) {
  int العدد = 0;
  int ارتفاع يوفي = الارتفاع >> 1;
  int حجم الصورة = عرض * الارتفاع;
  byte[] الوجهة = new byte[حجم الصورة * 3 >> 1];
  //نسخة ي
  لـ(int ج = عرض - 1; ج >= 0; ج--) {
   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 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 إلى bitmap
   YuvImage 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();
  }
   Log.e("Sys", "Error:" + ex.getMessage());
  }
 }

هذا هو المحتوى الكامل الذي قدمته الإدارة لكم في هذا Android人脸识别Demo竖屏YUV方向调整和图片保存(مشاركة)، آمل أن يكون هذا دليلاً مفيداً لكم، وأتمنى أن تكونوا قد دعمتم وصرختون لتعليماتي.

بيان: محتوى هذا المقال تم جمعه من الإنترنت، حقوق الطبع والتأليف تنتمي للمالك الأصلي، المحتوى تم تقديمه من قبل مستخدمي الإنترنت الذين قدموا إسهاماتهم بشكل متعاون، الموقع لا يملك حقوق الملكية، لم يتم تعديل المحتوى بشكل يدوي، ولا يتحمل أي مسؤولية قانونية مرتبطة. إذا كنت قد وجدت محتوى يشتبه في انتهاك حقوق الطبع والتأليف، فلا تتردد في إرسال بريد إلكتروني إلى: notice#oldtoolbag.com (الرجاء استبدال #بـ@عند إرسال البريد الإلكتروني) لتقديم الشكوى، وتقديم الأدلة ذات الصلة، إذا تم التحقق من ذلك، فإن الموقع سيقوم بإزالة المحتوى المشبوه بسرعة.

مفضل لك