sanster9292
sanster9292

Reputation: 1325

Reading in a pandas column as a base64 string

I have a csv file that I have read into Pandas. One of the columns in the csv contains a base64 encoded value but it gets read in by Pandas as a string. How would I go about converting this value (now read in as a string) back to a useable base64 value. The structure looks like this.

I have an example here:

asset_id,asset_name,file_extension,concept_name,image_byte
204863410,7613287394927_H_enUK_1634104697919.jpg,jpg,Nestle Confectionery:Hazelnut,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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/9k=

I have a few more samples loaded up in this file for recreating the error here.

UPDATE:

As a commenter pointed out that the string I am trying to convert is already a base64 and that is indeed correct. That is the problem!

The string is already base64 encoded but I am not sure why it is still getting rejected. I think that it might be trying to read the string in with the ' at the beginning and end and failing. When I try loading the string as is into the API call as such, I get this

image=resources_pb2.Image(
TypeError: '/9j/4AAQSkZJRgABAQIAHAAcAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyY has type str, but expected one of: bytes

This is the code block I am using

post_inputs_response = stub.PostInputs(
service_pb2.PostInputsRequest(
    inputs=[
        resources_pb2.Input(
            data=resources_pb2.Data(
                image=resources_pb2.Image(
                    base64= img_byte_raw
                )
            )
        )
    ]
),
metadata=metadata

)

which I got from Clarifai's doc linked here

I will appreciate any help

Upvotes: 3

Views: 1935

Answers (2)

Mark Tolonen
Mark Tolonen

Reputation: 177911

In your linked Book1.csv of four rows, the first two entries are valid base64-encoded, but the last two are not. The strings in the last rows are very long and may have been truncated at some point. The TypeError you received indicates the base64-encoded string data needs to be converted back to bytes objects.

Below is an example converting the base64 strings to bytes objects. I used Pillow (pip install Pillow) to display the images to verify that they were indeed decoded correctly:

import pandas as pd
import base64
from PIL import Image
from io import BytesIO

def decode(s):
    try:
        return base64.b64decode(s)
    except ValueError as e:
        return e

df = pd.read_csv(r'downloads\book1.csv',encoding='utf-8-sig')
df['image_byte'] = df['image_byte'].apply(decode)
print(df)
Image.open(BytesIO(df.image_byte[0])).show()
Image.open(BytesIO(df.image_byte[1])).show()

Output:

    asset_id  ...                                         image_byte
0  204863410  ...  b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x02...
1  204863409  ...  b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x02...
2  204863134  ...                                  Incorrect padding
3  204863133  ...                                  Incorrect padding

[4 rows x 5 columns]

The first image:

First image example

Upvotes: 5

PeptideWitch
PeptideWitch

Reputation: 2359

Ok I think I've found out your issue. Let's download a fresh file to use as an example and work with that. I'm working with a small snippet of a gray square.

import cv2
from base64 import b64encode, b64decode
import numpy as np

# Load image, b64 encode, byte decode to string
img = cv2.imread(r'C:\Users\me\Pictures\koala.png', cv2.IMREAD_GRAYSCALE)
encoded_img = b64encode(img)
image_b64_str = encoded_img.decode("utf-8")

# Read the string back, encode into bytes, then b64 decode
image_b64_in = image_b64_str.encode("utf-8")
base64_decoded_image = b64decode(image_b64_in)

decodeed_img_from_string_only = np.frombuffer(image_b64_in, dtype=np.uint8)
decodeed_img_from_b64_decode = np.frombuffer(base64_decoded_image, dtype=np.uint8)


print(img)
print(f"b64 encoded: {encoded_img}")
print(f"b64 encoded then string decoded: {image_b64_str}")

print('')
print(f"String encoded to bytes: {image_b64_in}")
print(f"Bytes decoded to array: {decodeed_img_from_string_only}")
print('')
print(f"String encoded to bytes and then b64 decoded: {base64_decoded_image}")
print(f"B64-decoded bytes decoded to array: {decodeed_img_from_b64_decode}")

Here's the output from the above block:

[[181 182 182 182 181 182 186]
 [181 182 182 182 182 183 186]
 [182 182 183 183 184 185 186]
 [182 182 183 184 185 186 186]
 [182 182 182 183 185 186 187]
 [180 181 181 182 184 185 187]
 [178 179 181 181 182 184 188]
 [177 179 180 180 181 183 188]]
b64 encoded: b'tba2trW2urW2tra2t7q2tre3uLm6tra3uLm6ura2tre5uru0tbW2uLm7srO1tba4vLGztLS1t7w='
b64 encoded then string decoded: tba2trW2urW2tra2t7q2tre3uLm6tra3uLm6ura2tre5uru0tbW2uLm7srO1tba4vLGztLS1t7w=

String encoded to bytes: b'tba2trW2urW2tra2t7q2tre3uLm6tra3uLm6ura2tre5uru0tbW2uLm7srO1tba4vLGztLS1t7w='
Bytes decoded to array: [116  98  97  50 116 114  87  50 117 114  87  50 116 114  97  50 116  55
 113  50 116 114 101  51 117  76 109  54 116 114  97  51 117  76 109  54
 117 114  97  50 116 114 101  53 117 114 117  48 116  98  87  50 117  76
 109  55 115 114  79  49 116  98  97  52 118  76  71 122 116  76  83  49
 116  55 119  61]

String encoded to bytes and then b64 decoded: b'\xb5\xb6\xb6\xb6\xb5\xb6\xba\xb5\xb6\xb6\xb6\xb6\xb7\xba\xb6\xb6\xb7\xb7\xb8\xb9\xba\xb6\xb6\xb7\xb8\xb9\xba\xba\xb6\xb6\xb6\xb7\xb9\xba\xbb\xb4\xb5\xb5\xb6\xb8\xb9\xbb\xb2\xb3\xb5\xb5\xb6\xb8\xbc\xb1\xb3\xb4\xb4\xb5\xb7\xbc'
B64-decoded bytes decoded to array: [181 182 182 182 181 182 186 181 182 182 182 182 183 186 182 182 183 183
 184 185 186 182 182 183 184 185 186 186 182 182 182 183 185 186 187 180
 181 181 182 184 185 187 178 179 181 181 182 184 188 177 179 180 180 181
 183 188]

What's interesting to note is that the human-readable re-encoding of the string looks identical to the original b64 encoding but yields a completely different array than the original, whereas the b64 encoding of the string re-encoding looks very different visually but re-creates the original array (without the proper shape, which is typical for a buffer. You'll need to supply that yourself).

I think you need to use df['col'].applymap(lambda x: b64decode(x.encode("utf-8"))) on your saved strings if you want to read them for the purpose of converting them timages.

However this begs the question - why doesn't your_string.encode("utf-8") as a byte representation work for the API when, b64encode(b64decode(your_string.encode("utf-8"))) should theoretically yield the same representation...I'm not certain about that. Maybe make sure that df['col'].applymap(lambda x: x.encode("utf-8")) or df['col'].astype(bytes) as another commenter suggested is giving you what you want?

Further reading: Convert string of base64 back to base64 bytes , How do you decode Base64 data in Python?

Upvotes: 1

Related Questions