Skip to content

Commit

Permalink
cache
Browse files Browse the repository at this point in the history
  • Loading branch information
yuhldr committed Sep 27, 2024
1 parent 1b59d90 commit ec558f7
Show file tree
Hide file tree
Showing 11 changed files with 151 additions and 64 deletions.
27 changes: 16 additions & 11 deletions lfy.in
Original file line number Diff line number Diff line change
Expand Up @@ -86,23 +86,28 @@ def main():

parser = argparse.ArgumentParser(description="translate")

parser.add_argument('-t', type=str, help='翻译后面的文字')
parser.add_argument('-l', type=str, help='待翻译文字或待OCR文件')
parser.add_argument('-s', type=str, help='所用服务', default="")
parser.add_argument('-t', type=int, help='翻译后面的文字')
parser.add_argument('-o', type=str, help='识别图片')
parser.add_argument('-c', action='store_true', help='翻译剪贴板')

args = parser.parse_args()

if args.t:
from lfy.code import req_text # pylint: disable=c0415
return req_text(args.t)

if len(args.s) > 0:
from lfy.code import req_text
print(req_text(args.l, args.s, args.t))
return
print(get_help_server(False))
return
if args.o:
from lfy.code import ocr_img # pylint: disable=c0415
return ocr_img(args.o)

# if args.c:
# from lfy.code import req_clip
# return req_clip()
if len(args.s) > 0:
from lfy.code import ocr_img
print(req_ocr(args.l, args.s, args.o))
return
print(get_help_server(True))
return


set_resources()
return sys.exit(run_application())
Expand Down
47 changes: 39 additions & 8 deletions lfy/api/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ def get_server_names_api_key():
return get_server_names(get_servers_api_key())


def get_server(i: int) -> Server:
def get_server(i: int, ss) -> Server:
"""_summary_
Args:
Expand All @@ -84,12 +84,35 @@ def get_server(i: int) -> Server:
Returns:
_type_: _description_
"""
ss = get_servers_t() + get_servers_o()
if i >= len(ss):
return ss[0]
return ss[i]


def get_server_t(i: int) -> Server:
"""_summary_
Args:
i (int): _description_
Returns:
_type_: _description_
"""
return get_server(i, get_servers_t())


def get_server_o(i: int) -> Server:
"""_summary_
Args:
i (int): _description_
Returns:
_type_: _description_
"""
return get_server(i, get_servers_o())


def create_server_t(key) -> Server:
"""引擎字典
Expand Down Expand Up @@ -123,25 +146,33 @@ def get_lang_names(i=0):
Returns:
list: 如 ["auto"]
"""
return Gtk.StringList.new(get_server(i).get_lang_names())
return Gtk.StringList.new(get_server_t(i).get_lang_names())


def get_lang(i=0, j=0) -> Lang:
"""获取某个翻译服务的所有翻译语言的名字
Args:
i (int, optional): 第几个. Defaults to 0.
j (int, optional): _description_. Defaults to 0.
Returns:
list: 如 ["auto"]
Lang: _description_
"""
return get_server(i).get_lang(j)
return get_server_t(i).get_lang(j)


def server_key2i(key: str):
def server_key2i(key: str, is_ocr=False):
"""分辨是哪个服务的唯一标识符
Returns:
int: 在 servers 是第几个
"""
for i, te in enumerate(get_servers_t()):
if is_ocr:
ss = get_servers_o()
else:
ss = get_servers_t()
for i, te in enumerate(ss):
if te.key == key:
return i
return 0
Expand All @@ -157,7 +188,7 @@ def lang_n2j(i: int, n: int):
Returns:
int: 在当前server中是第一个lang
"""
for j, lang in enumerate(get_server(i).langs):
for j, lang in enumerate(get_server_t(i).langs):
if lang.n == n:
return j
return 0
3 changes: 3 additions & 0 deletions lfy/api/constant.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,6 @@
NO_TRANSLATED_TXTS = [
"\"server-sk-",
]

CODE_SERVER_N_HELP = -2
CODE_SERVER_N_DEFAULT = -3
2 changes: 1 addition & 1 deletion lfy/api/server/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ def get_api_key_s(self):
"""
return None

def ocr_image(self, img_path: str):
def ocr_image(self, img_path: str, lang_str=None):
"""图片识别
Args:
Expand Down
1 change: 0 additions & 1 deletion lfy/api/server/ocr/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,4 +43,3 @@ def gen_img(text="success"):
import pytesseract
s = pytesseract.image_to_string(img_path, lang="eng")
print(s)

4 changes: 2 additions & 2 deletions lfy/api/server/ocr/baidu.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ def __init__(self):
# Development documentation
# https://fanyi-api.baidu.com/doc/21

super().__init__("baidu_ocr", _("baidu"), {})
super().__init__("baidu", _("baidu"), {})
self.can_ocr = True

def get_api_key_s_ocr(self):
Expand All @@ -89,7 +89,7 @@ def get_api_key_s_ocr(self):
"""
return Settings.get().server_sk_baidu_ocr

def ocr_image(self, img_path):
def ocr_image(self, img_path, lang_str=None):
"""图文识别
Args:
Expand Down
7 changes: 4 additions & 3 deletions lfy/api/server/ocr/easyocr.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,12 @@ def __init__(self):
super().__init__("easyocr", "easyocr", {})
self.can_ocr = True

def ocr_image(self, img_path: str, lang_keys=None):
def ocr_image(self, img_path: str, lang_str=None):
try:
import easyocr
if lang_keys is None:
lang_keys = self.get_api_key_s_ocr().split('|')
if lang_str is None:
lang_str = self.get_api_key_s_ocr()
lang_keys = lang_str.split("|")
reader = easyocr.Reader(lang_keys)
s = " ".join(reader.readtext(img_path, detail=0))
return True, s.strip()
Expand Down
16 changes: 11 additions & 5 deletions lfy/api/server/ocr/pytesseract.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,21 @@ class PytesseractServer(Server):
def __init__(self):

# 获取系统默认语言,英语添加

super().__init__("pytesseract", "pytesseract", {})
lang_key_ns = {
"chi_sim": 1,
"eng": 3,
"fra": 7,
"ita": 8
}
super().__init__("pytesseract", "pytesseract", lang_key_ns)
self.can_ocr = True

def ocr_image(self, img_path: str, lang=None):
def ocr_image(self, img_path: str, lang_str=None):
try:
import pytesseract
if lang is None:
lang = self.get_api_key_s_ocr()
if lang_str is None:
lang_str = self.get_api_key_s_ocr()
lang = "+".join(lang_str.split("|"))
print(lang)
return True, pytesseract.image_to_string(img_path, lang=lang)
except ModuleNotFoundError as e:
Expand Down
1 change: 0 additions & 1 deletion lfy/api/server/tra/aliyun.py
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,6 @@ def __init__(self):
# Development documentation
# https://help.aliyun.com/zh/machine-translation/developer-reference/machine-translation-language-code-list
lang_key_ns = {
"auto": 0,
"zh": 1,
"en": 3,
"ja": 4,
Expand Down
99 changes: 71 additions & 28 deletions lfy/code.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,42 +5,46 @@

from gi.repository import Gdk

from lfy.api import create_server_o, create_server_t, get_lang, server_key2i
from lfy.api import (create_server_o, create_server_t, get_servers_o,
get_servers_t, server_key2i)
from lfy.api.constant import CODE_SERVER_N_DEFAULT, CODE_SERVER_N_HELP
from lfy.api.server import Server
from lfy.api.utils.debug import get_logger
from lfy.settings import Settings


def ocr_img(s):
"""命令行识别
def get_help_lang(server: Server):
"""某个服务的lang key
Args:
s (str): 图片路径
server (Server): _description_
j (int, optional): _description_. Defaults to -1.
Returns:
_type_: _description_
"""
setting = Settings.get()
server: Server = create_server_o(setting.server_ocr_selected_key)
# 每个翻译对应的key
return {lang.get_name(): j for j, lang in enumerate(server.langs)}

try:
print(server.name)
_ok, text = server.ocr_image(s)
print(text)

except Exception as e: # pylint: disable=W0718
get_logger().error(e)
error_msg = _("something error:")
error_msg2 = f"{str(e)}\n\n{traceback.format_exc()}"
text = f"{error_msg}{server.name}\n\n{error_msg2}"
def get_help_server(is_ocr=False):
"""某个服务的lang key
Args:
server (Server): _description_
j (int, optional): _description_. Defaults to -1.
Returns:
_type_: _description_
"""
if is_ocr:
return {s.name: s.key for s in get_servers_o()}
return {s.name: s.key for s in get_servers_t()}

def req_text(s):
"""子线程翻译

Args:
s (str): _description_
server (Server): _description_
def set_vpn():
"""_summary_
"""
print(s)
setting = Settings.get()

# 设置代理地址和端口号
Expand All @@ -49,28 +53,67 @@ def req_text(s):
# 设置环境变量
os.environ['http_proxy'] = proxy_address
os.environ['https_proxy'] = proxy_address
tran_server = create_server_t(setting.server_selected_key)


def req_text(s=None, key_server=None, lang_j=-1):
"""子线程翻译
Args:
s (str): _description_
server (Server): _description_
"""
print(s)
set_vpn()

try:
if key_server is None:
return get_help_server(False)
server = create_server_t(key_server)
if lang_j < 0:
return get_help_lang(server)

key_lang = server.get_lang(lang_j).key
print("tra", server.name, key_lang)
_ok, text = server.translate_text(s, key_lang)
return text

except Exception as e: # pylint: disable=W0718
get_logger().error(e)
error_msg = _("something error:")
error_msg2 = f"{str(e)}\n\n{traceback.format_exc()}"
return f"{error_msg}{server.name}\n\n{error_msg2}"

i = server_key2i(setting.server_selected_key)

gl = get_lang(i, setting.lang_selected_n)
print(tran_server.name, gl.get_name())
def req_ocr(s=None, key_server=None, ocr_key=None):
"""子线程翻译
Args:
s (str): _description_
server (Server): _description_
"""
set_vpn()

try:
if key_server is None:
return get_help_server(True)

_ok, text = tran_server.translate_text(s, gl.key)
print(text)
server = create_server_o(key_server)
print("ocr", server.name, ocr_key)
_ok, text = server.ocr_image(s, ocr_key)
return text

except Exception as e: # pylint: disable=W0718
get_logger().error(e)
error_msg = _("something error:")
error_msg2 = f"{str(e)}\n\n{traceback.format_exc()}"
text = f"{error_msg}{tran_server.name}\n\n{error_msg2}"
return f"{error_msg}{server.name}\n\n{error_msg2}"


def req_clip():
"""获取截剪贴板
"""
print("req_clip")

def on_active_copy(cb2, res):
req_text(cb2.read_text_finish(res))

Expand Down
8 changes: 4 additions & 4 deletions lfy/translate.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
from gi.repository import Adw, Gdk, GLib, Gtk

from lfy.api import (create_server_o, create_server_t, get_lang,
get_lang_names, get_server, get_server_names_t, lang_n2j,
server_key2i)
get_lang_names, get_server_names_t, get_server_t,
lang_n2j, server_key2i)
from lfy.api.constant import NO_TRANSLATED_TXTS
from lfy.api.server import Server
from lfy.api.utils import cal_md5
Expand Down Expand Up @@ -166,7 +166,7 @@ def save_settings(self, _a):

i = self.dd_server.get_selected()
j = self.dd_lang.get_selected()
self.setting.server_selected_key = get_server(i).key
self.setting.server_selected_key = get_server_t(i).key
n = get_lang(i, j).n
self.setting.lang_selected_n = n

Expand Down Expand Up @@ -257,7 +257,7 @@ def update(self, text, reload=False, del_wrapping=True):
text = buffer_from.get_text(start_iter, end_iter, False)

i = self.dd_server.get_selected()
server: Server = get_server(i)
server: Server = get_server_t(i)
if server.key != self.tran_server.key:
self.tran_server = server
lk = get_lang(i, self.dd_lang.get_selected()).key
Expand Down

0 comments on commit ec558f7

Please sign in to comment.