言小溪enncy 发表于 2022-4-27 00:46:45

关于超星最近题目乱码繁体字的解决方案

本帖最后由 enncy 于 2022-5-12 18:20 编辑

> 本帖最后由 enncy 于 2022-5-7 17:22 编辑



这次确实有点东西的,通过自定义字体文件 `@font-face`,然后加 `font-cxsecret` css类到每个文本元素,吧原本文档的乱码字体显示成正常字体。用户看到的就是正常字体但是源码里面是乱码。
***
这里给两个解决思路
1. 网上各种加密解密,这里本人技术问题看不懂所以不多说。
2. 通过 (https://github.com/tsayen/dom-to-image) 获取元素的base64图片,通过 (https://github.com/naptha/tesseract.js/blob/master/docs/examples.md) 文字识别图片文本 。

## 开放 API

这里开放一个API给大家用,直接调用即可破解繁体字乱码, 具体API详情请看文档: [https://enncy.github.io/online-course-script/api#ocr](https://enncy.github.io/online-course-script/api#ocr)



## 以下是demo例子

```html
<html>
    <head>
      <script src="https://unpkg.com/tesseract.js@2.1.0/dist/tesseract.min.js"></script>
      <script src="https://cdn.jsdelivr.net/npm/dom-to-image@2.6.0/src/dom-to-image.min.js"></script>
    </head>
    <body>
      <!-- 加点内边距,不然只能显示半边的字体 -->
      <div style="padding: 4px;">
            hello world
      </div>
    </body>
</html>
```

```js
const { createWorker } = Tesseract;

const worker = createWorker();

// 这里是加载网络的ocr数据,可能需要梯子才能访问,可以看我开放API中的具体说明
await worker.load();
// 加载语言
await worker.loadLanguage('eng');
await worker.initialize('eng');
// 元素
const el = document.querySelector('div')
// 图片 base64
const pngBase64 = await domtoimage.toPng(el);
const { data: { text } } = await worker.recognize(pngBase64);
console.log(text);
// 结束
await worker.terminate();
```

输出结果

!(data/attachment/forum/202204/27/094825xqpydp6p6fztno3b.png)

虽然中文识别有些困难。。。
```js
// 加载语言
await worker.loadLanguage('chi_sim');
await worker.initialize('chi_sim');
```
!(data/attachment/forum/202204/27/095216d3jl359bv5kmelne.png)

但是在给文本加了一点间隔后 `letter-spacing` 识别效果明显变好,还可以增加字体大小

!(data/attachment/forum/202204/27/095702ukgi4d08digl4tge.png)

输出

!(data/attachment/forum/202204/27/095751ki4slmlniqhmuuhz.png)


言小溪enncy 发表于 2022-4-27 01:04:10

有大佬还有其他方法吗

李恒道 发表于 2022-4-27 01:23:40

也有一点束手无计。。。
看字体大小像是根据题目开动态生成的内联style
实在太小了。。。

言小溪enncy 发表于 2022-4-27 09:26:25

李恒道 发表于 2022-4-27 01:23
也有一点束手无计。。。
看字体大小像是根据题目开动态生成的内联style
实在太小了。。。 ...

有办法了。 https://github.com/tsayen/dom-to-image 加tesseract ocr

王一之 发表于 2022-4-27 10:09:53

enncy 发表于 2022-4-27 09:26
有办法了。 https://github.com/tsayen/dom-to-image 加tesseract ocr

Tesseract.js | Pure Javascript OCR for 100 Languages! (projectnaptha.com)

客户端ocr,然后再去查题

言小溪enncy 发表于 2022-4-27 10:11:25

王一之 发表于 2022-4-27 10:09
ocr成本太高了

有浏览器端的,这个跑完也就几秒而已 🤣

王一之 发表于 2022-4-27 10:11:43

enncy 发表于 2022-4-27 10:11
有浏览器端的,这个跑完也就几秒而已 🤣

嗯 找到了

https://tesseract.projectnaptha.com/

王一之 发表于 2022-4-27 10:12:16

enncy 发表于 2022-4-27 10:11
有浏览器端的,这个跑完也就几秒而已 🤣

哥哥住论坛么,才发完想编辑就回复了

言小溪enncy 发表于 2022-4-27 10:13:20

王一之 发表于 2022-4-27 10:12
哥哥住论坛么,才发完想编辑就回复了

没, 想打开看看就看到回复了😂

王一之 发表于 2022-4-27 10:15:45

这个ocr效果好像不是很好,查题命中率大大降低{:4_86:}
页: [1] 2 3 4 5 6 7
查看完整版本: 关于超星最近题目乱码繁体字的解决方案