This commit is contained in:
恍兮惚兮 2024-08-24 01:32:53 +08:00
parent 0eeca2fe8a
commit 0c763f1a83
10 changed files with 49 additions and 46 deletions

View File

@ -1283,10 +1283,9 @@ class TranslatorWindow(resizableframeless):
hwnd = windows.GetForegroundWindow() hwnd = windows.GetForegroundWindow()
hwndpid = windows.GetWindowThreadProcessId(hwnd) hwndpid = windows.GetWindowThreadProcessId(hwnd)
ismyprocbutnotmainuiforeground = hwndpid == os.getpid() and hwnd != self.winid ismyprocbutnotmainuiforeground = hwndpid == os.getpid() and hwnd != self.winid
onlychecktitle = (
globalconfig["mousetransparent"] or ismyprocbutnotmainuiforeground if ismyprocbutnotmainuiforeground:
) return False
if onlychecktitle:
usegeo = self.titlebar.geometry() usegeo = self.titlebar.geometry()
btn: QWidget = self.titlebar.buttons["mousetransbutton"] btn: QWidget = self.titlebar.buttons["mousetransbutton"]
if ( if (
@ -1296,8 +1295,6 @@ class TranslatorWindow(resizableframeless):
): ):
usegeo = self.mousetranscheckrect usegeo = self.mousetranscheckrect
return usegeo.contains(self.mapFromGlobal(QCursor.pos())) return usegeo.contains(self.mapFromGlobal(QCursor.pos()))
else:
return self.geometry().contains(QCursor.pos())
def __betterenterevent(self): def __betterenterevent(self):
if self._isentered: if self._isentered:
@ -1307,6 +1304,14 @@ class TranslatorWindow(resizableframeless):
self._isentered = True self._isentered = True
self.enterfunction() self.enterfunction()
def leaveEvent(self, e):
super().leaveEvent(e)
self.dodelayhide(None)
def enterEvent(self, e: QEvent):
super().enterEvent(e)
self.enterfunction(delay=-1)
@threader @threader
def dodelayhide(self, delay): def dodelayhide(self, delay):
enter_sig = uuid.uuid4() enter_sig = uuid.uuid4()
@ -1327,7 +1332,8 @@ class TranslatorWindow(resizableframeless):
def enterfunction(self, delay=None): def enterfunction(self, delay=None):
self.titlebar.show() self.titlebar.show()
self.set_color_transparency() self.set_color_transparency()
if delay == -1:
return
self.dodelayhide(delay) self.dodelayhide(delay)
def resizeEvent(self, e: QResizeEvent): def resizeEvent(self, e: QResizeEvent):

View File

@ -842,5 +842,8 @@
"按键": "", "按键": "",
"事件": "", "事件": "",
"按下": "", "按下": "",
"松开": "" "松开": "",
"v0.10pre1支持gpt词典": "",
"prompt格式需要根据模型版本决定": "",
"英文": ""
} }

View File

@ -1,6 +1,6 @@
## 极大改善OCR模式体验的设置 ## OCR模式绑定游戏窗口
一个非常重要能极大改善OCR体验的设置**绑定窗口** 默认已激活`选取OCR范围后自动绑定窗口`当范围框的四个顶点同属于某个窗口HWND时会自动绑定到该窗口上。
一般来说用其他OCR软件时一个很折磨人的地方就是经常需要留个神注意游戏窗口和翻译窗口的位置。可能翻译窗口和截图区域相交或者有时游戏窗口要切到后台这时候都很烦 一般来说用其他OCR软件时一个很折磨人的地方就是经常需要留个神注意游戏窗口和翻译窗口的位置。可能翻译窗口和截图区域相交或者有时游戏窗口要切到后台这时候都很烦
@ -33,5 +33,3 @@
以及一些其他记不太住的优化,都需要绑定窗口才能使用。 以及一些其他记不太住的优化,都需要绑定窗口才能使用。
所以当绑定了游戏窗口哪怕是仅使用OCR不使用HOOK其实也是能比一般的其他软件有更好的体验的。 所以当绑定了游戏窗口哪怕是仅使用OCR不使用HOOK其实也是能比一般的其他软件有更好的体验的。
但不绑定窗口那这个OCR模式不就和别的OCR软件没区别了吗我专门为此做了非常多的优化但可能是因为这个设置似乎从来没有在其他同类OCR软件上看到过所以没太有人注意这个功能的意义对此我感到非常痛心。因此特地说一下。

View File

@ -107,7 +107,7 @@
<!-- tabs:end --> <!-- tabs:end -->
### 不兼容的专用接口 ### 特定平台的专用接口
#### 外国大模型接口 #### 外国大模型接口

View File

@ -1,18 +1,8 @@
## OCR自动化执行方法的参数含义 ## OCR自动化执行方法的参数含义
![img](https://image.lunatranslator.org/zh/ocrauto.png)
#### 文本相似度阈值
OCR的结果是不稳定的经常对于图片的微小扰动会使文本发生微小变化导致翻译也会连带重新翻译。
不管使用哪种自动化方法每次调用OCR后都会比较本次OCR的结果和上一次OCR的结果编辑距离当编辑距离大于阈值时才会输出文本。
## 自动化执行方法
### 分析图像更新 ### 分析图像更新
这个方法会使用参数“图像稳定性阈值”“图像一致性阈值” 这个方法会使用参数“图像稳定性阈值”“图像一致性阈值”“文本相似度阈值”
#### 1. 图像稳定性阈值 #### 1. 图像稳定性阈值
@ -30,14 +20,21 @@ OCR的结果是不稳定的经常对于图片的微小扰动会使文本发
如果OCR频率过快可以适当提高该值反之如果太过迟钝可以适当降低该值。 如果OCR频率过快可以适当提高该值反之如果太过迟钝可以适当降低该值。
#### 3. 文本相似度阈值
OCR的结果是不稳定的经常对于图片的微小扰动会使文本发生微小变化导致翻译也会连带重新翻译。
每次调用OCR后都会比较本次OCR的结果和上一次OCR的结果编辑距离当编辑距离大于阈值时才会输出文本。
### 周期执行 ### 周期执行
这个方法会依据“执行周期”来周期执行 这个方法会依据“执行周期”来周期执行,并采用“文本相似度阈值”来避免翻译相同的文本。
### 分析图像更新+周期执行 ### 分析图像更新+周期执行
结合上述两种方法当根据至少每“执行周期”的时间间隔都会执行一次OCR。且也会根据“分析图像更新”在间隔内进行OCR间隔内的OCR会重置间隔的计时。 结合上述两种方法当根据至少每“执行周期”的时间间隔都会执行一次OCR,并采用“文本相似度阈值”来避免翻译相同的文本。且也会根据“分析图像更新”在间隔内进行OCR间隔内的OCR会重置间隔的计时。
### 鼠标键盘触发+等待稳定 ### 鼠标键盘触发+等待稳定
@ -47,10 +44,11 @@ OCR的结果是不稳定的经常对于图片的微小扰动会使文本发
默认以下鼠标键盘事件将触发该方法按下鼠标左键、按下Enter、松开Ctrl、松开Shift、松开Alt。如果绑定了游戏窗口则仅当游戏窗口为前台窗口时才会触发方法。 默认以下鼠标键盘事件将触发该方法按下鼠标左键、按下Enter、松开Ctrl、松开Shift、松开Alt。如果绑定了游戏窗口则仅当游戏窗口为前台窗口时才会触发方法。
触发该方法后,由于需要等待游戏渲染新的文本,或文本可能不是立即出现(文本速度不是最快),因此需要稍微等待一小段时间,直到显示的文本稳定。 触发该方法后,由于需要等待游戏渲染新的文本,或文本可能不是立即出现(文本速度不是最快),因此需要稍微等待一小段时间,直到显示的文本稳定。
如果文本速度是最快的则可以将两个参数都设置为0。否则判断需要等待的时间需要以下参数 触发该方法并稳定后,一定会进行翻译,不会考虑文本的相似度。
如果文本速度是最快的则可以将以下两个参数都设置为0。否则判断需要等待的时间需要以下参数
#### 2. 延迟(s) #### 2. 延迟(s)

View File

@ -1,14 +1,12 @@
## 如何使用Mecab分词&词性颜色标注 ## 如何使用Mecab分词&词性颜色标注
首先需要下载mecab词典任选其一下载解压 首先需要下载mecab词典。下载[默认版本](https://lunatranslator.org/Resource/dictionary/Mecab.zip),或者[官方最新版本](https://clrd.ninjal.ac.jp/unidic/),解压。
![img](https://image.lunatranslator.org/zh/mecab_download.png)
然后在辞书设置中激活mecab并设置词典路径 然后在辞书设置中激活mecab并设置词典路径
![img](https://image.lunatranslator.org/zh/mecab.png) ![img](https://image.lunatranslator.org/zh/mecab.png)
然后,在显示设置->显示内容中,激活分词注音显示和语法加亮 然后,在显示设置->文本设置中,激活分词->注音显示(默认已激活)和语法加亮
![img](https://image.lunatranslator.org/zh/fenci.png) ![img](https://image.lunatranslator.org/zh/fenci.png)

View File

@ -17,7 +17,7 @@
- [OCR自动化执行方法的参数含义](/zh/ocrparam.md) - [OCR自动化执行方法的参数含义](/zh/ocrparam.md)
- [WindowsOCR如何安装额外的语言支持](/zh/windowsocr.md) - [WindowsOCR如何安装额外的语言支持](/zh/windowsocr.md)
- [mangaocr整合包无法启动怎么办](/zh/mangaocr.md) - [mangaocr整合包无法启动怎么办](/zh/mangaocr.md)
- [如何改善OCR模式体验](/zh/gooduseocr.md) - [OCR模式绑定游戏窗口](/zh/gooduseocr.md)
- [翻译源设置](/zh/guochandamoxing.redirect) - [翻译源设置](/zh/guochandamoxing.redirect)
- [如何使用大模型API翻译](/zh/guochandamoxing.md) - [如何使用大模型API翻译](/zh/guochandamoxing.md)
- [如何使用大模型离线翻译](/zh/offlinellm.md) - [如何使用大模型离线翻译](/zh/offlinellm.md)

View File

@ -30,7 +30,7 @@
该方法仅支持sakura大模型v0.10版本以上。 该方法仅支持sakura大模型v0.10版本以上。
使用该方法时需要在sakura大模型的设置中切换`prompt version`为`v0.10pre1` 使用该方法时需要在sakura大模型的设置中切换`prompt格式(需要根据模型版本决定)`为`v0.10pre1支持gpt词典`
<details> <details>
<summary>示例</summary> <summary>示例</summary>

View File

@ -43,7 +43,7 @@
整个流程是: 整个流程是:
1. 提取文本 1. 提取文本
1. 文本处理/文本预处理 1. 文本处理-文本预处理
1. 语音指定 1. 语音指定
1. 语音修正 1. 语音修正
1. -> 执行语音合成 1. -> 执行语音合成

View File

@ -29,7 +29,7 @@ include(generate_product_version)
set(VERSION_MAJOR 5) set(VERSION_MAJOR 5)
set(VERSION_MINOR 30) set(VERSION_MINOR 30)
set(VERSION_PATCH 2) set(VERSION_PATCH 3)
add_library(pch pch.cpp) add_library(pch pch.cpp)
target_precompile_headers(pch PUBLIC pch.h) target_precompile_headers(pch PUBLIC pch.h)