我在试着在颤音中探测面部ml_kit_face_detection。对其他手机来说很好。但在POCO M3 ml试剂盒中无法检测到面部。
我从相机里拿出一张照片,然后保存到文件里。文件如下:https://drive.google.com/file/d/1mvt2klSwWFA5YL96bz1itfeEX4dai4Oh/view?usp=sharing
我知道这个文件是不可读的。我试着把它转换成base64,但是它也没有可读性。
我正试着把它转换成png &明白了

发布于 2022-07-22 11:29:48
逆向工程格式很有挑战性..。
文件格式是原始二进制格式,带有一些非标准的填充。
我设法得到了以下结果:

它看起来是对的,但我不确定它是否完全正确.
看起来文件格式是NV12 (或NV21),带有一些填充。
为了更好地理解NV12格式,您可以参考我的以下职位。
通过反向工程文件,我发现了以下信息:
图像分辨率: 1280x720
存储的分辨率为1536x720 (右侧有256像素的填充)。
文件存储格式(原始二进制格式):
说明:
256 padding bytes
<----->
1536 bytes
<------------------------>
YYYYYYYYYYYYYYYYYY00000000
YYYYYYYYYYYYYYYYYY00000000
YYYYYYYYYYYYYYYYYY00000000 719 rows
YYYYYYYYYYYYYYYYYY00000000
YYYYYYYYYYYYYYYYYY00000000
YYYYYYYYYYYYYYYYYY <--- 1280 bytes (last row of Y)
UVUVUVUVUVUVUVUVUV00000000
UVUVUVUVUVUVUVUVUV00000000 359 rows
UVUVUVUVUVUVUVUVUV00000000
UVUVUVUVUVUVUVUVUV <---- 1280 bytes (last row of UV)读取数据并转换为RGB的MATLAB代码:
f = fopen('photo', 'r'); % Open binary file for reading.
I1 = fread(f, [1536, 719], '*uint8')'; % Read 1536x719 image (Y channel).
I1last_row = fread(f, 1280, '*uint8')'; % Read 1280 bytes (last row of Y).
I2 = fread(f, [1536, (720-1)/2], '*uint8')'; % Read 1536x359 image (UV channel).
I2last_row = fread(f, 1280, '*uint8')'; % Read 1280 bytes (last row of UV).
fclose(f);
%figure;imshow(I1);impixelinfo % Show I1 for testing.
%figure;imshow(I2);impixelinfo % Show I2 for testing.
I1 = I1(:, 1:1280); % Crop valid part: 1280x719 pixels.
I1 = [I1; I1last_row]; % Add last row to the bottom (complete to 1280x720).
I2 = I2(:, 1:1280); % Crop valid part (1280x359 UV elements).
I2 = [I2; I2last_row]; % Add last row to the bottom. (complete to 1280x360).
% Convert from NV12 to RGB:
Y = I1;
U = I2(:, 1:2:end); % Extract U color channel
V = I2(:, 2:2:end); % Extract V color channel
U = imresize(U, size(Y)); % Resize U to be the same size of Y
V = imresize(V, size(Y)); % Resize V to be the same size of Y
YUV = cat(3, Y, U, V); % Merge Y,U,V channels
RGB = ycbcr2rgb(YUV); % Convert from YCbCr color format to RGB.
% Show and save RGB for testing:
figure;imshow(RGB);impixelinfo
imwrite('RGB', RGB);注意:
https://stackoverflow.com/questions/73076773
复制相似问题