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.
@@ -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):
@@ -177,6 +177,7 @@ class Advanced:
177
177
  show_screenshot_buttons: bool = False
178
178
  multi_line_line_break: str = '<br>'
179
179
  multi_line_sentence_storage_field: str = ''
180
+ ocr_sends_to_clipboard: bool = True
180
181
 
181
182
  @dataclass_json
182
183
  @dataclass
@@ -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=True if ocr_config.get("window", None) else False,
202
- screen_capture_delay_secs=.25, engine=ocr1,
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.0
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=AifBgNaeWcBhuFoQz8QJ4srM1Ck8KjHmnOmI-aRcFHg,66965
4
- GameSentenceMiner/configuration.py,sha256=a1-McjdgQN_EemhDRFZBeGGoviAWyrhejXjXYGl-MFg,20365
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=Rlv_jIyCNSP1-Im-8e49nQYx3bVXsxl7Qp4KaNGMYfk,11577
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=b6a7AjQBqeNNoHC9CwN2f_KvaSJBfUQvpSBW8z5AcIo,46156
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.0.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
38
- gamesentenceminer-2.7.0.dist-info/METADATA,sha256=ZCHouoQWG1EnISuEo3_KLs_aKoQl45sxjXuUo_JLBzA,5467
39
- gamesentenceminer-2.7.0.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
40
- gamesentenceminer-2.7.0.dist-info/entry_points.txt,sha256=2APEP25DbfjSxGeHtwBstMH8mulVhLkqF_b9bqzU6vQ,65
41
- gamesentenceminer-2.7.0.dist-info/top_level.txt,sha256=V1hUY6xVSyUEohb0uDoN4UIE6rUZ_JYx8yMyPGX4PgQ,18
42
- gamesentenceminer-2.7.0.dist-info/RECORD,,
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,,