gpt4 book ai didi

android - 为什么新的 Play-Services FaceDetector 在某些设备上不可用?

转载 作者:太空宇宙 更新时间:2023-11-03 11:03:20 25 4
gpt4 key购买 nike

背景

谷歌几个月前发布了一个新的 API 来检测位图上的人脸:

它应该比 built-in FaceDetector class 更快更好,并且与它相比没有任何限制/局限(比如输入位图需要配置 565 ,位图宽度均匀,并且有最大面数可以检测)。

代码也很简单:

list :

<meta-data
android:name="com.google.android.gms.vision.DEPENDENCIES"
android:value="face" />

Java:

FaceDetector faceDetector = new
FaceDetector.Builder(getApplicationContext()).setTrackingEnabled(false)
.build();
if(!faceDetector.isOperational()){
//show error
return;
}
Frame frame = new Frame.Builder().setBitmap(myBitmap).build();
SparseArray<Face> faces = faceDetector.detect(frame);

问题

似乎该 API 在某些设备上不可用,调用“isOperational()”时返回“false”。

  • 在 Nexus 4 (Android 4.4.4) 和 Nexus 5 (Android 6.0.1) 上它根本不起作用
  • 在 Nexus 5x (Android 6.0.1) 和 Galaxy S4 (Android 5.0) 上运行良好
  • 在 LG G2 (Android 4.2.2) 上,它仅在示例的第二次运行时起作用。

我发现了什么

我发现了一些线索:

  1. 在 Github ( here ) 上,其他人也发现了这个问题。

  2. 样本says (在“photo-demo”中,在“PhotoViewerActivity.java”文件中)库可能不可用,但如果不可用,它将被下载:

    if (!safeDetector.isOperational()) {
    // Note: The first time that an app using face API is installed on a device, GMS will
    // download a native library to the device in order to do detection. Usually this
    // completes before the app is run for the first time. But if that download has not yet
    // completed, then the above call will not detect any faces.
    //
    // isOperational() can be used to check if the required native library is currently
    // available. The detector will automatically become operational once the library
    // download completes on device.
    Log.w(TAG, "Face detector dependencies are not yet available.");

    // Check for low storage. If there is low storage, the native library will not be
    // downloaded, so detection will not become operational.
    IntentFilter lowstorageFilter = new IntentFilter(Intent.ACTION_DEVICE_STORAGE_LOW);
    boolean hasLowStorage = registerReceiver(null, lowstorageFilter) != null;

    if (hasLowStorage) {
    Toast.makeText(this, R.string.low_storage_error, Toast.LENGTH_LONG).show();
    Log.w(TAG, getString(R.string.low_storage_error));
    }
    }

我尝试重置播放服务应用程序(这样可能会强制重新下载库),但它似乎没有用(在 Nexus 5 上试过)。

问题

  1. 有没有办法强制下载库,然后开始使用 API?这个操作有监听器吗?

  2. 使用“isOperational”会触发此下载吗?

  3. 为什么它在某些 Nexus 设备上不可用?我是否遗漏了一些关于使用该库的知识?

  4. 它真的像我发现的那样对输入没有限制吗?我注意到有人报告了内存问题 ( here )。使用 try-catch(OutOfMemoryError)有助于处理 OOM 吗?

最佳答案

关于为什么它在某些设备上不起作用,Google answered it :

There is a known issue with the new version of GMSCore (v9) that was just released today. From the release notes:

  • A service required by Mobile Vision is now disabled due to a serious bug in that service. This will prevent users who have not already used face or barcode detection from using those features. We do not recommend adding new Mobile Vision features to your app until this issue is fixed.
  • For apps that already use Mobile Vision features, check FaceDetector.isOperational() or BarcodeDetector.isOperational() to confirm detector readiness before using the face or barcode detector.

关于android - 为什么新的 Play-Services FaceDetector 在某些设备上不可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37300874/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com