Skip to content

Commit

Permalink
feat: 设置ocr
Browse files Browse the repository at this point in the history
  • Loading branch information
yuhldr committed Sep 16, 2024
1 parent 5b90eef commit 245a4e6
Show file tree
Hide file tree
Showing 8 changed files with 92 additions and 24 deletions.
4 changes: 4 additions & 0 deletions data/cool.ldr.lfy.in.gschema.xml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@
<default>"auto"</default>
<description>theme</description>
</key>
<key type="s" name="server-ocr-selected-key">
<default>"baidu"</default>
<description>The currently selected OCR service</description>
</key>
<key type="s" name="server-selected-key">
<default>"baidu"</default>
<description>The currently selected translation service</description>
Expand Down
72 changes: 59 additions & 13 deletions lfy/api/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,59 @@
from lfy.api.constant import SERVERS
from lfy.api.server import Lang, Server

servers_t = None
servers_o = None

def get_server_names():
"""获取所有翻译服务的名字

def get_servers_t():
"""翻译的服务
Returns:
dict: _description_
"""
global servers_t # pylint:disable=W0603
if servers_t is None:
servers_t = [s for s in SERVERS if s.can_translate]
return servers_t


def get_servers_o():
"""OCR的服务
Returns:
dict: _description_
"""
global servers_o # pylint:disable=W0603
if servers_o is None:
servers_o = [s for s in SERVERS if s.can_ocr]
return servers_o


def get_server_names_t():
"""翻译的服务名字
Returns:
list: _description_
"""
return get_server_names(get_servers_t())


def get_server_names_o():
"""OCR的服务名字
Returns:
_type_: _description_
"""
return get_server_names(get_servers_o())


def get_server_names(ss):
"""获取所给服务的名字
Returns:
list: ["百度", "腾讯", ...]
"""
return Gtk.StringList.new([s.name for s in SERVERS])
return Gtk.StringList.new([s.name for s in ss])


def get_servers_api_key():
Expand Down Expand Up @@ -49,30 +94,31 @@ def get_server(i: int) -> Server:
return SERVERS[i]


def create_server(key) -> Server:
def create_server_t(key) -> Server:
"""引擎字典
Returns:
_type_: _description_
"""
ss = {s.key: s for s in SERVERS if s.can_translate}

if key not in ss.keys():
return ss["google"]
return ss[key]
for s in get_servers_t():
if s.key == key:
return s

return get_servers_t()[0]


def create_server_ocr(key) -> Server:
def create_server_o(key) -> Server:
"""引擎字典
Returns:
_type_: _description_
"""
ss = {s.key: s for s in SERVERS if s.can_ocr}
for s in get_servers_o():
if s.key == key:
return s

if key not in ss.keys():
return ss["baidu"]
return ss[key]
return get_servers_o()[0]


def get_lang_names(i=0):
Expand Down
4 changes: 4 additions & 0 deletions lfy/api/constant.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
from lfy.api.server.com import AllServer
from lfy.api.server.google import GoogleServer
from lfy.api.server.huoshan import HuoShanServer
from lfy.api.server.ocr.easyocr import EasyOcrServer
from lfy.api.server.ocr.pytesseract import PytesseractServer
from lfy.api.server.tencent import TencentServer

SERVERS = [
Expand All @@ -15,6 +17,8 @@
TencentServer(),
AliYunServer(),
HuoShanServer(),
EasyOcrServer(),
PytesseractServer(),
]


Expand Down
2 changes: 1 addition & 1 deletion lfy/api/server/ocr/pytesseract.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ def __init__(self):
"fra": 7,
"it": 8
}
super().__init__("easyocr", "easyocr", lang_key_ns)
super().__init__("pytesseract", "pytesseract", lang_key_ns)
self.can_ocr = True

def ocr_image(self, img_path: str, lang_keys=None):
Expand Down
4 changes: 2 additions & 2 deletions lfy/code.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

from gi.repository import Gdk

from lfy.api import create_server, get_lang, server_key2i
from lfy.api import create_server_t, get_lang, server_key2i
from lfy.settings import Settings


Expand All @@ -24,7 +24,7 @@ def req_text(s):
# 设置环境变量
os.environ['http_proxy'] = proxy_address
os.environ['https_proxy'] = proxy_address
tran_server = create_server(setting.server_selected_key)
tran_server = create_server_t(setting.server_selected_key)

try:

Expand Down
8 changes: 5 additions & 3 deletions lfy/preference.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@

from gi.repository import Adw, Gdk, Gio, Gtk

from lfy.api import get_server_names_api_key, get_servers_api_key
from lfy.api import (get_server_names_api_key, get_servers_api_key,
get_servers_t)
from lfy.api.constant import SERVERS
from lfy.api.server import Server
from lfy.api.utils import is_text
Expand Down Expand Up @@ -56,13 +57,14 @@ def _init_pop_compare(self):
# ui中无法设置gbtn_compare翻译
self.gbtn_compare.set_label(_("compare"))
names = []
ss = list(get_servers_t())[1:]
keys_s = Settings.get().compare_servers
if len(keys_s) == 0:
for se in SERVERS[1:]:
for se in ss:
keys_s.append(se.key)

self.check_items = []
for se in SERVERS[1:]:
for se in ss:
check_button = Gtk.CheckButton(label=se.name)
if se.key in keys_s:
check_button.set_active(True)
Expand Down
12 changes: 12 additions & 0 deletions lfy/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,18 @@ def get():
Settings.instance = Settings.new()
return Settings.instance

@property
def server_ocr_selected_key(self):
"""选择OCR的服务的key
Returns:
str: 如:baidu
"""
return self.get_string('server-ocr-selected-key')
@server_ocr_selected_key.setter
def server_ocr_selected_key(self, key):
self.set_string('server-ocr-selected-key', key)

@property
def server_selected_key(self):
"""选择翻译的服务的key
Expand Down
10 changes: 5 additions & 5 deletions lfy/translate.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@

from gi.repository import Adw, Gdk, GLib, Gtk

from lfy.api import (create_server, create_server_ocr, get_lang,
get_lang_names, get_server, get_server_names, lang_n2j,
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)
from lfy.api.constant import NO_TRANSLATED_TXTS
from lfy.api.server import Server
Expand Down Expand Up @@ -80,11 +80,11 @@ def __init__(self, **kwargs):
self.toast.set_timeout(2)

i = server_key2i(self.setting.server_selected_key)
self.tran_server = create_server(self.setting.server_selected_key)
self.ocr_server = create_server_ocr(self.setting.server_selected_key)
self.tran_server = create_server_t(self.setting.server_selected_key)
self.ocr_server = create_server_o(self.setting.server_ocr_selected_key)
self.jn = True

self.dd_server.set_model(get_server_names())
self.dd_server.set_model(get_server_names_t())
self.dd_server.set_selected(i)

self.dd_lang.set_model(get_lang_names(i))
Expand Down

0 comments on commit 245a4e6

Please sign in to comment.