py-googletranslation icon indicating copy to clipboard operation
py-googletranslation copied to clipboard

Please support image translate

Open karim23657 opened this issue 5 months ago • 1 comments

@Saravananslb , Thank you because of your amazing work. Google translate can translate image to new image and also return text in it, please add this feature.

Screenshot Google Translate

karim23657 avatar Jan 17 '24 12:01 karim23657

@Saravananslb , I found this code , good starter idea to develop it :

Everything looks right , but i don't know why not working.

import json
import requests
import base64
import os


def guess_type(image_path):
    # Get the file extension from the image path
    ext = os.path.splitext(image_path)[1].lower()

    # Map the extensions to the mimetypes
    mimetypes = {
        ".jpg": "image/jpeg",
        ".jpeg": "image/jpeg",
        ".png": "image/png"
    }

    # Return the mimetype if it exists, otherwise return None
    return mimetypes.get(ext, None)
def load_image_as_base64(image_path):
    with open(image_path, 'rb') as f:
        image_bytes = f.read()

    # Convert image bytes to base64 string
    base64_string = base64.b64encode(image_bytes).decode('utf-8')
    mimetype = guess_type(image_path)

    # Return image data in the specified format
    return [base64_string, mimetype]

_imageObj = load_image_as_base64('124+958.png')


_RPCIDS = "WqWDPb"
params = {
    'rpcids': _RPCIDS,
    'bl': 'boq_translate-webserver_20240115.08_p0',
    'soc-app': 1,
    'soc-platform': 1,
    'soc-device': 1,
    'rt': 'c'
    }

data = {'f.req': json.dumps([[
    [_RPCIDS,
    json.dumps([_imageObj,"auto","fr"], separators=(',', ':')),
     None,
     "generic"]
    ]], separators=(',', ':')),
 }



TRANSLATEURL = 'https://translate.google.com/_/TranslateWebserverUi/data/batchexecute'


response = requests.request("POST", TRANSLATEURL,
                            data=data,
                            params=params,
                            )

then i use bellow code to get translated image :

import base64

def convert_base64_to_image(base64_string, image_path):
    # Convert base64 string to image bytes
    image_bytes = base64.b64decode(base64_string)

    # Write the image bytes to a file
    with open(image_path, 'wb') as image_file:
        image_file.write(image_bytes)

b = response.text.split('\n')
li_filter = []
flag = False
for _b in b:
  if _b.isnumeric():
    flag = not flag
    _b = '==='
  if flag:
    li_filter.append(_b)

li_data = json.loads(li_filter[1])

resp_img_data =json.loads(li_data[0][2])
res_img_data=resp_img_data[0]
f_mimetypes = {
       "image/jpg": ".jpg" ,
        "image/jpeg" :".jpeg",
       "image/png" : ".png"
}
convert_base64_to_image(res_img_data[0], 'out'+f_mimetypes[res_img_data[1]])

karim23657 avatar Feb 08 '24 07:02 karim23657