GameSentenceMiner 2.7.0__py3-none-any.whl → 2.7.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- GameSentenceMiner/config_gui.py +7 -0
- GameSentenceMiner/configuration.py +1 -0
- GameSentenceMiner/electron_config.py +315 -0
- GameSentenceMiner/ocr/owocr_helper.py +6 -2
- GameSentenceMiner/owocr/owocr/run.py +9 -0
- {gamesentenceminer-2.7.0.dist-info → gamesentenceminer-2.7.2.dist-info}/METADATA +7 -1
- {gamesentenceminer-2.7.0.dist-info → gamesentenceminer-2.7.2.dist-info}/RECORD +11 -10
- {gamesentenceminer-2.7.0.dist-info → gamesentenceminer-2.7.2.dist-info}/WHEEL +0 -0
- {gamesentenceminer-2.7.0.dist-info → gamesentenceminer-2.7.2.dist-info}/entry_points.txt +0 -0
- {gamesentenceminer-2.7.0.dist-info → gamesentenceminer-2.7.2.dist-info}/licenses/LICENSE +0 -0
- {gamesentenceminer-2.7.0.dist-info → gamesentenceminer-2.7.2.dist-info}/top_level.txt +0 -0
GameSentenceMiner/config_gui.py
CHANGED
@@ -201,6 +201,7 @@ class ConfigApp:
|
|
201
201
|
show_screenshot_buttons=self.show_screenshot_button.get(),
|
202
202
|
multi_line_line_break=self.multi_line_line_break.get(),
|
203
203
|
multi_line_sentence_storage_field=self.multi_line_sentence_storage_field.get(),
|
204
|
+
ocr_sends_to_clipboard=self.ocr_sends_to_clipboard.get(),
|
204
205
|
),
|
205
206
|
ai=Ai(
|
206
207
|
enabled=self.ai_enabled.get(),
|
@@ -970,6 +971,12 @@ class ConfigApp:
|
|
970
971
|
self.multi_line_sentence_storage_field.grid(row=self.current_row, column=1)
|
971
972
|
self.add_label_and_increment_row(advanced_frame, "Field in Anki for storing the multi-line sentence temporarily.", row=self.current_row, column=2)
|
972
973
|
|
974
|
+
ttk.Label(advanced_frame, text="OCR Sends to Clipboard:").grid(row=self.current_row, column=0, sticky='W')
|
975
|
+
self.ocr_sends_to_clipboard = tk.BooleanVar(value=self.settings.advanced.ocr_sends_to_clipboard)
|
976
|
+
ttk.Checkbutton(advanced_frame, variable=self.ocr_sends_to_clipboard).grid(row=self.current_row, column=1, sticky='W')
|
977
|
+
self.add_label_and_increment_row(advanced_frame, "Enable to send OCR results to clipboard.", row=self.current_row, column=2)
|
978
|
+
|
979
|
+
|
973
980
|
|
974
981
|
@new_tab
|
975
982
|
def create_ai_tab(self):
|
@@ -0,0 +1,315 @@
|
|
1
|
+
import json
|
2
|
+
import os
|
3
|
+
from dataclasses import dataclass, field
|
4
|
+
from typing import List, Optional
|
5
|
+
from dataclasses_json import dataclass_json
|
6
|
+
|
7
|
+
from GameSentenceMiner.configuration import get_app_directory
|
8
|
+
|
9
|
+
|
10
|
+
@dataclass_json
|
11
|
+
@dataclass
|
12
|
+
class SteamGame:
|
13
|
+
id: int
|
14
|
+
name: str
|
15
|
+
processName: str
|
16
|
+
script: str
|
17
|
+
|
18
|
+
@dataclass_json
|
19
|
+
@dataclass
|
20
|
+
class YuzuConfig:
|
21
|
+
emuPath: str = "C:\\Emulation\\Emulators\\yuzu-windows-msvc\\yuzu.exe"
|
22
|
+
romsPath: str = "C:\\Emulation\\Yuzu\\Games"
|
23
|
+
launchGameOnStart: str = ""
|
24
|
+
lastGameLaunched: str = ""
|
25
|
+
|
26
|
+
@dataclass_json
|
27
|
+
@dataclass
|
28
|
+
class VNConfig:
|
29
|
+
vns: List[str] = field(default_factory=list)
|
30
|
+
textractorPath: str = ""
|
31
|
+
launchVNOnStart: str = ""
|
32
|
+
lastVNLaunched: str = ""
|
33
|
+
|
34
|
+
@dataclass_json
|
35
|
+
@dataclass
|
36
|
+
class SteamConfig:
|
37
|
+
steamPath: str = ""
|
38
|
+
steamGames: List[SteamGame] = field(default_factory=list)
|
39
|
+
launchSteamOnStart: int = 0
|
40
|
+
lastGameLaunched: int = 0
|
41
|
+
|
42
|
+
@dataclass_json
|
43
|
+
@dataclass
|
44
|
+
class OCRConfig:
|
45
|
+
twoPassOCR: bool = False
|
46
|
+
ocr1: str = "oneOCR"
|
47
|
+
ocr2: str = "glens"
|
48
|
+
window_name: str = ""
|
49
|
+
requiresOpenWindow: Optional[bool] = None
|
50
|
+
scanRate: Optional[float] = None
|
51
|
+
|
52
|
+
@dataclass_json
|
53
|
+
@dataclass
|
54
|
+
class StoreConfig:
|
55
|
+
yuzu: YuzuConfig = field(default_factory=YuzuConfig)
|
56
|
+
agentScriptsPath: str = "E:\\Japanese Stuff\\agent-v0.1.4-win32-x64\\data\\scripts"
|
57
|
+
textractorPath: str = "E:\\Japanese Stuff\\Textractor\\Textractor.exe"
|
58
|
+
startConsoleMinimized: bool = False
|
59
|
+
autoUpdateElectron: bool = True
|
60
|
+
autoUpdateGSMApp: bool = False
|
61
|
+
pythonPath: str = ""
|
62
|
+
VN: VNConfig = field(default_factory=VNConfig)
|
63
|
+
steam: SteamConfig = field(default_factory=SteamConfig)
|
64
|
+
agentPath: str = ""
|
65
|
+
OCR: OCRConfig = field(default_factory=OCRConfig)
|
66
|
+
|
67
|
+
class Store:
|
68
|
+
def __init__(self, config_path=os.path.join(get_app_directory(), "electron", "config.json"), defaults: Optional[StoreConfig] = None):
|
69
|
+
self.config_path = config_path
|
70
|
+
self.defaults = defaults if defaults is not None else StoreConfig()
|
71
|
+
self._load_config()
|
72
|
+
|
73
|
+
def _load_config(self):
|
74
|
+
if os.path.exists(self.config_path):
|
75
|
+
with open(self.config_path, 'r', encoding='utf-8') as f:
|
76
|
+
data = json.load(f)
|
77
|
+
self.data = StoreConfig.from_dict(data)
|
78
|
+
else:
|
79
|
+
self.data = self.defaults
|
80
|
+
self._save_config()
|
81
|
+
|
82
|
+
def _save_config(self):
|
83
|
+
with open(self.config_path, 'w', encoding='utf-8') as f:
|
84
|
+
json.dump(self.data.to_dict(), f, indent=4)
|
85
|
+
|
86
|
+
def get(self, key, default=None):
|
87
|
+
keys = key.split('.')
|
88
|
+
value = self.data
|
89
|
+
for k in keys:
|
90
|
+
if hasattr(value, '__dataclass_fields__') and k in value.__dataclass_fields__:
|
91
|
+
value = getattr(value, k)
|
92
|
+
else:
|
93
|
+
return default
|
94
|
+
return value
|
95
|
+
|
96
|
+
def set(self, key, value):
|
97
|
+
keys = key.split('.')
|
98
|
+
current = self.data
|
99
|
+
for i, k in enumerate(keys):
|
100
|
+
if i == len(keys) - 1:
|
101
|
+
setattr(current, k, value)
|
102
|
+
else:
|
103
|
+
if not hasattr(current, '__dataclass_fields__') or k not in current.__dataclass_fields__:
|
104
|
+
return # Key doesn't exist in the dataclass structure
|
105
|
+
if not hasattr(getattr(current, k), '__dataclass_fields__'):
|
106
|
+
setattr(current, k, object()) # Create a new object if it's not a dataclass instance yet
|
107
|
+
current = getattr(current, k)
|
108
|
+
self._save_config()
|
109
|
+
|
110
|
+
def delete(self, key):
|
111
|
+
keys = key.split('.')
|
112
|
+
if not keys:
|
113
|
+
return False
|
114
|
+
current = self.data
|
115
|
+
for i, k in enumerate(keys[:-1]):
|
116
|
+
if not hasattr(current, '__dataclass_fields__') or k not in current.__dataclass_fields__:
|
117
|
+
return False
|
118
|
+
current = getattr(current, k)
|
119
|
+
if hasattr(current, keys[-1]):
|
120
|
+
delattr(current, keys[-1])
|
121
|
+
self._save_config()
|
122
|
+
return True
|
123
|
+
return False
|
124
|
+
|
125
|
+
def print_store(self):
|
126
|
+
"""Prints the entire contents of the store in a readable JSON format."""
|
127
|
+
print(json.dumps(self.data.to_dict(), indent=4))
|
128
|
+
|
129
|
+
# Initialize the store
|
130
|
+
store = Store(config_path=os.path.join(get_app_directory(), "electron", "config.json"), defaults=StoreConfig())
|
131
|
+
|
132
|
+
# --- Convenience functions ---
|
133
|
+
|
134
|
+
def get_auto_update_gsm_app() -> bool:
|
135
|
+
return store.get("autoUpdateGSMApp")
|
136
|
+
|
137
|
+
def set_auto_update_gsm_app(auto_update: bool):
|
138
|
+
store.set("autoUpdateGSMApp", auto_update)
|
139
|
+
|
140
|
+
def get_auto_update_electron() -> bool:
|
141
|
+
return store.get("autoUpdateElectron")
|
142
|
+
|
143
|
+
def set_auto_update_electron(auto_update: bool):
|
144
|
+
store.set("autoUpdateElectron", auto_update)
|
145
|
+
|
146
|
+
def get_python_path() -> str:
|
147
|
+
return store.get("pythonPath")
|
148
|
+
|
149
|
+
def set_python_path(path: str):
|
150
|
+
store.set("pythonPath", path)
|
151
|
+
|
152
|
+
# OCR
|
153
|
+
|
154
|
+
def get_ocr_config() -> OCRConfig:
|
155
|
+
ocr_data = store.get("OCR")
|
156
|
+
return ocr_data if isinstance(ocr_data, OCRConfig) else OCRConfig.from_dict(ocr_data) if isinstance(ocr_data, dict) else OCRConfig()
|
157
|
+
|
158
|
+
def set_ocr_config(config: OCRConfig):
|
159
|
+
store.set("OCR", config)
|
160
|
+
|
161
|
+
def get_two_pass_ocr() -> bool:
|
162
|
+
return store.get("OCR.twoPassOCR")
|
163
|
+
|
164
|
+
def set_two_pass_ocr(two_pass: bool):
|
165
|
+
store.set("OCR.twoPassOCR", two_pass)
|
166
|
+
|
167
|
+
def get_ocr1() -> str:
|
168
|
+
return store.get("OCR.ocr1")
|
169
|
+
|
170
|
+
def set_ocr1(ocr: str):
|
171
|
+
store.set("OCR.ocr1", ocr)
|
172
|
+
|
173
|
+
def get_ocr2() -> str:
|
174
|
+
return store.get("OCR.ocr2")
|
175
|
+
|
176
|
+
def set_ocr2(ocr: str):
|
177
|
+
store.set("OCR.ocr2", ocr)
|
178
|
+
|
179
|
+
def get_window_name() -> str:
|
180
|
+
return store.get("OCR.window_name")
|
181
|
+
|
182
|
+
def set_window_name(name: str):
|
183
|
+
store.set("OCR.window_name", name)
|
184
|
+
|
185
|
+
def get_requires_open_window() -> Optional[bool]:
|
186
|
+
return store.get("OCR.requiresOpenWindow")
|
187
|
+
|
188
|
+
def set_requires_open_window(requires_open_window: Optional[bool]):
|
189
|
+
store.set("OCR.requiresOpenWindow", requires_open_window)
|
190
|
+
|
191
|
+
def get_ocr_scan_rate() -> Optional[int]:
|
192
|
+
return store.get("OCR.ocrScanRate")
|
193
|
+
|
194
|
+
def set_ocr_scan_rate(scan_rate: Optional[int]):
|
195
|
+
store.set("OCR.ocrScanRate", scan_rate)
|
196
|
+
|
197
|
+
# Yuzu config getters and setters
|
198
|
+
def get_yuzu_config() -> YuzuConfig:
|
199
|
+
yuzu_data = store.get('yuzu')
|
200
|
+
return yuzu_data if isinstance(yuzu_data, YuzuConfig) else YuzuConfig.from_dict(yuzu_data) if isinstance(yuzu_data, dict) else YuzuConfig()
|
201
|
+
|
202
|
+
def set_yuzu_config(config: YuzuConfig):
|
203
|
+
store.set('yuzu', config)
|
204
|
+
|
205
|
+
|
206
|
+
# Yuzu emulator path getters and setters
|
207
|
+
def get_yuzu_emu_path() -> str:
|
208
|
+
return store.get('yuzu.emuPath')
|
209
|
+
|
210
|
+
def set_yuzu_emu_path(path: str):
|
211
|
+
store.set('yuzu.emuPath', path)
|
212
|
+
|
213
|
+
# Yuzu ROMs path getters and setters
|
214
|
+
def get_yuzu_roms_path() -> str:
|
215
|
+
return store.get('yuzu.romsPath')
|
216
|
+
|
217
|
+
def set_yuzu_roms_path(path: str):
|
218
|
+
store.set('yuzu.romsPath', path)
|
219
|
+
|
220
|
+
def get_launch_yuzu_game_on_start() -> str:
|
221
|
+
return store.get("yuzu.launchGameOnStart")
|
222
|
+
|
223
|
+
def set_launch_yuzu_game_on_start(path: str):
|
224
|
+
store.set("yuzu.launchGameOnStart", path)
|
225
|
+
|
226
|
+
def get_last_yuzu_game_launched() -> str:
|
227
|
+
return store.get("yuzu.lastGameLaunched")
|
228
|
+
|
229
|
+
def set_last_yuzu_game_launched(path: str):
|
230
|
+
store.set("yuzu.lastGameLaunched", path)
|
231
|
+
|
232
|
+
# Agent scripts path getters and setters
|
233
|
+
def get_agent_scripts_path() -> str:
|
234
|
+
return store.get('agentScriptsPath')
|
235
|
+
|
236
|
+
def set_agent_scripts_path(path: str):
|
237
|
+
store.set('agentScriptsPath', path)
|
238
|
+
|
239
|
+
def set_agent_path(path: str):
|
240
|
+
store.set('agentPath', path)
|
241
|
+
|
242
|
+
def get_agent_path() -> str:
|
243
|
+
return store.get('agentPath')
|
244
|
+
|
245
|
+
def get_start_console_minimized() -> bool:
|
246
|
+
return store.get("startConsoleMinimized")
|
247
|
+
|
248
|
+
def set_start_console_minimized(should_minimize: bool):
|
249
|
+
store.set("startConsoleMinimized", should_minimize)
|
250
|
+
|
251
|
+
def get_vns() -> List[str]:
|
252
|
+
return store.get('VN.vns')
|
253
|
+
|
254
|
+
def set_vns(vns: List[str]):
|
255
|
+
store.set('VN.vns', vns)
|
256
|
+
|
257
|
+
def get_textractor_path() -> str:
|
258
|
+
return store.get("VN.textractorPath")
|
259
|
+
|
260
|
+
def set_textractor_path(path: str):
|
261
|
+
store.set("VN.textractorPath", path)
|
262
|
+
|
263
|
+
def get_launch_vn_on_start() -> str:
|
264
|
+
return store.get("VN.launchVNOnStart")
|
265
|
+
|
266
|
+
def set_launch_vn_on_start(vn: str):
|
267
|
+
store.set("VN.launchVNOnStart", vn)
|
268
|
+
|
269
|
+
def get_last_vn_launched() -> str:
|
270
|
+
return store.get("VN.lastVNLaunched")
|
271
|
+
|
272
|
+
def set_last_vn_launched(vn: str):
|
273
|
+
store.set("VN.lastVNLaunched", vn)
|
274
|
+
|
275
|
+
def get_steam_path() -> str:
|
276
|
+
return store.get('steam.steamPath')
|
277
|
+
|
278
|
+
def set_steam_path(path: str):
|
279
|
+
store.set('steam.steamPath', path)
|
280
|
+
|
281
|
+
def get_launch_steam_on_start() -> int:
|
282
|
+
return store.get('steam.launchSteamOnStart')
|
283
|
+
|
284
|
+
def set_launch_steam_on_start(game_id: int):
|
285
|
+
store.set('steam.launchSteamOnStart', game_id)
|
286
|
+
|
287
|
+
def get_last_steam_game_launched() -> int:
|
288
|
+
return store.get('steam.lastGameLaunched')
|
289
|
+
|
290
|
+
def set_last_steam_game_launched(game_id: int):
|
291
|
+
store.set('steam.lastGameLaunched', game_id)
|
292
|
+
|
293
|
+
def get_steam_games() -> List[SteamGame]:
|
294
|
+
steam_games_data = store.get('steam.steamGames')
|
295
|
+
return [SteamGame.from_dict(game_data) for game_data in steam_games_data] if isinstance(steam_games_data, list) else []
|
296
|
+
|
297
|
+
def set_steam_games(games: List[SteamGame]):
|
298
|
+
store.set('steam.steamGames', [game.to_dict() for game in games])
|
299
|
+
|
300
|
+
# if __name__ == "__main__":
|
301
|
+
# # Example usage:
|
302
|
+
# print(f"Initial Yuzu Emulator Path: {get_yuzu_emu_path()}")
|
303
|
+
# set_yuzu_emu_path("D:\\NewEmulators\\yuzu\\yuzu.exe")
|
304
|
+
# print(f"Updated Yuzu Emulator Path: {get_yuzu_emu_path()}")
|
305
|
+
#
|
306
|
+
# ocr_config = get_ocr_config()
|
307
|
+
# print(f"Initial Two-Pass OCR: {ocr_config.twoPassOCR}")
|
308
|
+
# set_two_pass_ocr(True)
|
309
|
+
# print(f"Updated Two-Pass OCR: {get_two_pass_ocr()}")
|
310
|
+
#
|
311
|
+
# steam_games = get_steam_games()
|
312
|
+
# print(f"Initial Steam Games: {[game.name for game in steam_games]}")
|
313
|
+
# new_games = [SteamGame(123, "Game One"), SteamGame(456, "Game Two")]
|
314
|
+
# set_steam_games(new_games)
|
315
|
+
# print(f"Updated Steam Games: {[game.name for game in get_steam_games()]}")
|
@@ -22,6 +22,7 @@ from GameSentenceMiner.configuration import get_config, get_app_directory
|
|
22
22
|
from GameSentenceMiner.gametext import get_line_history
|
23
23
|
from GameSentenceMiner.owocr.owocr import screen_coordinate_picker, run
|
24
24
|
from GameSentenceMiner.owocr.owocr.run import TextFiltering
|
25
|
+
from GameSentenceMiner.electron_config import store, get_ocr_scan_rate, get_requires_open_window
|
25
26
|
|
26
27
|
CONFIG_FILE = Path("ocr_config.json")
|
27
28
|
DEFAULT_IMAGE_PATH = r"C:\Users\Beangate\Pictures\msedge_acbl8GL7Ax.jpg" # CHANGE THIS
|
@@ -184,6 +185,9 @@ def text_callback(text, rectangle):
|
|
184
185
|
engine=ocr2)
|
185
186
|
if ":gsm_prefix:" in text:
|
186
187
|
text = text.split(":gsm_prefix:")[1]
|
188
|
+
if get_config().advanced.ocr_sends_to_clipboard:
|
189
|
+
import pyperclip
|
190
|
+
pyperclip.copy(text)
|
187
191
|
websocket_server_thread.send_text(text, line_time)
|
188
192
|
except json.JSONDecodeError:
|
189
193
|
print("Invalid JSON received.")
|
@@ -198,8 +202,8 @@ def run_oneocr(ocr_config, i):
|
|
198
202
|
run.run(read_from="screencapture", write_to="callback",
|
199
203
|
screen_capture_area=",".join(str(c) for c in ocr_config['rectangles'][i]) if ocr_config['rectangles'] else 'screen_1',
|
200
204
|
screen_capture_window=ocr_config.get("window", None),
|
201
|
-
screen_capture_only_active_windows=
|
202
|
-
screen_capture_delay_secs
|
205
|
+
screen_capture_only_active_windows=get_requires_open_window(),
|
206
|
+
screen_capture_delay_secs=get_ocr_scan_rate(), engine=ocr1,
|
203
207
|
text_callback=text_callback,
|
204
208
|
screen_capture_exclusions=ocr_config.get('excluded_rectangles', None),
|
205
209
|
rectangle=i)
|
@@ -782,6 +782,8 @@ def run(read_from=None,
|
|
782
782
|
else:
|
783
783
|
screencapture_mode = 2
|
784
784
|
screen_capture_window = screen_capture_area
|
785
|
+
if screen_capture_window:
|
786
|
+
screencapture_mode = 2
|
785
787
|
|
786
788
|
if screencapture_mode != 2:
|
787
789
|
sct = mss.mss()
|
@@ -815,6 +817,7 @@ def run(read_from=None,
|
|
815
817
|
|
816
818
|
sct_params = {'top': coord_top, 'left': coord_left, 'width': coord_width, 'height': coord_height}
|
817
819
|
logger.opt(ansi=True).info(f'Selected coordinates: {coord_left},{coord_top},{coord_width},{coord_height}')
|
820
|
+
custom_left, custom_top, custom_width, custom_height = [int(c.strip()) for c in screen_capture_area.split(',')]
|
818
821
|
if screencapture_mode == 2 or screen_capture_window:
|
819
822
|
area_invalid_error = '"screen_capture_area" must be empty, "screen_N" where N is a screen number starting from 1, a valid set of coordinates, or a valid window name'
|
820
823
|
if sys.platform == 'darwin':
|
@@ -1025,8 +1028,14 @@ def run(read_from=None,
|
|
1025
1028
|
except pywintypes.error:
|
1026
1029
|
on_window_closed(False)
|
1027
1030
|
break
|
1031
|
+
|
1032
|
+
rand = random.randint(1, 10)
|
1033
|
+
|
1028
1034
|
img = Image.frombuffer('RGB', (bmpinfo['bmWidth'], bmpinfo['bmHeight']), bmpstr, 'raw', 'BGRX', 0, 1)
|
1029
1035
|
|
1036
|
+
if custom_left:
|
1037
|
+
img = img.crop((custom_left, custom_top, custom_width, custom_height))
|
1038
|
+
|
1030
1039
|
win32gui.DeleteObject(save_bitmap.GetHandle())
|
1031
1040
|
save_dc.DeleteDC()
|
1032
1041
|
mfc_dc.DeleteDC()
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: GameSentenceMiner
|
3
|
-
Version: 2.7.
|
3
|
+
Version: 2.7.2
|
4
4
|
Summary: A tool for mining sentences from games. Update: Multi-Line Mining! Fixed!
|
5
5
|
Author-email: Beangate <bpwhelan95@gmail.com>
|
6
6
|
License: MIT License
|
@@ -117,6 +117,12 @@ setting it up.
|
|
117
117
|
|
118
118
|
If you run into issues ask in my [Discord](https://discord.gg/yP8Qse6bb8), or make an issue here.
|
119
119
|
|
120
|
+
## Acknowledgements
|
121
|
+
|
122
|
+
- [OwOCR](https://github.com/AuroraWright/owocr) for their amazing implementation of OCR that I was able to integrate into GSM.
|
123
|
+
- [chaiNNer](https://github.com/chaiNNer-org/chaiNNer) for the idea of installing python in an electron app.
|
124
|
+
- [OBS](https://obsproject.com/) and [FFMPEG](https://ffmpeg.org/), without these two, GSM would not be a thing.
|
125
|
+
|
120
126
|
## Donations
|
121
127
|
|
122
128
|
If you've benefited from this or any of my other projects, please consider supporting my work
|
@@ -1,7 +1,8 @@
|
|
1
1
|
GameSentenceMiner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
2
2
|
GameSentenceMiner/anki.py,sha256=9E9GRR2zylW3Gp4PNlwYS_Nn-mhojZkjFqfYlTazte8,14068
|
3
|
-
GameSentenceMiner/config_gui.py,sha256
|
4
|
-
GameSentenceMiner/configuration.py,sha256=
|
3
|
+
GameSentenceMiner/config_gui.py,sha256=-1PanqdtTKiwItxeyt0piXrWo7lGMWwrC4iSo4NiPz4,67521
|
4
|
+
GameSentenceMiner/configuration.py,sha256=TIL8yCr-FOScCA4OJt-BAtjEb50wtqFFrpmN-UlaQh4,20405
|
5
|
+
GameSentenceMiner/electron_config.py,sha256=7rVUakKj-pRNjqniyFnzY_g6A5PEPzfF0B_TrBU2PHY,9793
|
5
6
|
GameSentenceMiner/ffmpeg.py,sha256=iUj-1uLLJla6jjGDKuc1FbcXjMogYpoDhrQqCbQFcWA,13359
|
6
7
|
GameSentenceMiner/gametext.py,sha256=brybSe7hRy13JAUwuSs6WqOPFH6to0detbIPVhnkinA,9062
|
7
8
|
GameSentenceMiner/gsm.py,sha256=fcczDPDcC0vDLAPZtIY64mU3Di3RZjR40tuLIiwB5lE,24827
|
@@ -22,21 +23,21 @@ GameSentenceMiner/downloader/download_tools.py,sha256=mI1u_FGBmBqDIpCH3jOv8DOoZ3
|
|
22
23
|
GameSentenceMiner/ocr/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
23
24
|
GameSentenceMiner/ocr/ocrconfig.py,sha256=hTROOZ3On2HngXKxwQFZvnr5AxlmlMV0mPxv-F3NbMg,6476
|
24
25
|
GameSentenceMiner/ocr/owocr_area_selector.py,sha256=6MQPCSAhuyOSEDEgc-w6jVdsELjxstzI2Zhz0JBkG8g,11703
|
25
|
-
GameSentenceMiner/ocr/owocr_helper.py,sha256=
|
26
|
+
GameSentenceMiner/ocr/owocr_helper.py,sha256=e4WMFAl_tgE6AxofxghfrvisdZO3HmKa_3z-WmkdYYE,11798
|
26
27
|
GameSentenceMiner/owocr/owocr/__init__.py,sha256=opjBOyGGyEqZCE6YdZPnyt7nVfiwyELHsXA0jAsjm14,25
|
27
28
|
GameSentenceMiner/owocr/owocr/__main__.py,sha256=nkaZGTCZsPDKcej2O0S1SHkyzHJEboTUBc9izyGPvqw,92
|
28
29
|
GameSentenceMiner/owocr/owocr/config.py,sha256=738QCJHEWpFhMh966plOcXYWwcshSiRsxjjIwldeTtI,7461
|
29
30
|
GameSentenceMiner/owocr/owocr/lens_betterproto.py,sha256=oNoISsPilVVRBBPVDtb4-roJtAhp8ZAuFTci3TGXtMc,39141
|
30
31
|
GameSentenceMiner/owocr/owocr/ocr.py,sha256=d0uLAQotZ6xhUSWWEXW07c0-EYjeTmumHxIEsT01Iuo,36604
|
31
|
-
GameSentenceMiner/owocr/owocr/run.py,sha256=
|
32
|
+
GameSentenceMiner/owocr/owocr/run.py,sha256=S-eb8wFC-LQLiibHVORTyTKTuPaOM2Uj6awoJxGyInQ,46549
|
32
33
|
GameSentenceMiner/owocr/owocr/screen_coordinate_picker.py,sha256=f_YIV4-2OEZ21CAEZ_pbqeTb5D28PS82Tig4ZSnkY4Q,3096
|
33
34
|
GameSentenceMiner/vad/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
34
35
|
GameSentenceMiner/vad/silero_trim.py,sha256=ULf3zwS-JMsY82cKF7gZxREHw8L6lgpWF2U1YqgE9Oc,1681
|
35
36
|
GameSentenceMiner/vad/vosk_helper.py,sha256=125X8C9NxFPlWWpoNsbOnEqKx8RCjXN109zNx_QXhyg,6070
|
36
37
|
GameSentenceMiner/vad/whisper_helper.py,sha256=JJ-iltCh813XdjyEw0Wn5DaErf6PDqfH0Efu1Md8cIY,3543
|
37
|
-
gamesentenceminer-2.7.
|
38
|
-
gamesentenceminer-2.7.
|
39
|
-
gamesentenceminer-2.7.
|
40
|
-
gamesentenceminer-2.7.
|
41
|
-
gamesentenceminer-2.7.
|
42
|
-
gamesentenceminer-2.7.
|
38
|
+
gamesentenceminer-2.7.2.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
39
|
+
gamesentenceminer-2.7.2.dist-info/METADATA,sha256=D3qrfYnPtats3KZO_IMqRkrjltsv1d5Cv6MNcXhwvG8,5839
|
40
|
+
gamesentenceminer-2.7.2.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
|
41
|
+
gamesentenceminer-2.7.2.dist-info/entry_points.txt,sha256=2APEP25DbfjSxGeHtwBstMH8mulVhLkqF_b9bqzU6vQ,65
|
42
|
+
gamesentenceminer-2.7.2.dist-info/top_level.txt,sha256=V1hUY6xVSyUEohb0uDoN4UIE6rUZ_JYx8yMyPGX4PgQ,18
|
43
|
+
gamesentenceminer-2.7.2.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|