This commit is contained in:
20
test_tipc/web/expect.json
Normal file
20
test_tipc/web/expect.json
Normal file
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"text": [
|
||||
"纯臻营养护发素",
|
||||
"产品信息/参数",
|
||||
"(45元/每公斤,100公斤起订)",
|
||||
"每瓶22元,1000瓶起订)",
|
||||
"【品牌】:代加工方式/OEMODM",
|
||||
"【品名】:纯臻营养护发素",
|
||||
"【产品编号】:YM-X-3011",
|
||||
"ODMOEM",
|
||||
"【净含量】:220ml",
|
||||
"【适用人群】:适合所有肤质",
|
||||
"【主要成分】:鲸蜡硬脂醇、燕麦β-葡聚",
|
||||
"糖、椰油酰胺丙基甜菜碱、泛醌",
|
||||
"(成品包材)",
|
||||
"【主要功能】:可紧致头发磷层,从而达到",
|
||||
"即时持久改善头发光泽的效果,给干燥的头",
|
||||
"发足够的滋养"
|
||||
]
|
||||
}
|
||||
13
test_tipc/web/index.html
Normal file
13
test_tipc/web/index.html
Normal file
@@ -0,0 +1,13 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
||||
<title>ocr test</title>
|
||||
</head>
|
||||
<body>
|
||||
<img id="ocr" src="./test.jpg" />
|
||||
</body>
|
||||
<script src="./node_modules/@paddlejs-models/ocr/lib/index.js"></script>
|
||||
</html>
|
||||
82
test_tipc/web/index.test.js
Normal file
82
test_tipc/web/index.test.js
Normal file
@@ -0,0 +1,82 @@
|
||||
const expectData = require('./expect.json');
|
||||
|
||||
describe('e2e test ocr model', () => {
|
||||
|
||||
beforeAll(async () => {
|
||||
await page.goto(PATH);
|
||||
});
|
||||
|
||||
it('ocr infer and diff test', async () => {
|
||||
page.on('console', msg => console.log('PAGE LOG:', msg.text()));
|
||||
|
||||
const text = await page.evaluate(async () => {
|
||||
const $ocr = document.querySelector('#ocr');
|
||||
const ocr = paddlejs['ocr'];
|
||||
await ocr.init('./models/ch_PP-OCRv2_det_infer', './models/ch_PP-OCRv2_rec_infer');
|
||||
const res = await ocr.recognize($ocr);
|
||||
return res.text;
|
||||
});
|
||||
// 模型文字识别结果与预期结果diff的字符数
|
||||
let diffNum = 0;
|
||||
// 文本框字符串相似度
|
||||
let similarity = 0;
|
||||
// 预期字符diff数
|
||||
const expectedDiffNum = 10;
|
||||
// 预期文本框字符串相似度
|
||||
const expecteSimilarity = 0.9;
|
||||
// 预期文本内容
|
||||
const expectResult = expectData.text;
|
||||
|
||||
expectResult && expectResult.forEach((item, index) => {
|
||||
const word = text[index];
|
||||
// 逐字符对比
|
||||
for(let i = 0; i < item.length; i++) {
|
||||
if (item[i] !== word[i]) {
|
||||
console.log('expect: ', item[i], ' word: ', word[i]);
|
||||
diffNum++;
|
||||
}
|
||||
}
|
||||
// 文本框字符串相似度对比
|
||||
const s = similar(item, word);
|
||||
similarity += s;
|
||||
});
|
||||
|
||||
similarity = similarity / expectResult.length;
|
||||
|
||||
expect(diffNum).toBeLessThanOrEqual(expectedDiffNum);
|
||||
|
||||
expect(similarity).toBeGreaterThanOrEqual(expecteSimilarity);
|
||||
|
||||
function similar(string, expect) {
|
||||
if (!string || !expect) {
|
||||
return 0;
|
||||
}
|
||||
const length = string.length > expect.length ? string.length : expect.length;
|
||||
const n = string.length;
|
||||
const m = expect.length;
|
||||
let data = [];
|
||||
const min = (a, b, c) => {
|
||||
return a < b ? (a < c ? a : c) : (b < c ? b : c);
|
||||
};
|
||||
let i, j, si, ej, cost;
|
||||
if (n === 0) return m;
|
||||
if (m === 0) return n;
|
||||
for (i = 0; i <= n; i++) {
|
||||
data[i] = [];
|
||||
[i][0] = i
|
||||
}
|
||||
for (j = 0; j <= m; j++) {
|
||||
data[0][j] = j;
|
||||
}
|
||||
for (i = 1; i <= n; i++) {
|
||||
si = string.charAt(i - 1);
|
||||
for (j = 1; j <= m; j++) {
|
||||
ej = expect.charAt(j - 1);
|
||||
cost = si === ej ? 0 : 1;
|
||||
data[i][j] = min(data[i - 1][j] + 1, data[i][j - 1] + 1, data[i - 1][j - 1] + cost);
|
||||
}
|
||||
}
|
||||
return (1 - data[n][m] / length);
|
||||
}
|
||||
});
|
||||
});
|
||||
14
test_tipc/web/jest-puppeteer.config.js
Normal file
14
test_tipc/web/jest-puppeteer.config.js
Normal file
@@ -0,0 +1,14 @@
|
||||
// jest-puppeteer.config.js
|
||||
module.exports = {
|
||||
launch: {
|
||||
headless: false,
|
||||
product: 'chrome'
|
||||
},
|
||||
browserContext: 'default',
|
||||
server: {
|
||||
command: 'python3 -m http.server 9811',
|
||||
port: 9811,
|
||||
launchTimeout: 10000,
|
||||
debug: true
|
||||
}
|
||||
};
|
||||
111
test_tipc/web/jest.config.js
Normal file
111
test_tipc/web/jest.config.js
Normal file
@@ -0,0 +1,111 @@
|
||||
// For a detailed explanation regarding each configuration property and type check, visit:
|
||||
// https://jestjs.io/docs/en/configuration.html
|
||||
|
||||
module.exports = {
|
||||
preset: 'jest-puppeteer',
|
||||
// All imported modules in your tests should be mocked automatically
|
||||
// automock: false,
|
||||
|
||||
// Automatically clear mock calls and instances between every test
|
||||
clearMocks: true,
|
||||
|
||||
// An object that configures minimum threshold enforcement for coverage results
|
||||
// coverageThreshold: undefined,
|
||||
|
||||
// A set of global variables that need to be available in all test environments
|
||||
globals: {
|
||||
PATH: 'http://localhost:9811'
|
||||
},
|
||||
|
||||
// The maximum amount of workers used to run your tests. Can be specified as % or a number. E.g. maxWorkers: 10% will use 10% of your CPU amount + 1 as the maximum worker number. maxWorkers: 2 will use a maximum of 2 workers.
|
||||
// maxWorkers: "50%",
|
||||
|
||||
// An array of directory names to be searched recursively up from the requiring module's location
|
||||
// moduleDirectories: [
|
||||
// "node_modules"
|
||||
// ],
|
||||
|
||||
// An array of file extensions your modules use
|
||||
moduleFileExtensions: [
|
||||
'js',
|
||||
'json',
|
||||
'jsx',
|
||||
'ts',
|
||||
'tsx',
|
||||
'node'
|
||||
],
|
||||
|
||||
|
||||
// The root directory that Jest should scan for tests and modules within
|
||||
// rootDir: undefined,
|
||||
|
||||
// A list of paths to directories that Jest should use to search for files in
|
||||
roots: [
|
||||
'<rootDir>'
|
||||
],
|
||||
|
||||
// Allows you to use a custom runner instead of Jest's default test runner
|
||||
// runner: "jest-runner",
|
||||
|
||||
// The paths to modules that run some code to configure or set up the testing environment before each test
|
||||
// setupFiles: [],
|
||||
|
||||
// A list of paths to modules that run some code to configure or set up the testing framework before each test
|
||||
// setupFilesAfterEnv: [],
|
||||
|
||||
// The number of seconds after which a test is considered as slow and reported as such in the results.
|
||||
// slowTestThreshold: 5,
|
||||
|
||||
// A list of paths to snapshot serializer modules Jest should use for snapshot testing
|
||||
// snapshotSerializers: [],
|
||||
|
||||
// The test environment that will be used for testing
|
||||
// testEnvironment: 'jsdom',
|
||||
|
||||
// Options that will be passed to the testEnvironment
|
||||
// testEnvironmentOptions: {},
|
||||
|
||||
// An array of regexp pattern strings that are matched against all test paths, matched tests are skipped
|
||||
testPathIgnorePatterns: [
|
||||
'/node_modules/'
|
||||
],
|
||||
|
||||
// The regexp pattern or array of patterns that Jest uses to detect test files
|
||||
testRegex: '.(.+)\\.test\\.(js|ts)$',
|
||||
|
||||
// This option allows the use of a custom results processor
|
||||
// testResultsProcessor: undefined,
|
||||
|
||||
// This option allows use of a custom test runner
|
||||
// testRunner: "jest-circus/runner",
|
||||
|
||||
// This option sets the URL for the jsdom environment. It is reflected in properties such as location.href
|
||||
testURL: 'http://localhost:9898/',
|
||||
|
||||
// Setting this value to "fake" allows the use of fake timers for functions such as "setTimeout"
|
||||
// timers: "real",
|
||||
|
||||
// A map from regular expressions to paths to transformers
|
||||
transform: {
|
||||
'^.+\\.js$': 'babel-jest'
|
||||
},
|
||||
|
||||
// An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation
|
||||
transformIgnorePatterns: [
|
||||
'/node_modules/',
|
||||
'\\.pnp\\.[^\\/]+$'
|
||||
],
|
||||
|
||||
// An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them
|
||||
// unmockedModulePathPatterns: undefined,
|
||||
|
||||
// Indicates whether each individual test should be reported during the run
|
||||
verbose: true,
|
||||
|
||||
// An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode
|
||||
// watchPathIgnorePatterns: [],
|
||||
|
||||
// Whether to use watchman for file crawling
|
||||
// watchman: true,
|
||||
testTimeout: 50000
|
||||
};
|
||||
BIN
test_tipc/web/test.jpg
Normal file
BIN
test_tipc/web/test.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 281 KiB |
Reference in New Issue
Block a user