Skip to content

Commit

Permalink
fix: 优化 OCR , 解决题目选项没有识别的BUG
Browse files Browse the repository at this point in the history
  • Loading branch information
enncy committed Apr 28, 2022
1 parent 479d8dd commit e534658
Show file tree
Hide file tree
Showing 6 changed files with 29 additions and 4 deletions.
2 changes: 2 additions & 0 deletions packages/core/src/core/store.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,4 +34,6 @@ export interface OCSStore {
videojs: HTMLElement | null
/** 搜索结果存储 */
workResults: WorkResult<any>[]
/** 是否正在识别文字 */
isRecognizing: boolean
}
15 changes: 15 additions & 0 deletions packages/core/src/core/utils/common.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { store } from '../../script';
import { DefineScript, GlobPattern, ScriptPanel, ScriptRoute } from '../define.script';

export async function sleep (period: number): Promise<void> {
Expand Down Expand Up @@ -90,3 +91,17 @@ export function getNumber (...nums: number[]) {
export function isInBrowser (): boolean {
return typeof window !== 'undefined' && typeof window.document !== 'undefined';
}

/**
* 等待文字识别
*/
export function waitForRecognize() {
return new Promise<void>((resolve) => {
const timer = setInterval(() => {
if (store.isRecognizing === false) {
clearInterval(timer);
resolve();
}
}, 100);
});
}
4 changes: 3 additions & 1 deletion packages/core/src/script/cx/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@ export const CXScript = defineScript({
},
{
name: '文字识别脚本',
url: ['**/mycourse/studentstudy**', '**/work/doHomeWorkNew**'],
url: ['**/mycourse/studentstudy**', '**/work/doHomeWorkNew**', '**/mooc2/exam/preview**', '**/mooc2/work/dowork**'],
async onload() {
/** 文字识别 */
const ocr = new OCR({
Expand All @@ -196,11 +196,13 @@ export const CXScript = defineScript({
const fonts = CXAnalyses.getSecretFont();
if (fonts.length) {
logger('info', '文字识别功能启动');
store.isRecognizing = true;
await ocr.load();
for (const font of fonts) {
const text = await ocr.recognize(OCR.suit(font));
font.innerHTML = text;
}
store.isRecognizing = false;
logger('info', '文字识别完成');
}
}
Expand Down
5 changes: 4 additions & 1 deletion packages/core/src/script/cx/study.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import defaults from 'lodash/defaults';
import { domSearch, domSearchAll, getNumber, searchIFrame, sleep, StringUtils } from '../../core/utils';
import { domSearch, domSearchAll, getNumber, searchIFrame, sleep, StringUtils, waitForRecognize } from '../../core/utils';
import { OCSWorker } from '../../core/worker';
import { defaultAnswerWrapperHandler } from '../../core/worker/answer.wrapper.handler';
import { logger } from '../../logger';
Expand Down Expand Up @@ -237,6 +237,9 @@ async function chapterTestTask(setting: ScriptSettings['cx']['work'], frame: HTM
return;
}

// 等待文字识别
await waitForRecognize();

const { window: frameWindow } = frame.contentWindow;

const { TiMu } = domSearchAll({ TiMu: '.TiMu' }, frameWindow.document);
Expand Down
2 changes: 1 addition & 1 deletion packages/core/src/script/cx/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ const CXAnalyses = {
},
/** 检测页面是否使用字体加密 */
getSecretFont(doc:Document = document) {
return Array.from(doc.querySelectorAll('.Zy_TItle .clearfix.font-cxsecret')) as HTMLElement[];
return Array.from(doc.querySelectorAll('.font-cxsecret')) as HTMLElement[];
}

};
Expand Down
5 changes: 4 additions & 1 deletion packages/core/src/script/cx/work.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import defaults from 'lodash/defaults';
import { store } from '..';
import { domSearch, sleep, StringUtils } from '../../core/utils';
import { domSearch, sleep, StringUtils, waitForRecognize } from '../../core/utils';
import { OCSWorker } from '../../core/worker';
import { defaultAnswerWrapperHandler } from '../../core/worker/answer.wrapper.handler';
import { logger } from '../../logger';
Expand All @@ -25,6 +25,9 @@ export async function workOrExam(
/** 清空内容 */
store.workResults = [];

// 等待文字识别
await waitForRecognize();

/** 新建答题器 */
const worker = new OCSWorker({
root: '.questionLi',
Expand Down

0 comments on commit e534658

Please sign in to comment.