如何在tfjs-react-native中将图像从设备转换为3D张量?

时间:2020-05-07 14:47:12

标签: react-native tensorflow.js

文档https://js.tensorflow.org/api_react_native/0.2.3/#decodeJpeg中有一个示例,但它仅适用于按URL提取的情况。如果我在设备上存储了图像的URI,该怎么办?

1 个答案:

答案 0 :(得分:0)

解决方案在this issue

中给出

为了清楚起见,我在这里报告:

深入了解它似乎不太适合加载这些类型的文件。我们的自定义抓取尝试尝试实现的API对于未定义的file://方案url保留行为。即使在看起来可行的地方,我也可能不会依靠它。取而代之的是,我将在反应本机中使用现有的文件读取机制来获取数据。您希望能够以两种格式之一读取文件数据:

UInt8Array base64编码的字符串(然后将其转换为UInt8Array) 这是一些使用expo-filesystem的代码的框架,您可以使其适应代码。我们在bundleResourceIO模型加载器中执行了类似的操作(尽管我们使用其他库来读取文件)。

import * as FileSystem from 'expo-file-system';

const fileUri = 'NON-HTTP-URI-GOES-HERE';      
const imgB64 = await FileSystem.readAsStringAsync(fileUri, {
    encoding: FileSystem.EncodingType.Base64,
});
const imgBuffer = tf.util.encodeString(imgB64, 'base64').buffer;
const raw = new Uint8Array(imgBuffer)  
const imageTensor = decodeJpeg(raw);