LunaTranslator的文本源支持
LunaTranslator 提供了多种文本源支持方式,包括剪贴板文本获取、HOOK方式获取文本和OCR引擎集成。这些功能使得用户可以从不同来源获取文本并进行翻译处理。剪贴板文本获取通过监听剪贴板变化实现;HOOK方式适用于从特定应用程序中直接提取文本;OCR引擎支持多种语言和场景的文本识别。
剪贴板文本获取
LunaTranslator 提供了强大的文本源支持,其中剪贴板文本获取是其核心功能之一。通过剪贴板,用户可以轻松地从其他应用程序中复制文本,并将其传递给 LunaTranslator 进行翻译或其他处理。本节将详细介绍剪贴板文本获取的实现机制、使用方法以及相关代码示例。
剪贴板文本获取的实现机制
剪贴板文本获取功能主要通过 copyboard.py 文件中的 copyboard 类实现。该类继承自 basetext,提供了剪贴板文本的监听和获取功能。以下是其核心实现逻辑:
-
剪贴板监听
通过调用winsharedutils.clipboard_callback方法,copyboard类注册了一个剪贴板回调函数。当剪贴板内容发生变化时,系统会触发回调函数,并将新的文本内容传递给copyboard类。 -
文本队列管理
使用queue.Queue来管理从剪贴板获取的文本内容。回调函数将新文本放入队列中,后续可以通过gettextthread方法从队列中获取文本。 -
单次文本获取
除了监听模式,copyboard类还提供了gettextonce方法,用于直接获取当前剪贴板中的文本内容。
以下是 copyboard 类的核心代码片段:
class copyboard(basetext):
def __init__(self) -> None:
self.__ref = winsharedutils.clipboard_callback_type(self.__callback)
self.__hwnd = winsharedutils.clipboard_callback(self.__ref)
self.__queue = queue.Queue()
super(copyboard, self).__init__("0", "copy")
def __callback(self, string, ismy):
if globalconfig["excule_from_self"] and ismy:
return
return self.__queue.put(string)
def gettextthread(self):
return self.__queue.get()
def gettextonce(self):
return winsharedutils.clipboard_get()
使用方法
剪贴板文本获取功能的使用非常简单,以下是其典型使用场景:
-
监听剪贴板变化
通过实例化copyboard类,可以开始监听剪贴板内容的变化。每次剪贴板内容更新时,回调函数会将新文本放入队列中。 -
获取文本内容
调用gettextthread方法可以从队列中获取最新的剪贴板文本内容。如果需要一次性获取当前剪贴板内容,可以使用gettextonce方法。 -
停止监听
调用end方法可以停止剪贴板监听,释放相关资源。
代码示例
以下是一个简单的代码示例,展示如何使用 copyboard 类获取剪贴板文本:
from textsource.copyboard import copyboard
# 实例化剪贴板监听器
cb = copyboard()
# 获取当前剪贴板内容
current_text = cb.gettextonce()
print(f"当前剪贴板内容: {current_text}")
# 监听剪贴板变化
try:
while True:
new_text = cb.gettextthread()
print(f"新剪贴板内容: {new_text}")
except KeyboardInterrupt:
pass
finally:
# 停止监听
cb.end()
流程图
以下是剪贴板文本获取的工作流程:
表格:copyboard 类方法说明
| 方法名 | 描述 |
|---|---|
__init__ | 初始化剪贴板监听器,注册回调函数并创建文本队列。 |
__callback | 剪贴板内容变化的回调函数,负责将新文本放入队列。 |
gettextthread | 从队列中获取最新的剪贴板文本内容。 |
gettextonce | 直接获取当前剪贴板中的文本内容。 |
end | 停止剪贴板监听,释放资源。 |
通过以上内容,相信您已经对 LunaTranslator 的剪贴板文本获取功能有了全面的了解。无论是监听剪贴板变化还是直接获取文本内容,copyboard 类都能为您提供高效的支持。
HOOK方式获取文本
在LunaTranslator中,HOOK方式是一种高效且灵活的文本获取方法,特别适用于从特定应用程序(如galgame)中直接提取文本。本节将详细介绍HOOK的工作原理、实现方式以及相关的代码示例。
HOOK的工作原理
HOOK(钩子)是一种在程序运行时拦截和修改其行为的机制。在LunaTranslator中,HOOK主要用于拦截目标应用程序的文本输出,并将其传递给翻译引擎进行处理。具体来说,HOOK通过以下步骤实现:
- 进程注入:将HOOK模块注入到目标应用程序的进程中。
- 地址拦截:在目标进程中拦截特定的函数调用或内存地址。
- 文本捕获:捕获拦截到的文本数据,并将其传递给LunaTranslator的主程序。
实现方式
LunaTranslator通过texthook.py模块实现了HOOK功能。以下是该模块的核心功能和方法:
核心类:texthook
class texthook(basetext):
def __init__(self, pids, hwnd, pname, autostarthookcode=None, needinserthookcode=None):
# 初始化HOOK配置
self.pname = pname
self.pids = pids
self.hwnd = hwnd
self.autostarthookcode = autostarthookcode or []
self.needinserthookcode = needinserthookcode or []
self.is64bit = Is64bit(pids[0])
self.connectedpids = []
self.hookdatacollecter = OrderedDict()
self.hooktypecollecter = OrderedDict()
关键方法
-
start方法:启动HOOK模块并注入目标进程。def start(self): self.Luna_Startup() self.setsettings() for pid in self.pids: if self.config["use_yapi"]: self.Luna_Inject(pid, os.path.abspath("./files/plugins/LunaHook")) else: if self.Luna_CreatePipeAndCheck(pid): injectpids.append(pid) -
onprocconnect方法:处理目标进程的连接事件。def onprocconnect(self, pid): self.connectedpids.append(pid) time.sleep(savehook_new_data[self.pname]["inserthooktimeout"] / 1000) for hookcode in self.needinserthookcode: self.Luna_InsertHookCode(pid, hookcode) -
getembedtext方法:捕获并处理嵌入的文本数据。def getembedtext(self, text, tp): if self.safeembedcheck(text) == False: self.embedcallback(text, text) self.newline.put((text, True, lambda trans: 1, True)) return if globalconfig["autorun"] == False: self.embedcallback(text, text) return if self.checkisusingembed(tp.addr, tp.ctx, tp.ctx2): self.newline.put((text, True, functools.partial(self.embedcallback, text), True))
代码示例
以下是一个简单的HOOK配置示例,展示如何通过texthook类捕获目标应用程序的文本:
# 初始化HOOK
hook = texthook(
pids=[1234], # 目标进程ID
hwnd=5678, # 目标窗口句柄
pname="target_app",
autostarthookcode=["H1234@5678:MyHookCode"],
needinserthookcode=["H5678@9012:AnotherHookCode"]
)
# 启动HOOK
hook.start()
表格:HOOK配置参数
| 参数名 | 类型 | 描述 |
|---|---|---|
pids | List[int] | 目标进程的ID列表。 |
hwnd | int | 目标窗口的句柄。 |
pname | str | 目标应用程序的名称。 |
autostarthookcode | List[str] | 自动启动的HOOK代码列表。 |
needinserthookcode | List[str] | 需要手动插入的HOOK代码列表。 |
流程图:HOOK工作流程
通过HOOK方式,LunaTranslator能够高效地从目标应用程序中提取文本,并实现实时翻译功能。这种方法不仅适用于galgame,还可以扩展到其他需要文本捕获的场景。
OCR引擎集成
LunaTranslator 提供了强大的OCR引擎支持,能够从多种来源获取文本并进行翻译。以下是对其OCR引擎集成的详细介绍。
支持的OCR引擎
LunaTranslator 集成了多种OCR引擎,包括但不限于以下类型:
| 引擎名称 | 描述 |
|---|---|
| Windows OCR | 基于Windows系统的OCR引擎,支持多语言识别。 |
| 百度OCR | 提供高精度的OCR识别能力,支持多种语言和复杂场景。 |
| 有道OCR | 支持中英文识别,适用于快速翻译场景。 |
| Tesseract5 | 开源OCR引擎,支持多种语言,适用于本地化部署。 |
| 腾讯OCR | 提供高精度的OCR识别,支持多种语言和复杂场景。 |
| 火山OCR | 支持多种语言识别,适用于高并发场景。 |
| 讯飞OCR | 提供高精度的OCR识别能力,支持多种语言和复杂场景。 |
| 谷歌OCR | 基于Google Cloud Vision API的OCR引擎,支持多种语言。 |
| Manga-OCR | 专门用于漫画文本识别的OCR引擎,支持日文和中文。 |
核心功能
1. 多语言支持
LunaTranslator 的OCR引擎支持多种语言的文本识别,包括但不限于:
- 中文
- 英文
- 日文
- 韩文
- 法文
- 德文
2. 高精度识别
通过集成多种OCR引擎,LunaTranslator 能够根据不同的场景选择最优的识别方案,确保识别的准确性和效率。
3. 本地与云端结合
LunaTranslator 既支持本地OCR引擎(如Tesseract5、Windows OCR),也支持云端OCR引擎(如百度OCR、腾讯OCR),用户可以根据需求灵活选择。
4. 自定义配置
用户可以通过配置文件或界面调整OCR引擎的参数,例如识别语言、识别精度等,以满足个性化需求。
代码示例
以下是一个简单的OCR引擎调用示例,展示了如何使用LunaTranslator的OCR功能:
from LunaTranslator.LunaTranslator.ocrengines.baseocrclass import baseocr
class CustomOCR(baseocr):
def initocr(self):
# 初始化OCR引擎
pass
def ocr(self, imagebinary):
# 调用OCR引擎识别图像中的文本
return "识别结果"
流程图
以下是OCR引擎的工作流程:
类图
以下是OCR引擎的核心类结构:
总结
LunaTranslator 的OCR引擎集成提供了丰富的功能和灵活的配置选项,能够满足不同场景下的文本识别需求。通过多引擎支持和本地与云端结合的方式,确保了识别的高效性和准确性。
多语言支持
LunaTranslator 提供了强大的多语言支持功能,能够满足不同语言用户的需求。无论是文本源的获取、翻译引擎的选择,还是用户界面的本地化,LunaTranslator 都提供了灵活的配置选项。以下将详细介绍其多语言支持特性。
1. 文本源的多语言支持
LunaTranslator 支持从多种文本源获取内容,包括剪贴板、OCR 和 HOOK 技术。这些功能均针对多语言环境进行了优化:
剪贴板支持
- 功能:直接从剪贴板中获取文本进行翻译。
- 多语言适配:支持 Unicode 编码,能够正确处理各种语言的文本内容。
OCR 支持
- 功能:内置多种 OCR 引擎,支持从图像中提取文本。
- 多语言适配:
- 支持中文、日文、韩文、俄文等多种语言的 OCR 识别。
- 提供针对不同语言的优化模型,例如:
def qimge2np(img: QImage): """将 QImage 转换为 NumPy 数组,用于 OCR 处理""" return np.array(img)
HOOK 支持
- 功能:通过 HOOK 技术直接从游戏中获取文本。
- 多语言适配:
- 支持特殊码配置,适配不同语言的游戏。
- 提供内嵌翻译功能,支持实时翻译游戏文本。
2. 翻译引擎的多语言支持
LunaTranslator 集成了多种翻译引擎,覆盖了几乎所有主流语言:
离线翻译
- 支持语言:中文、日文、英文等。
- 示例:
def gettextthread(self): """获取文本线程,支持多语言文本处理""" return self._text
在线翻译
- 支持语言:超过 50 种语言,包括但不限于:
- 中文、日文、韩文、俄文、法文、德文等。
- 示例:
自定义翻译扩展
- 功能:用户可以通过 Python 扩展其他翻译接口。
- 多语言适配:支持动态加载不同语言的翻译模块。
3. 用户界面的多语言本地化
LunaTranslator 的用户界面支持多种语言切换,目前内置的语言包包括:
- 简体中文 (
zh.json) - 日语 (
ja.json) - 英语 (
en.json) - 俄语 (
ru.json)
语言包示例
{
"ui": {
"title": "LunaTranslator",
"language": "语言",
"settings": "设置"
}
}
切换语言
用户可以通过修改配置文件或直接在界面中选择语言:
def set_language(lang: str):
"""设置界面语言"""
with open(f"files/lang/{lang}.json", "r", encoding="utf-8") as f:
language_data = json.load(f)
apply_language(language_data)
4. 多语言支持的扩展
LunaTranslator 鼓励用户参与多语言支持的扩展:
- 机器翻译:用户可以通过配置文件添加新的语言支持。
- 手动翻译:用户可以编辑语言文件 (
files/lang/目录下) 以提供更准确的翻译。
示例:添加法语支持
- 创建
fr.json文件:{ "ui": { "title": "LunaTranslator", "language": "Langue", "settings": "Paramètres" } } - 在配置中启用法语支持。
5. 总结
LunaTranslator 的多语言支持功能覆盖了从文本获取到翻译再到用户界面的全流程,为用户提供了高度灵活和可扩展的多语言解决方案。无论是开发者还是普通用户,都可以轻松地适配和使用其多语言功能。
总结
LunaTranslator 的文本源支持功能全面且灵活,覆盖了剪贴板、HOOK和OCR等多种方式,能够满足不同场景下的文本获取需求。其多语言支持和高度可扩展的设计使得用户可以根据具体需求进行定制和优化。无论是从应用程序中提取文本,还是通过OCR识别图像中的文字,LunaTranslator 都提供了高效的解决方案。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



