Forwarded from dnaugsuz
https://github.com/lars76/chinese-subtitle-ocr
找到了个更好的,不必再岔出去写什么 GUI 了……
找到了个更好的,不必再岔出去写什么 GUI 了……
GitHub
GitHub - lars76/chinese-subtitle-ocr: Optical character recognition for Chinese subtitles using SSD and CNN
Optical character recognition for Chinese subtitles using SSD and CNN - GitHub - lars76/chinese-subtitle-ocr: Optical character recognition for Chinese subtitles using SSD and CNN
add_argument(name, metavar, nargs, action, type, default, help) 🤔
duangsuse::Echo
add_argument(name, metavar, nargs, action, type, default, help) 🤔
原作者混合了 cv2 和 Python PIL 图像处理,我给它改回纯 cv2,方便使用……
extract_subtitles.py
7.8 KB
我给改回来了,现在用的
cv2.imread 和 cv2.UMat 的 slice#Python #DontKnow https://stackoverflow.com/questions/18946662/why-shouldnt-i-use-pypy-over-cpython-if-pypy-is-6-3-times-faster
Stack Overflow
Why shouldn't I use PyPy over CPython if PyPy is 6.3 times faster?
I've been hearing a lot about the PyPy project. They claim it is 6.3 times faster than the CPython interpreter on their site.
Whenever we talk about dynamic languages like Python, speed is one of t...
Whenever we talk about dynamic languages like Python, speed is one of t...
extract_subtitles.py
8.3 KB
实操把
frames.append 注释掉不会卡死,cv2 不存在内存泄漏问题,但是如何优化内存使用正在重构
duangsuse::Echo
可以先开源…… 完成了! https://github.com/duangsuse/extract-subtitles
./extract_subtitles.py -crop '(313,951)(1343,45)' --crop-debug SomethingNew.mp4
[Video Path] SomethingNew.mp4
[Crop] [[313, 951], [1343, 45]]
[Threshold] None
[Subtitle Language] chi_sim
[Frame Directory] frames
[Filter Window Size] 13
Extracting key frames...
[Video Props] (2837, 29, 1920, 1080)
100% |#############################################################################|
smooth [...x386], 13 hanning
q120 How can something be so nice? 面 本
177 How can sgomething be snicey
3
192 Yet so shocking, yet so mice,|
3
220 Yet so shocking, yet so mice,|
241 Yet so shocking, yet so iiice,|
261 [ee二和:和-TAR om
269 [ee二和iT:和-TAR 5owm
284 [ee二和[让:和-IT om
299 [wei二和:和 -TAN Dowm
306 [ee二和:和-IT 5owm
320 How can something bel sg new?
338 YetSoknown but yet,SsSomnew?
361 YetSoknown but yetSomnew?
duangsuse::Echo
./extract_subtitles.py -crop '(313,951)(1343,45)' --crop-debug SomethingNew.mp4 [Video Path] SomethingNew.mp4 [Crop] [[313, 951], [1343, 45]] [Threshold] None [Subtitle Language] chi_sim [Frame Directory] frames [Filter Window Size] 13 Extracting…
This media is not supported in your browser
VIEW IN TELEGRAM
duangsuse::Echo
🤔 Sticker
说实在话,其实原作者的算法也没有什么问题,不仅在于……关键还是在于没有 windowing,数据一下子都处理完,不能按照固定的大小一部分一部分处理
#Python #code 真可怜,无用的代码被丢掉了…… 看来纪念下吧
printedCall_fmt = lambda op, args: f"{getFuncName(op)} {' '.join(map(str, args))}"
printedCall_on_result = lambda r: print("" if r == None else f" -> {r}")
def printedCall(op, fmt = printedCall_fmt, on_result = printedCall_on_result):
def _invoke(*args, **kwargs):
print(fmt(op, args), end="")
res = op(*args, **kwargs)
on_result(res)
return res
return _invoke def getFuncName(func): return findall("^<.*function (\S+)", repr(func))[0]
duangsuse::Echo
说实在话,其实原作者的算法也没有什么问题,不仅在于……关键还是在于没有 windowing,数据一下子都处理完,不能按照固定的大小一部分一部分处理
🤔 原文件采用先保存在 list 里的方法,我利用 generator,换成数据流模式,然后倒着来…… 是不是就不用把所有
UMat 都保持下来了?先来分析一下:原项目的
后期
所以只要在这个函数里分块处理数据(关键是
solveFrameDifferences 会得出 frames 和 frame_diffs,其二等价 map(lambda it: it.value, frames) ,没啥意义后期
ocrWithLocalMaximal() 主要是按从 frame_diffs 计算出的东西,去 filter frame 并且实际 OCR所以只要在这个函数里分块处理数据(关键是
Frame.no 属性有顺序),就可以了from window_slider import Slider<window_slider.slider.Slider at 0x7fd25afc8e10>
s = Slider(3, 0)
s.fit(np.array(range(0, 100000)))
s.slide()array([0, 1, 2])
🤔