flowocr 0.1.0__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.
Files changed (91) hide show
  1. flowocr/__init__.py +15 -0
  2. flowocr/analyze/__init__.py +8 -0
  3. flowocr/analyze/align.py +151 -0
  4. flowocr/analyze/build_tracks.py +2886 -0
  5. flowocr/analyze/cluster_layers.py +155 -0
  6. flowocr/analyze/game_align.py +652 -0
  7. flowocr/analyze/gamescript.py +1220 -0
  8. flowocr/analyze/gtdbundle.py +306 -0
  9. flowocr/analyze/match.py +67 -0
  10. flowocr/analyze/matchers/__init__.py +5 -0
  11. flowocr/analyze/matchers/gametext.py +70 -0
  12. flowocr/analyze/merge_nameplate.py +178 -0
  13. flowocr/analyze/models/slot_pair.json +148 -0
  14. flowocr/analyze/nameplate.py +148 -0
  15. flowocr/analyze/pair_features.py +168 -0
  16. flowocr/analyze/pair_model.py +127 -0
  17. flowocr/analyze/refine_boundaries.py +409 -0
  18. flowocr/analyze/script_align.py +641 -0
  19. flowocr/analyze/scriptmatch.py +1018 -0
  20. flowocr/analyze/slot_learned.py +306 -0
  21. flowocr/analyze/slot_lines.py +251 -0
  22. flowocr/analyze/slot_modes.py +143 -0
  23. flowocr/analyze/slot_pairs.py +562 -0
  24. flowocr/analyze/slot_veto.py +104 -0
  25. flowocr/analyze/uigate.py +351 -0
  26. flowocr/artifacts/__init__.py +5 -0
  27. flowocr/artifacts/evalkit.py +123 -0
  28. flowocr/artifacts/matchedio.py +75 -0
  29. flowocr/artifacts/srtio.py +166 -0
  30. flowocr/artifacts/tracksio.py +345 -0
  31. flowocr/extensions.py +77 -0
  32. flowocr/extract/__init__.py +8 -0
  33. flowocr/extract/childproc.py +118 -0
  34. flowocr/extract/decode_proc.py +511 -0
  35. flowocr/extract/decode_shards.py +574 -0
  36. flowocr/extract/detpost.py +215 -0
  37. flowocr/extract/edge_proc.py +314 -0
  38. flowocr/extract/edge_refine.py +598 -0
  39. flowocr/extract/fast_det.py +214 -0
  40. flowocr/extract/ffcheck.py +87 -0
  41. flowocr/extract/framegrid.py +265 -0
  42. flowocr/extract/framesource.py +1264 -0
  43. flowocr/extract/ocr_args.py +754 -0
  44. flowocr/extract/ocr_complete.py +231 -0
  45. flowocr/extract/ocr_parallel.py +208 -0
  46. flowocr/extract/ort_server.py +632 -0
  47. flowocr/extract/ortclient.py +363 -0
  48. flowocr/extract/ptsclock.py +150 -0
  49. flowocr/extract/recdecode.py +78 -0
  50. flowocr/extract/recort.py +162 -0
  51. flowocr/extract/recpack.py +94 -0
  52. flowocr/extract/recpool.py +206 -0
  53. flowocr/extract/recprep.py +71 -0
  54. flowocr/extract/refine_video.py +271 -0
  55. flowocr/extract/regions.py +387 -0
  56. flowocr/extract/reuse_v2.py +593 -0
  57. flowocr/extract/run_groups.py +247 -0
  58. flowocr/extract/run_ocr2.py +1605 -0
  59. flowocr/extract/supervisor.py +261 -0
  60. flowocr/extract/timeline.py +84 -0
  61. flowocr/extract/typewriter_fuse.py +394 -0
  62. flowocr/models.py +263 -0
  63. flowocr/output/__init__.py +3 -0
  64. flowocr/output/export.py +205 -0
  65. flowocr/output/layout.py +210 -0
  66. flowocr/output/presets/__init__.py +6 -0
  67. flowocr/output/presets/_overlay.py +40 -0
  68. flowocr/output/presets/default.py +21 -0
  69. flowocr/output/presets/default_all.py +20 -0
  70. flowocr/output/presets/dev.py +21 -0
  71. flowocr/output/presets/matched_srt.py +32 -0
  72. flowocr/output/presets/script.py +20 -0
  73. flowocr/output/presets/srt_main.py +33 -0
  74. flowocr/output/render.py +82 -0
  75. flowocr/output/run_srt.py +83 -0
  76. flowocr/output/script.py +541 -0
  77. flowocr/paths.py +168 -0
  78. flowocr/provenance.py +119 -0
  79. flowocr/typeset/__init__.py +9 -0
  80. flowocr/typeset/__main__.py +38 -0
  81. flowocr/typeset/assfile.py +216 -0
  82. flowocr/typeset/core.py +821 -0
  83. flowocr/typeset/fx/__init__.py +11 -0
  84. flowocr-0.1.0.dist-info/METADATA +109 -0
  85. flowocr-0.1.0.dist-info/RECORD +91 -0
  86. flowocr-0.1.0.dist-info/WHEEL +5 -0
  87. flowocr-0.1.0.dist-info/entry_points.txt +10 -0
  88. flowocr-0.1.0.dist-info/licenses/LICENSE +674 -0
  89. flowocr-0.1.0.dist-info/licenses/LICENSES/Apache-2.0.txt +201 -0
  90. flowocr-0.1.0.dist-info/licenses/LICENSES/PP-OCRv6-NOTICE.md +18 -0
  91. flowocr-0.1.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,11 @@
1
+ """阶段 4 的扩展效果(`flowocr.extensions` 的 `fx` 种类)放这里的是内置的;现在没有,底板、编号、逐字显出在 `core` 里。
2
+
3
+ 一个效果模块:
4
+
5
+ * `NAME`:它在字幕稿 Effect 字段 `fo:…` 里的参数名,源行带了这个参数才调它;
6
+ * `elements(line, value) -> list[core.Element]`(可选):第 2 步,读排好版的 `core.Line`(只读),加元素;
7
+ * `tags(line, value, element) -> None`(可选):第 4 步,改每个元素的 tag(`element.tail` / `element.tail2` / `element.body`);
8
+ 在动的行按轨迹拆成几段时,每一段的元素定稿之后各调一次。
9
+
10
+ 两个挂点至少有一个。元素的位置按条目框左上角排,第 3 步和底板、正文一起按轨迹走。例子见 `examples/fx_minimal.py`。
11
+ """
@@ -0,0 +1,109 @@
1
+ Metadata-Version: 2.4
2
+ Name: flowocr
3
+ Version: 0.1.0
4
+ Summary: 从视频里抽全部屏幕文字、带起止时间、按区域聚类,导出 SRT / ASS
5
+ Author: caca2331
6
+ License-Expression: GPL-3.0-or-later
7
+ Project-URL: Homepage, https://github.com/caca2331/FlowOCR
8
+ Project-URL: Documentation, https://github.com/caca2331/FlowOCR/blob/main/docs/manual/README.md
9
+ Project-URL: Issues, https://github.com/caca2331/FlowOCR/issues
10
+ Project-URL: Changelog, https://github.com/caca2331/FlowOCR/blob/main/CHANGELOG.md
11
+ Keywords: ocr,subtitle,video,srt,ass,onnxruntime
12
+ Classifier: Development Status :: 3 - Alpha
13
+ Classifier: Environment :: Console
14
+ Classifier: Environment :: GPU :: NVIDIA CUDA
15
+ Classifier: Intended Audience :: End Users/Desktop
16
+ Classifier: Natural Language :: Chinese (Simplified)
17
+ Classifier: Operating System :: Microsoft :: Windows
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Topic :: Multimedia :: Video
20
+ Classifier: Topic :: Scientific/Engineering :: Image Recognition
21
+ Requires-Python: <3.13,>=3.12
22
+ Description-Content-Type: text/markdown
23
+ License-File: LICENSE
24
+ License-File: LICENSES/Apache-2.0.txt
25
+ License-File: LICENSES/PP-OCRv6-NOTICE.md
26
+ Requires-Dist: numpy<3,>=2.3
27
+ Requires-Dist: opencv-contrib-python<4.11,>=4.10
28
+ Requires-Dist: pillow>=10
29
+ Requires-Dist: psutil>=6
30
+ Requires-Dist: pyclipper>=1.3
31
+ Requires-Dist: pyyaml>=6
32
+ Requires-Dist: zstandard>=0.22
33
+ Provides-Extra: nvidia
34
+ Requires-Dist: onnxruntime-gpu[cuda,cudnn]==1.29.0; extra == "nvidia"
35
+ Requires-Dist: onnx>=1.17; extra == "nvidia"
36
+ Requires-Dist: nvidia-cuda-runtime==13.0.88; extra == "nvidia"
37
+ Requires-Dist: nvidia-cudnn-cu13==9.13.0.50; extra == "nvidia"
38
+ Requires-Dist: nvidia-cublas==13.0.2.14; extra == "nvidia"
39
+ Requires-Dist: nvidia-cufft==12.0.0.61; extra == "nvidia"
40
+ Requires-Dist: nvidia-curand==10.4.0.35; extra == "nvidia"
41
+ Requires-Dist: nvidia-cuda-nvrtc==13.0.*; extra == "nvidia"
42
+ Requires-Dist: nvidia-nvjitlink==13.0.88; extra == "nvidia"
43
+ Provides-Extra: cpu
44
+ Requires-Dist: onnxruntime==1.29.0; extra == "cpu"
45
+ Requires-Dist: onnx>=1.17; extra == "cpu"
46
+ Provides-Extra: learned
47
+ Requires-Dist: scikit-learn>=1.5; extra == "learned"
48
+ Dynamic: license-file
49
+
50
+ # flowocr
51
+
52
+ 把视频里**出现过的所有文字**读出来——不只是底部字幕,还有对话框、名牌、画面上的标注——每条带起止时间(精确到帧),
53
+ 并按位置自动分成若干条"文字轨"(对白、字幕、界面、水印……)。产物是 SRT,或叠加在原画面上、每条字留在原位的 ASS 字幕。
54
+
55
+ ## 用来做什么
56
+
57
+ - **画面文字翻译**:画面各处的文字都读出来、按位置分好轨;在字幕稿里把原文改成译文,叠加时每条译文留在它原来的位置上。
58
+ - **字幕与原文对齐**:游戏、影视常常能找到原文剧本。把读到的字幕对上原文,拿到准确的文本和时间轴,用来做翻译字幕。
59
+ 原神、崩坏:星穹铁道、绝区零有现成的提取工具,按它的说明自己打出文本包(见[相关项目](https://github.com/caca2331/FlowOCR#相关项目))。
60
+
61
+ ## 能读什么、在哪跑
62
+
63
+ - **文字**:识别模型是 PaddlePaddle 的 PP-OCRv6(官方称支持约 50 种语言)。实际验证过的是日文(几十小时实况录像和四款游戏的直播录像)与简体中文;
64
+ 英文只做过零星试跑;竖排文字没测过。
65
+ - **系统**:Windows 10 / 11。有 NVIDIA 显卡时走显卡;没有也能跑,用 CPU,慢一到两个数量级。
66
+ - 另要 [ffmpeg](https://ffmpeg.org/)(完整构建)。
67
+
68
+ ## 快速开始
69
+
70
+ 要先装 [uv](https://docs.astral.sh/uv/) 和完整版 [ffmpeg](https://ffmpeg.org/);从源码装、参数和产物说明都在 [使用手册](https://github.com/caca2331/FlowOCR/blob/main/docs/manual/README.md)。
71
+
72
+ ```powershell
73
+ uv tool install "flowocr[nvidia]" # 没有 NVIDIA 显卡用 "flowocr[cpu]"
74
+ uv tool update-shell # 第一次用 uv tool 时,然后重开终端
75
+ ```
76
+
77
+ 有原文剧本时,推荐**开启匹配器,使用默认配置,先做到阶段 3 的字幕稿**;导入 [Aegisub](https://aegisub.org/) 并加载视频,检查文字、时间和位置,改好保存后再跑阶段 4 渲染特效。
78
+ 下面以星穹铁道为例,先按 [game-text-data](https://github.com/caca2331/game-text-data) 的说明准备文本包,放进 `gametext\`:
79
+
80
+ ```powershell
81
+ flowocr-ocr video.mp4 --out out\v\v.jsonl # 阶段 1:读字
82
+ flowocr-gamescript out\v\v.jsonl --out out\v\v-ref.json --game starrail
83
+ flowocr-tracks out\v\v.jsonl --outdir out\v --tag v --matcher gametext --matcher-ctx game=starrail
84
+ flowocr-match out\v\v-tracks.json --matcher gametext --ctx ref=out\v\v-ref.json --out out\v\v-matched.json
85
+ flowocr-render out\v\v-matched.json --preset script # 阶段 3:只写 v-jp-main.script.ass,默认保留正文与名牌
86
+ ```
87
+
88
+ 在 Aegisub 中检查并保存 `out\v\v-jp-main.script.ass`,然后用 `default` 预设出特效字幕:
89
+
90
+ ```powershell
91
+ flowocr-typeset out\v\v-jp-main.script.ass --preset default # 阶段 4:写 v-jp-main.ass
92
+ ```
93
+
94
+ 原神 / 绝区零把 `starrail` 换成 `genshin` / `zzz`;没有剧本时省略剧本提取与匹配,用 `flowocr-tracks` 不带匹配参数建轨,再对 `v-tracks.json` 运行阶段 3,字幕稿为 `v-main.script.ass`。
95
+
96
+ ## 相关项目
97
+
98
+ - [game-text-data](https://github.com/caca2331/game-text-data):从原神、崩坏:星穹铁道、绝区零的社区解包数据里提取对白文本(中日英对齐),
99
+ 打成 flowocr 能直接读的文本包。它只公开提取代码,文本本身不分发——要用的话按它的说明自己打包。
100
+
101
+ ## 问题与参与
102
+
103
+ - 用起来有问题、或者在别的显卡 / 机器上跑出了结果,欢迎开 [issue](https://github.com/caca2331/FlowOCR/issues)。
104
+ - Pull request 请以 `main` 为目标。开发环境、代码结构和验证方法见 [开发指南](https://github.com/caca2331/FlowOCR/blob/main/docs/dev-guide/README.md),全部文档见 [文档地图](https://github.com/caca2331/FlowOCR/blob/main/docs/README.md)。
105
+ - 版本变化见 [CHANGELOG](https://github.com/caca2331/FlowOCR/blob/main/CHANGELOG.md)。
106
+
107
+ ## 许可
108
+
109
+ GPL-3.0-or-later,全文见 [LICENSE](https://github.com/caca2331/FlowOCR/blob/main/LICENSE)。识别用的 PP-OCRv6 模型由 PaddlePaddle 以 Apache-2.0 发布,来源与我们的改动见 [LICENSES/](https://github.com/caca2331/FlowOCR/blob/main/LICENSES/PP-OCRv6-NOTICE.md)。
@@ -0,0 +1,91 @@
1
+ flowocr/__init__.py,sha256=f48OWGLkK90ugd-brJbVzhRF_amXYX7MKUGvrzJ2MKI,724
2
+ flowocr/extensions.py,sha256=QuKZ_RYJy4ImIxM68wcvDpFavXLZcwJJwUfY5kNxji0,4525
3
+ flowocr/models.py,sha256=6ZBIYDeuCpRnnTjNy2ciRXhwi954xw90W59kYIcXFFU,13220
4
+ flowocr/paths.py,sha256=KEQu9Vu8O_jnVt6EQ75hqm3iOsSd5zw0OEqUIM1sLLk,8207
5
+ flowocr/provenance.py,sha256=p0LOFhDKuXsN_BtINEtcKyVdniNqZUsrFkFAgyDSFio,6409
6
+ flowocr/analyze/__init__.py,sha256=RKRJu7avF0Se-zr9ABTjZKdpt-8U6AkrgGTxXppWQPY,685
7
+ flowocr/analyze/align.py,sha256=L7ftPboNWVy6s70Sr-liALotjRYk-aY4XUufZF8VqDM,7130
8
+ flowocr/analyze/build_tracks.py,sha256=Tw3UrrvBElCcoqwAHsn6WsFesAvJwpND0DaJdvplGk8,175585
9
+ flowocr/analyze/cluster_layers.py,sha256=3ScPZPSry0yVnZj_1fzou7-8yd_hgPbYyqMiCgjNZS0,8355
10
+ flowocr/analyze/game_align.py,sha256=0WnyNjWtu_Kv3vpJ0Bw__zegVy3qWa9t59gqu7TE4hk,38328
11
+ flowocr/analyze/gamescript.py,sha256=vThdRXKANJsW2Rayo7CnzegZwLz-gPLwSvIz-ZmVAHs,70852
12
+ flowocr/analyze/gtdbundle.py,sha256=xJYb5lgXkuBfc6NXnYSeXd18gT899zUnb7zXvjA4yQY,15938
13
+ flowocr/analyze/match.py,sha256=VkGHLjoyxdMkOz7pAJq7QgKo7y4zV_J1Lphqxu2JbFs,3409
14
+ flowocr/analyze/merge_nameplate.py,sha256=zzwAzTE7yLcpvEq3ixjgTbq57x0qmjmQt1H0JetjG7o,10616
15
+ flowocr/analyze/nameplate.py,sha256=rhu-0A3UhEDN2UlebPP01McJt2yzp0hPfeg5R02EYo0,8770
16
+ flowocr/analyze/pair_features.py,sha256=V3iRzTqleGtNyJ3FMzm2c-V8MLhjIBN9LS-RUgwZKl0,9497
17
+ flowocr/analyze/pair_model.py,sha256=edNpENP0dptE0xCYKk0BOOpNDiSUPTAZwCgPq6Ks1qs,6283
18
+ flowocr/analyze/refine_boundaries.py,sha256=QBUDqUOGMEz31cR-ix7nSu8CAwZSoKq2ZywfTWrgBcw,26983
19
+ flowocr/analyze/script_align.py,sha256=MehyccUNK4CBWyWKvgWs1iathIkGTN_Wu5gDFV7VUr4,35752
20
+ flowocr/analyze/scriptmatch.py,sha256=0-ep_44ChqNlloCrH9RF4xsEHOJ6L0-6-zOcIrgfVhc,66663
21
+ flowocr/analyze/slot_learned.py,sha256=jApWHIOFCQ8Jx0F-hOPXBZ9KNKjwqZfdXWZITFpKy68,16956
22
+ flowocr/analyze/slot_lines.py,sha256=CL4v0Dq_P3-qlMx2CZ958UscplBz8wUryl3sLJSmd60,12460
23
+ flowocr/analyze/slot_modes.py,sha256=k4ewdF8CZnhjiprG_dPnvBJSf7XONbo3hhw_dSmq47Q,7278
24
+ flowocr/analyze/slot_pairs.py,sha256=SB8Bj1ZlybOzAZ89wydiZuWNlcwlnICMnU6HhHrljfk,29368
25
+ flowocr/analyze/slot_veto.py,sha256=wwfr2_rx9oKJBVIAqNy2XrnkJqgKl33fN9Y65UeBZ1A,5076
26
+ flowocr/analyze/uigate.py,sha256=BlHMs4KWByCm0HFrVvXVr5Iy-O5qgTmrovpkjZMAZFs,19702
27
+ flowocr/analyze/matchers/__init__.py,sha256=hGA8eY5evGerDpc_ck62sHr0Rm4CeLn-nZDD8cWpBRc,339
28
+ flowocr/analyze/matchers/gametext.py,sha256=jW2IZH_ZVxclodhvdyqWuauUjsdz7tMat5DqjZ_-ArA,4219
29
+ flowocr/analyze/models/slot_pair.json,sha256=N0pmuQLDvsJi_vvzUhmVcdeUXiZagCdN6kWb0hbsRx8,2938
30
+ flowocr/artifacts/__init__.py,sha256=WbhFG7HwdIQNkRF9pKK3Trd3G4P_55QNFSUeEWmxC64,320
31
+ flowocr/artifacts/evalkit.py,sha256=ZWJQPuYeGyeJn1J--CCgTLVV7OTYNNgKFJiWM04BweU,5251
32
+ flowocr/artifacts/matchedio.py,sha256=wdxEgYMSxSXZ3_zh4tkiJmBs2j2zexlj7qqXPDLzhgk,4483
33
+ flowocr/artifacts/srtio.py,sha256=Hb0V5llnjn7v1tCkQ6_pH4AMraqWog70UgWbSfLur-Q,6766
34
+ flowocr/artifacts/tracksio.py,sha256=6HExInREfnqYwrl9yO8D9DJyBp5ElWiss2IIei9YW1A,19571
35
+ flowocr/extract/__init__.py,sha256=QaDUPc42_jEZ0AtPPUL92nrHSpoMYkojqnR90wweJzo,736
36
+ flowocr/extract/childproc.py,sha256=446Vb-9yqsCHOYCmsvvUepddaEx1d-9pzJjcsnFacTI,5071
37
+ flowocr/extract/decode_proc.py,sha256=W149NjXoan9FhmHrOjlhlf33Nro0-z6weJcF2zuWmTE,22498
38
+ flowocr/extract/decode_shards.py,sha256=eb4VCdCgTQtAbnyRNv48ZbMEFjhQc2KOQEeWxyDk8PQ,30803
39
+ flowocr/extract/detpost.py,sha256=kVW47kliUtIdx13TWEFXW0ZtWbuq_IQF_pEoa0KMuJk,11871
40
+ flowocr/extract/edge_proc.py,sha256=yzXMagPGyLW36_3R-FId2WULpA9d1UNAfPJvpFCKovs,15740
41
+ flowocr/extract/edge_refine.py,sha256=uwKb5IxtRaBsqr5GiQxclFBsYA8rKt089b-By1auIWA,37057
42
+ flowocr/extract/fast_det.py,sha256=VlUWr7l1VdW_y0HWuNS5N3FCRU_YASk7WvPMv9HYV-E,11819
43
+ flowocr/extract/ffcheck.py,sha256=Js_1FeVEse3pUmXa61rUhPXpaldH9CSECofxIbtGFLc,4771
44
+ flowocr/extract/framegrid.py,sha256=pa1LFKi0QKXIN8Shemy6wSZ7DeFYADM_A3b49spuJ4k,12930
45
+ flowocr/extract/framesource.py,sha256=lI_ZefIAeMX5GZ7Fwn6ejLEEvUEb_7jBNLndYz1n8i0,73546
46
+ flowocr/extract/ocr_args.py,sha256=LhB0q9up6CbR_epUAbfJ_AXbBfKYMbkUy08XEfzDgPc,70143
47
+ flowocr/extract/ocr_complete.py,sha256=FMqSzRjQ1LBtHpx8WXGNjNzMDNtmBfhQ8fLGYYi06pc,14486
48
+ flowocr/extract/ocr_parallel.py,sha256=TPGSk1l1qdq6le3HGnjhny-JW1wppx2abulqK3D9eJE,12326
49
+ flowocr/extract/ort_server.py,sha256=wyO0mNUiCTSKPKoygJ38WCiW6MyENV26Ux_CrA4jmDY,38945
50
+ flowocr/extract/ortclient.py,sha256=7Suc2VO8zFalkRUT1D2bOrb8ygGxhMpS27FW1MAX5KA,20461
51
+ flowocr/extract/ptsclock.py,sha256=EAA0sE1aP6q54QVJa0zMZHXDej2IQ-_YsDokFYxLiYI,7015
52
+ flowocr/extract/recdecode.py,sha256=CwyQgLLhXTyULQ9dOdiXJzNYSMjWAf3kOa35gJgFv3A,4162
53
+ flowocr/extract/recort.py,sha256=bCWlmrmb7r6Vi62jZLmI1DUH34BBxY2JxIGK0B4WPjk,9515
54
+ flowocr/extract/recpack.py,sha256=tNmYUCGU-txQJs_SvzzyVpT6Flgbcs5itywnoDj-h0E,5155
55
+ flowocr/extract/recpool.py,sha256=umaSGguVDBhlDyzAkiWP-qwIJBageB5FwhsBSyfViRk,12235
56
+ flowocr/extract/recprep.py,sha256=2F6hyFLTGkiEr9iW0ZlRqbJCcIw-tGqQvK87-ZNN6xw,4203
57
+ flowocr/extract/refine_video.py,sha256=7WAG_zblD3nImhruSfhuj1bJRBTEp6qhysWiDFT4wWY,15274
58
+ flowocr/extract/regions.py,sha256=xwPcrJOxGyLtLML5Ygd_ajK2sPxemptp3KbrDZVdft0,19726
59
+ flowocr/extract/reuse_v2.py,sha256=3e8IH6R7mwN2UsxGjQilSunjo9wcmAS53g2iOa6M998,39729
60
+ flowocr/extract/run_groups.py,sha256=DS8qhnfO25CGrYpkFeQWszRmFMtCKGb_AsDQUZes84E,14263
61
+ flowocr/extract/run_ocr2.py,sha256=4qhDn-S6fZLLF6k1vhV3u3-0IQYcVZ68X6x4hrw-kZ8,99403
62
+ flowocr/extract/supervisor.py,sha256=ysWssXJ6qiUnr6N74GY1_iJUqtv3wNro5e9XoXlECP8,14722
63
+ flowocr/extract/timeline.py,sha256=wu3aKP4asz6mEmLjMUNOTcpB7MTTMesAqDVUYIEvWyc,3559
64
+ flowocr/extract/typewriter_fuse.py,sha256=BLvffQFT2hEDoKky-tpUyxjQyvXl3GMUCFBF-7G6CIU,21447
65
+ flowocr/output/__init__.py,sha256=z_o5eIKOKcmsHLcCACjdhko1tu_ZMaeKs8S6nJ_xTNc,260
66
+ flowocr/output/export.py,sha256=jSU2nr78SqecuU8ibm9XdI2c3tWqs9hqjm3u62bCVIQ,11410
67
+ flowocr/output/layout.py,sha256=-ZygdiZuhI3H5i1t7P6A0WO8sILy-Z45sbOkmFxDxZ8,11565
68
+ flowocr/output/render.py,sha256=VEZSVmNKjKgC4qOhTJ7JZca-OC7fmER-Jqf5qGSNb-w,4249
69
+ flowocr/output/run_srt.py,sha256=MsyvobmSa3Lx1lWcWVc1ivMUnAKkt5TjADNS0La3Gok,5422
70
+ flowocr/output/script.py,sha256=PjyYKRh3DlKD0sssR3n3EBXuPXdj8MI2GBDKei8t4r8,32831
71
+ flowocr/output/presets/__init__.py,sha256=OpUnVz9lC7Bqo0RuLHX8xeKuN-oq7K9ok1K79Top0VI,554
72
+ flowocr/output/presets/_overlay.py,sha256=STfWp-VDxhYcVlk7WleKQAKw_vEqeXjp1YWDcoAszvk,2464
73
+ flowocr/output/presets/default.py,sha256=fVgLXif1EUKkwx5DPHRp4Ti1nFpOEJt2U9_L9DQlqSU,1131
74
+ flowocr/output/presets/default_all.py,sha256=XsJt1QmIrc9Phsphx8kAV00Vj5cTo1lpnshP4Ey54sQ,1059
75
+ flowocr/output/presets/dev.py,sha256=929xEFWf-ksoR_1iGAwAaQNHGzhYNXoNy1LgkthSzT4,1258
76
+ flowocr/output/presets/matched_srt.py,sha256=YBRuT53yT3LVIOJkBQUiEN5I8W-TGKN6MGTcE7Mq5Rk,1518
77
+ flowocr/output/presets/script.py,sha256=L3lEebYV_m1IxreKuhvlC9apxsNQ413VMGlr86eUWC8,887
78
+ flowocr/output/presets/srt_main.py,sha256=LsSSgPdNvm6MuW3R0_o29R6wEVD-j7_rxe6JJHwnsRo,1496
79
+ flowocr/typeset/__init__.py,sha256=j9-IU-MlM-iZRMcLcRmx_vbIMha5dybww6FYfmRZxl0,706
80
+ flowocr/typeset/__main__.py,sha256=sF72uIKK0IHpP9yVjIM9cfJfRK4qktErvrky8MbXg1E,2002
81
+ flowocr/typeset/assfile.py,sha256=A6d7Kf4XyIUpeoBligqyq6AF3SlAxW2flEGuzBDkRMA,7747
82
+ flowocr/typeset/core.py,sha256=tUILsAmpUSkanHK4wdqU0eVXzb3e2VPs-EIODUH6X_g,43118
83
+ flowocr/typeset/fx/__init__.py,sha256=tijDwWseNnsChI-lJpOO07HUqBLzIvhgM-RWY7H_vV0,813
84
+ flowocr-0.1.0.dist-info/licenses/LICENSE,sha256=jOtLnuWt7d5Hsx6XXB2QxzrSe2sWWh3NgMfFRetluQM,35147
85
+ flowocr-0.1.0.dist-info/licenses/LICENSES/Apache-2.0.txt,sha256=OEDFwMYcKUJk0t13uHd75t3ZASHvTg5kq80i7epYHW4,11376
86
+ flowocr-0.1.0.dist-info/licenses/LICENSES/PP-OCRv6-NOTICE.md,sha256=OuR6CjbgXkEQT_WXnN4Q760xTBDa-LP104Tg3AC8wJ8,1421
87
+ flowocr-0.1.0.dist-info/METADATA,sha256=0mdu5Xvx_yjvvQgIMuujW7lSC0RqEPpEBni8vJQreHU,6570
88
+ flowocr-0.1.0.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
89
+ flowocr-0.1.0.dist-info/entry_points.txt,sha256=6zYakPBGYRVLvxCau1ZXkQBJbtermYXfIxFHHLN3OGk,419
90
+ flowocr-0.1.0.dist-info/top_level.txt,sha256=0gpG_kfItuR_W6q9upEGO6spFGn5sDmX9E_1ESUCjfA,8
91
+ flowocr-0.1.0.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (84.0.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,10 @@
1
+ [console_scripts]
2
+ flowocr-export = flowocr.output.export:main
3
+ flowocr-gamescript = flowocr.analyze.gamescript:main
4
+ flowocr-match = flowocr.analyze.match:main
5
+ flowocr-models = flowocr.models:main
6
+ flowocr-ocr = flowocr.extract.supervisor:main
7
+ flowocr-paths = flowocr.paths:main
8
+ flowocr-render = flowocr.output.render:main
9
+ flowocr-tracks = flowocr.analyze.build_tracks:main
10
+ flowocr-typeset = flowocr.typeset.__main__:main