• Stars
    star
    206
  • Rank 186,920 (Top 4 %)
  • Language
    Python
  • License
    MIT License
  • Created over 4 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

【Night Beam】去除文本马赛克的随机算法!

Night Beam

我能去除文本的马赛克而不伤身体!

经常看到有去除图像和视频的马赛克的算法。这样不好,伤身体。

所以我发明了去除文本马赛克的算法!
妈妈再也不用担心我对着视频里的女孩子〇〇了!

不过是一拍脑袋写出来的,还得再做一些深入的研究。一方面是稳定性可能并不好,另一方面是以后的性能可能还会加强。

效果

原文: alice was beginning to get very tired

  • 字体: consola

  • 字号: 32

  • 马赛克大小: 20

马赛克后:

./测试结果/alice-was.png

输入马赛克后的图,每轮的预测结果:

azxa rulx kwgjfuing tsclpt very cenvd
allce was baqwxnxrg tsclpt very itnvd
alzce was begjfuecg to gfl very xinvd
aizce was baqwxnlng tsclpt very ztnnd
alzce was bdzprwvcg to get very tjvnd
alice was dauprbxrg to get very ssnnd
alice was bauprbing to get very tjvnd
alice was begjvning to get very vxynd
alice was beginning to get very tjvnd
alice was beginning to get very tired

(输出较多,省略了中间的18轮)

结果: alice was beginning to get very tired

这是马赛克之前的图片,与结果内容一致:

./测试结果/alice-was(ori).png

大成功!

原理

我也不好说,要起名字的话就叫做无梯度随机下降法。

这个算法可行的本质原因是信息冗余。
虽然马赛克会消去大部分的信息,但是文本在转换为图片时会产生极大的信息冗余,以至于马赛克之后仍然可能留下足够的信息来还原文字。

考虑到一个马赛克块的信息量大概和一个字母比较接近,如果马赛克的块太少可能得到的就不太是正解了。

图像结构

用alice举个例子:

原理/alice.png

这个图片是拼出来的。它有两个图层,上面是字母alice,下面是马赛克。

原理/alice的e.png

而马赛克的每个块都只会受到少数几个字母的影响,比如e影响它临近的4格,而a影响它临近的2格。

矩阵

原理/alice的e黑.png

我们不知道字母是什么,所以不知道它确切地影响哪些格子。为了进行估计,我们预先将每个字母所在的位置涂黑,把黑色分散到附近的马赛克格子里。比如这里的e对上面两格的影响大,对下面两格的影响小,我们用黑色占那个格子的比例来量化。

我们把每个马赛克格子当作一个元素,然后把所有格子展平(flatten)。这样一来每个字母对每个格子的影响就可以组成一个二维矩阵,下面需要用到所以记作A。

字母损失

虽然是随机算法,但还得用到一些依据来获得合理的猜测速度。

首先从字符集里随机抽取字母,生成一个字符串,进行处理,可以得到一个另外的马赛克,同样进行分块、展平。 计算两个马赛克相减的平方,就能估计我们产生的新串与目标串的差距,我们把这看作损失(loss)

然后把差距向量和矩阵A相乘,得到每个字母到目标字母的差距估计。当然这个猜测是不准确的,即使字母相同,也会因为旁边的字母的影响而产生差距。

原理/ee.png

以上图为例,如果我们发现新马赛克中[2,4](flatten之前)位置的块与输入块的差距很大,在乘上矩阵A之后,c和e的值就会上升,且c上升的多一些。这样我们就知道c可能是猜测错误的字母。

并没有梯度下降

虽然想用梯度下降法,问题是字母是离散的……似乎靠各种约束也可以完成,但是我不太有能做出来的自信。

接下来是真正的实现。用字母的差距作为权重,随机选择一个字母,尝试把它变化成另一个随机的字母,如果能使loss降低,就这么干,如果不能就再换其他的字母。

这个方法很容易就会陷入极小值,一旦出现,就把差距非0的字母全部随机重置,再回到选择字母的步骤。如果一个字母和它两侧的字母都是对的,那么它的loss应当几乎是0,这样可以在不破坏已经猜测出的完整单词的前提下重新初始化。

虽然看起来很蠢但是速度好像还可以。在我的废铜烂铁CPU(没错就是奔腾)上,使用单线程,解出alice那句话三次,分别用时339s、350s、225s。

适用条件

  • 有马赛克后的文字截图

  • 知道马赛克的起点和块大小

  • 知道原本文字的位置和字号

  • 英文等宽字体

第一条基本都能满足,要是照片就没办法了。

第二条自己用photoshop测一下就好了。

第三条也好办,网页截图的话去原网页上按F12测一下,其他的可能需要有类似的原文件。

第四条比较苛刻,鬼知道哪个是等宽。能撞上这个条件的,比如论坛上别人给代码截图的时候不是会把api_key之类的打上码……(所以说不要截图,你们都是饶罗翔和大主教教的吗)
如果不是等宽字体暂时没法解决……等我下次更新技术吧。

其他样例

./测试结果/to-be.png

nsrlcccf nov tcrdv thocc m a pltnzish
tsrirj h not to be thiw is a quescrpn
tsrio vv not to be thue is a qusotion
tsrio cf not to be thex is a quovsion
tsrlcrur not to be thue is a qusovzon
tscto cf not to be thex is a quskllzh
tsrio vv not to be thex is a qlwstion
tsctcccf not to be thue is a qusotion
to be vv not to be thiw is a qutnzion
to be or not to be thue is a qlwstion
to be or not to be thsk is a qusotion
to be or not to be that is a question

结果: to be or not to be that is a question

./测试结果/the-quick.png

xhnz gtck brumx flk uegvu over nkcccouz bxg
tnw upick bvrph flk jdanz over hxccczej bxg
the upick brumx tnn jdjbs over the lsaj dog
thcrjuick brumcrnck jakps over the isaj dog
thcrjuick brodcrrlk jywbs over thnl jaj dog
the quick brean tnn jdxps over thcrzuuz dog
the quick bresh fox jumps over the lazy dog
the quick brooh fox jumps over the lazy dog
the quick bresh fox jumps over the lazy dog
the quick brown fox jumps over the lazy dog

(输出较多,省略了中间的50轮)

结果: the quick brown fox jumps over the lazy dog

More Repositories

1

match-you

【您配吗】配你吗
JavaScript
1,448
star
2

unvcode

【幼女Code】反和谐超级武器!
Python
1,070
star
3

Vtuber_Tutorial

【教程】从零开始的自制Vtuber!
Python
915
star
4

Librian

【Librian】簡明強大的 Galgame | Visual Novel 引擎
Python
652
star
5

yinglish

【yinglish】淫语翻译机!
Python
517
star
6

sese-engine

【sese-engine】新时代的搜索引擎!
Python
480
star
7

steal_piano

【steal piano】GitHub偷情分析工具!
Python
463
star
8

internet-dataset

【数据集】好耶,是互联网数据集!
168
star
9

kill3d

三次元人类屏蔽器!
Python
167
star
10

color_site

【色圖網站】
HTML
144
star
11

unv-shield

【幼盾】个性化图片徽章服务!
Python
141
star
12

bnhhsh

【不能好好说话】不对劲的拼音首字母缩写翻译工具
Python
103
star
13

modnet-entry

【MODNet-entry】开箱即用的人像抠图工具
Python
100
star
14

not_translator

【not translator】不会翻译机!
Python
79
star
15

cotrace

【cotrace】同事追踪器!
Python
73
star
16

thyrune

你的纪念碑!
Python
72
star
17

librian-can

【轻小说连载】Librian萝莉会所!
57
star
18

minecraft

用Python-OpenGL实现的minecraft
Python
53
star
19

loliimg

【萝莉图片算法】高损图像压缩算法!?
Python
52
star
20

smoke_of_deceit

把代码藏起来!
50
star
21

python-anti-seduce-system

针对Python语言防沉迷调整的说明
Python
49
star
22

ciallo

【ciallo】别他妈了隔壁念你那通稿
JavaScript
44
star
23

rimochan

莉沫酱GitHub展板
Python
44
star
24

...

【萝莉病毒?】删不掉的..!
Pascal
42
star
25

rimo-rss-reader

【rimo-rss-reader】莉沫酱RSS阅读器!
Python
40
star
26

Je-Suis-Le-Deluge

莉沫酱革命协议!
40
star
27

i7h

【i18nglish】自动i18n!
Python
35
star
28

hoshi

【星】pdf扫描件 转 docx
Python
34
star
29

water-generator

这次是真的发水机!
34
star
30

chao

【超】Python魔法加速器!
Python
33
star
31

rime-unvcode

幼⼥输⼊法!
33
star
32

raspberry-pi-bedroom-monitor

基于树莓派的多功能寝室监控系统
Python
32
star
33

rimochan-LORA

【rimochan-LORA】量产型电子莉沫酱!
32
star
34

rimochan-cookbook

莉沫酱小本子!
32
star
35

flowerpot

不用浇水的花盆!
30
star
36

kokoro

这次是可可萝病毒!
Python
30
star
37

lunar-Ci

【lunar-Ci】今日诸事不宜!
Python
27
star
38

Rimo-Kitchen

莉沫酱小厨房!
27
star
39

unvdisco

【幼女盘】网盘界文艺复兴!
Python
24
star
40

changgelog

【唱歌log】让你的程序学会唱歌!
Python
22
star
41

GPT-reader

【GPT-reader】让GPT帮你读小说吧!
Python
21
star
42

Invoker

【Invoker】word2vec的智能記單詞app
Python
21
star
43

True-tool

【真具】真正的CG包去重壓縮工具
Python
20
star
44

PSO-image-match

神奇的粒子群图像匹配! Particle Swarm Optimization(PSO) image template matching
Python
20
star
45

inherit

【教程】莉沫酱教你学继承!?
Python
17
star
46

child-lock

【child-lock】儿童锁!
Python
15
star
47

dota2-card

【dota2卡】老子不上班了!
Python
14
star
48

Cinder

烤肉识别器!
Python
13
star
49

Lunatic_red_eyes

【幻朧月睨】催眠調教的app!
Python
11
star
50

rimo-lab

莉沫酱人体实验室!
11
star
51

my_2dkf_css

我在緋月論壇用的CSS
Sass
10
star
52

paradox-mod-translator

P社mod翻译器!
Python
9
star
53

jiu_zi_qie

【九字切】背誦日文單詞!
Python
9
star
54

rimo_utils

莉沫工具箱
Python
9
star
55

hrml

【hrml】超莉沫酱自慰语言!
Python
9
star
56

negate_hypnotic

抗催眠装置!
Python
9
star
57

hw

黄巍机器人!
Python
8
star
58

conception-license

绝对遵守☆强制子作许可证
8
star
59

github-close-machine

GitHub快速取关机!
Python
8
star
60

copylot

【copylot】Photoshop的实时stable diffusion插件!
Python
8
star
61

unvqlo

【unvqlo】莉沫酱周边博物馆!
JavaScript
8
star
62

keras-ACG-face-alignment

【ACG-face-alignment】ACG臉部對齊
Python
8
star
63

readme-hack

【???】給github的readme添加css
CSS
7
star
64

rimo_storage

莉沫酱存储!
Python
7
star
65

yuri

这次是真的催眠调教器!
Python
7
star
66

sunder

心灵控制器!
Python
6
star
67

the-destiny-star-of-girlfriend

【宗教迷信】宿星的女朋友
6
star
68

Pepin

同事批评器!
Python
6
star
69

waifu-sensor

【老婆探测器】一个普通的动漫角色分类模型
Python
5
star
70

Mask-Translator

可重用的代碼翻譯器!
Python
4
star
71

synthetic-css

Synthetic風格CSS
Sass
4
star
72

not_view

【不看】不好的图片浏览器
Python
4
star
73

Gensho

【幻書】能編程的自然中文!
Python
4
star
74

stable-diffusion-anime-tag-benchmark

stable diffusion 动漫标签自动化评测
Python
4
star
75

snow

【雪】自用的编译运行工具
Python
3
star
76

Free4

放肆的解压算法!
Python
3
star
77

false_moon

【夜空珠】keras的深度圖像隱寫術!
Python
3
star
78

seal-sorcery

印刷术!
Python
3
star
79

LG-University

莆田理工大学文档
HTML
2
star
80

cm3d2-parser

3D定制女仆MOD解析器
Python
2
star
81

pmd

【pmd】python雜交cmd!
Python
2
star
82

vscode-rimo-theme

vscode主题
Sass
1
star
83

Qi

气象观测站!
1
star