Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

How to translate image #41

Open
karim23657 opened this issue Jan 20, 2024 · 4 comments
Open

How to translate image #41

karim23657 opened this issue Jan 20, 2024 · 4 comments
Labels
enhancement New feature or request

Comments

@karim23657
Copy link

No description provided.

@AidanWelch
Copy link
Owner

Currently this package has no support for that but I'll look into it.

@AidanWelch AidanWelch added the enhancement New feature or request label Jan 20, 2024
@karim23657
Copy link
Author

karim23657 commented Feb 8, 2024

@AidanWelch , 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]])

@sertraline
Copy link

but i don't know why not working

It will not work without correct x-goog-batchexecute-bgr header.

@sertraline
Copy link

Lens translation endpoint does not depend on x-goog-batchexecute-bgr, but it needs a google lens ID in the request form.

const callbacks = text.match(/AF_initDataCallback\((\{.*?\})\)/gms);
const test = text.match(/lens-web-standalone-prod\/(.*?)\"/gms);
const reqid = test[0].split('"')[0];
console.log(reqid);

Then, in theory, we should be able to make a request to https://lens.google.com/_/LensWebStandaloneUi/data/batchexecute with a properly formed payload. This in turn will return translation data and also background blobs to cover the original text (in base64).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

3 participants