vitalets / google-translate-api

A free and unlimited API for Google Translate :dollar: :no_entry_sign:
MIT License
936 stars 120 forks source link

How to translate image? #128

Closed karim23657 closed 8 months ago

vitalets commented 8 months ago

This library uses Google API that can only translate text. To translate image you need first to extract text from image using some third-party tool and then pass it this lib.

karim23657 commented 8 months ago

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

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]])
vitalets commented 8 months ago

Thanks for sharing, looks like Google can translate images!

StarkGang commented 6 months ago

@vitalets It returns same image that you send without any translation