当前标签 / 虹软 / 总共1篇

Android 虹软人脸识别 NV21 和 RGB24 转换问题

当我们使用活体检测检测完毕后,需要上传图片给后台进行人脸识别,在 Android 里面默认的 Camera 获取的图片格式是 NV21.

怎么知道这个默认格式呢?

Camera.Parameters parameters = camera.getParameters();
parameters.getPreviewFormat();

这个格式的图片本身虹软是支持的,但是有个条件限制:SDK 对图形尺寸做了限制,宽高需要大于 0,宽度为 4 的倍数, YUYV/I420/NV21/NV12 格式的图片高度为 2 的倍数, RGB24 格式的图片高度不限制。如果你的图片是 NV21 格式不符合这个条件就需要进行转换。

private static final int VALUE_FOR_4_ALIGN = 0b11;
private static final int VALUE_FOR_2_ALIGN = 0b01;

/**
    * 确保传给引擎的NV21数据宽度为4的倍数,高为2的倍数
    *
    * @param bitmap 传入的bitmap
    * @return 调整后的bitmap
    */
public static Bitmap alignBitmapForNv21(Bitmap bitmap) {
    if (bitmap == null || bitmap.getWidth() < 4 || bitmap.getHeight() < 2) {
        return null;
    }
    int width = bitmap.getWidth();
    int height = bitmap.getHeight();

    boolean needAdjust = false;
    //保证宽度是4的倍数
    if ((width & VALUE_FOR_4_ALIGN) != 0) {
        width &= ~VALUE_FOR_4_ALIGN;
        needAdjust = true;
    }

    //保证高度是2的倍数
    if ((height & VALUE_FOR_2_ALIGN) != 0) {
        height--;
        needAdjust = true;
    }

    if (needAdjust) {
        bitmap = imageCrop(bitmap, new Rect(0, 0, width, height));
    }
    return bitmap;
}

阅读更多