Reputation: 1325
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
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:
Upvotes: 5
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