当我们使用活体检测检测完毕后,需要上传图片给后台进行人脸识别,在 Android 里面默认的 Camera 获取的图片格式是 NV21.
怎么知道这个默认格式呢?
1
2
| Camera.Parameters parameters = camera.getParameters();
parameters.getPreviewFormat();
|
这个格式的图片本身虹软是支持的,但是有个条件限制:SDK 对图形尺寸做了限制,宽高需要大于 0,宽度为 4 的倍数, YUYV/I420/NV21/NV12 格式的图片高度为 2 的倍数, RGB24 格式的图片高度不限制。如果你的图片是 NV21 格式不符合这个条件就需要进行转换。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
| 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;
}
|
阅读更多