V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tukon479
V2EX  ›  前端开发

摸鱼写了一个文本混淆器,现代 OCR 都发展的这么快了吗

  •  
  •   tukon479 ·
    innei · 2021-05-12 14:05:52 +08:00 · 1802 次点击
    这是一个创建于 1051 天前的主题,其中的信息可能已经有所发展或是发生改变。

    昨天突然想起某天看到微信读书(记忆不清了)为了防止用户复制,采用了一种方式,把每个字都绝对定位,从而达到视觉上通顺,实际上是乱序的。大概如下图所示。

    0512135651

    然后我尝试用 OCR 软件去识别,标准字体的话准确率很高不稀奇。我又换了一个手写体去试。macOS 自带的手札体。

    意外发现不规则字体识别率也很高。

    0512140535

    对了,地址在这: https://innei.github.io/shuffle-article/

    13 条回复    2021-05-22 13:00:09 +08:00
    Maboroshii
        1
    Maboroshii  
       2021-05-12 14:08:28 +08:00
    有意思
    imdong
        2
    imdong  
       2021-05-12 14:10:43 +08:00
    之前做过一个小说网站的识别,也是类似的方式,我的做法是:

    从 html 中取出每个字的位置,然后按行列排序,最后重新整理顺序就可以还原了.

    而且从你截图来看的话,比那个网站还少了基础 css 样式偏移,那个是每个字都有一个 class 和 style 的,两个变量的漂移相加的.
    Maboroshii
        3
    Maboroshii  
       2021-05-12 14:11:11 +08:00
    不过试了下浏览器缩放,混淆后的内容的位置就跑了
    tukon479
        4
    tukon479  
    OP
       2021-05-12 14:16:23 +08:00
    @Maboroshii 对,因为绝对定位,所以 resize 要加监听器,重新计算
    tukon479
        5
    tukon479  
    OP
       2021-05-12 14:17:19 +08:00
    @imdong 有代码可以学习学习吗
    est
        6
    est  
       2021-05-12 14:20:40 +08:00
    2012 年,cv 届发生了一件大事,人类的命运就从此发生了巨大改变。以至于到了 9 年后的今天,LZ 才发帖感叹技术进步如此之快
    imdong
        7
    imdong  
       2021-05-12 14:33:31 +08:00
    (content => {
    let span_list = content.querySelectorAll('span'),
    map = [], full_text = "";
    span_list.forEach(span => {
    let left = parseInt(span.style.left),
    top = parseInt(span.style.top);
    map[top] = map[top] || [];
    map[top][left] = span.innerText;
    });

    map.forEach(line => {
    line.forEach(text => {
    full_text += text
    });
    })

    console.log(full_text)
    })(document.getElementById('renderTargetContent'))
    goodryb
        8
    goodryb  
       2021-05-12 16:27:51 +08:00
    居然还有这种操作,第一次听说
    murmur
        9
    murmur  
       2021-05-12 16:46:35 +08:00
    如果考虑到做字体替换和位置改动的,应该也有其他反扒策略把
    tukon479
        10
    tukon479  
    OP
       2021-05-12 19:47:59 +08:00
    @est 对于手写体的识别有点惊到。
    tukon479
        11
    tukon479  
    OP
       2021-05-12 19:49:56 +08:00
    @imdong 加上基础 css 样式偏移的话可以用 `getBoundingClientRect` 获取位置,在计算得出。
    q197
        12
    q197  
       2021-05-20 15:40:00 +08:00
    用的什么 ocr 软件?

    完全不允许复制感觉有些过头,毕竟读书还要摘抄(滑稽),而且这样无障碍功能估计就彻底不能用了。

    @est 能具体说说吗
    tukon479
        13
    tukon479  
    OP
       2021-05-22 13:00:09 +08:00
    @q197 mac 上的 TextSniper https://textsniper.app/
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4070 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 10:17 · PVG 18:17 · LAX 03:17 · JFK 06:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.