Tensor to JPEG: Improve quality

Viewed 244

I'm converting a tensor returned from a tensorflow camera into a jpeg. I've been able to do so but the jpeg image quality is terrible. This is for a mobile react-native app developed with expo. The library I'm using to convert the tensor to an image is jpeg-js.

This is the code I'm using to transform the tensor into an image:

const handleCameraStream = async (imageAsTensors) => {
  const loop = async () => {
    const tensor = await imageAsTensors.next().value;
    console.log(tensor)
    const [height, width] = tensor.shape
    const data = new Buffer(
      // concat with an extra alpha channel and slice up to 4 channels to handle 3 and 4 channels tensors
      tf.concat([tensor, tf.ones([height, width, 1]).mul(255)], [-1])
        .slice([0], [height, width, 4])
        .dataSync(),
    )

    const rawImageData = {data, width, height};
    const jpegImageData = jpeg.encode(rawImageData, 200);

    const imgBase64 = tf.util.decodeString(jpegImageData.data, "base64")
    const salt = `${Date.now()}-${Math.floor(Math.random() * 10000)}`
    const uri = FileSystem.documentDirectory + `tensor-${salt}.jpg`;
    await FileSystem.writeAsStringAsync(uri, imgBase64, {
      encoding: FileSystem.EncodingType.Base64,
    });
    setUri(uri)
    // return {uri, width, height}
  };
  // requestAnimationFrameId = requestAnimationFrame(loop);
  !uri ? setTimeout(() => loop(), 2000) : null;
}

The picture in the top half of the image is the camera stream. The picture in the bottom half of the image below is the transformed tensor.

enter image description here

0 Answers
Related