duangsuse::Echo
719 subscribers
4.28K photos
130 videos
583 files
6.49K links
import this:
美而不丑、明而不暗、短而不凡、长而不乱,扁平不宽,读而后码,行之天下,勿托地上天国。
异常勿吞,难过勿过,叹一真理。效率是很重要,盲目最是低效。
简明是可靠的先验,不是可靠的祭品。
知其变,守其恒,为天下式;穷其变,知不穷,得地上势。知变守恒却穷变知新,我认真理,我不认真。

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
Forwarded from Mivik Q
我用的是java.reflect.Array.newInstance(Class::class.java, 0).javaClass
Forwarded from dnaugsuz
好奇怪,Kotlin
Array<reified T> 就不可以引用 ::class.java😂
java.reflect.Array.newInstance(Class::class.java, n).javaClass 用 java.reflect 这个的确是标准答案
#Windows #security 又是 MS17-010…… 这个微软有没有毛病啊
Forwarded from 蛋挞观察室
我在今天18:16创建的 @wannaren 公开链接被强制转移到TGgeek
我当时创建频道时还特别检查了公开链接写对没有

我想知道是不是大人物联系官方就能直接抢掉
Forwarded from Deleted Account
试下这个arrayOf<Class<*>>().javaClass
Forwarded from Mivik Q
毕竟jvm有一个泛型抹平在那里,是没法获取到泛型特化后的“类“的。而java对数组做了特殊处理,kt只是把数组当成一个泛型了
Forwarded from dnaugsuz
所以说下面 null 的那个因为是 instance 级别的反射所以能拿到 Class<T>
Forwarded from Mivik Q
Forwarded from dnaugsuz
新操作,虽然我之前也没遇到过这问题(
刚才还在想为啥没内联进去呢
This media is not supported in your browser
VIEW IN TELEGRAM
草,总算可以正常写入了,发现是没有提前转换 array => UMat 的缘故
逐帧处理只能套娃 UMat(array(Image.fromarray(array(mat))) 😂
Forwarded from dnaugsuz
后来我发现 expandRangeStart 简直荒谬,因为那个是用来合并 extract-subtitle 的扫描结果的(按帧算)……

这个应该支持读入 srt ,所以准确的做法是加 srt 解析库,再弄一个 frameNoFromMillis 然后直接循环赋值,不需要 sort + zipWithNext
class srt.Subtitle(index, start, end, content, proprietary='')
def srt.parse(text: str) -> Subtitle
🤔还怪好用的,这就去写个 expandSubtitles

#Python #CV
OpenCV 读单帧 imread(path)imwrite(path ,img) 还有 imshow(title, img)
读 video 用 VideoCapture(path) 可以 unfinished, img = read()release()
写 video 用 VideoWriter(path, VideoWriter.fourcc(*"X264"), fps, size)
方便使用 img[x, y, w, h] 进行 crop,使用 cv2.cvtColor(img, cv2.BGR2GRAY) 灰度
cv2.inRange bandpass filter (binarize: 2 value) 还有 cv2.merge 位运算取得通道
cv2.absdiff 来算帧差,和 numpy.ndarray 无缝交互

我正考虑可不可以利用 Py 的动态类型给 cv.UMat 做个 PIL.Image 的包装 adapter
duangsuse::Echo
OpenCV 的 VideoWriter 真是无聊,本来以为 fourcc 设计也就是个 4*len(ascii) 不能算嘈点,结果静默失败,我调用了 write 结果输出个空文件,还不能当参数传不然莫名其妙返回什么 NULL 错误
[DuangSUSE@duangsuse]~/Projects/MontagePY% ./montage1_c.py ../extract-subtitles/extract-subtitles/Gswx.mp4 --subtitle ../extract-subtitles/extract-subtitles/HxN.srt -scale 2.0 -font-size 30 -spacing :-15,-15 -font /usr/share/fonts/wqy-zenhei/wqy-zenhei.ttc
30px, (255, 255, 255) ±20 (-15, -15)
20fps*6643 540x360

#fxxk 😂 正当 duangsuse 疯狂吐嘈 VideoWriter 不能用很久之后,才发现原来是自己的 -scale 参数和 write() 不兼容,构造器参数写错了

不过,既然别人编程都有问题,OpenCV 连个 fatal 都没有,真是太浪费时间了。还废了我好长时间怀疑是 GC 和 use-after-free,差点把重构的面向对象结构毁掉。
./montage1_c.py ../extract-subtitles/extract-subtitles/Gswx.mp4 --subtitle ../extract-subtitles/extract-subtitles/HxN.srt -font-size 30 -spacing :-15,-15 -font /usr/share/fonts/wqy-zenhei/wqy-zenhei.ttc -scale 2.0 -key-color '000000' --key-thres 20

./montage1_c.py ../extract-subtitles/extract-subtitles/Gswx.mp4 -font /usr/share/fonts/wqy-zenhei/wqy-zenhei.ttc -scale 2.0 -key-color '000000' --key-thres 20 -text █ -font-size 20 -spacing :-10,-12


现在 srt 字幕展开已经可以用了,两个视频。
./montage1_c.py -font /usr/share/fonts/wqy-zenhei/wqy-zenhei.ttc -scale 2.0 --key-thres 20 -text █ -font-size 20 -spacing :-10,-12 pic.jpg
def expandSrts(srts, fps, count, placeholder="#"):
indexed = [placeholder for _ in range(count)]
no = lambda t: int(t.total_seconds() * fps)
for srt in srts:
start, end = no(srt.start), no(srt.end)
indexed[start:end] = repeat(srt.content, end - start)
return indexed

因为有了 datetime.deltatime ,所以 fps 计算变得直白了起来,只需要 total_seconds()*fps 即可 #Python #CV #code