| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- /**
- * 步骤:
- * 1. 创建start()函数
- * 2. 创建变量imagePath储存图片路径:C:\Users\Zhuanz\Desktop\AIStoryBoard\static\漫画\image\鬼-巷第001卷\第一章\0004_鬼-巷第001卷.jpeg
- * 3. 创建变量outputDir储存输出目录:C:\Users\Zhuanz\Desktop\AIStoryBoard\static\漫画\image\鬼-巷第001卷\第一章\test
- * 4. 调用comic-text-detector.js生成文字遮罩图(保存到test/tmp目录)
- * 5. 调用check-reg.js检测格子,并绘制出来格子图片
- * 6. 调用merge-image.js合并带绿色框的文字区域图片和格子图片
- * 7. 调用cut-check.js切割黑线(不是绿线的)格子(按从右到左、从上到下顺序)
- * 8. 调用cut-dialog-block.js 切割绿色线框
- * 9. 调用ocr.js依次识别文件夹下的图片,生成识别结果的json文件
- * 10. 调用sort-dialog.js整理语句块的排序,返回结果。
- * 11. 调用sort-sentence.js整理所有check文件夹下的识别结果json,根据x1越大越靠前的原则排序,生成check.txt文件
- * 12. 使用generate-dialog-json.js 接收sort-dialog.js返回的结果,生成对话JSON,保存到outputDir目录
- */
- import fs from 'fs';
- import path from 'path';
- import { fileURLToPath } from 'url';
- import { startComicTextDetector } from '../comic-text-detector.js';
- import { startCheckReg as startCheckReg } from '../check-reg.js';
- import { startMergeImage as startMergeImage } from '../merge-image.js';
- import { startCutCheck as startCutCheck } from '../cut-check.js';
- import { startCutDialogBlock as startCutDialogBlock } from '../cut-dialog-block.js';
- import { startOcr as startOcr } from '../ocr.js';
- import { startSortSentence as startSortSentence } from '../sort-sentence.js';
- import { startSortDialog as startSortDialog } from '../sort-dialog.js';
- import { startGenerateDialogJson as startGenerateDialogJson } from '../generate-dialog-json.js';
- const __filename = fileURLToPath(import.meta.url);
- const __dirname = path.dirname(__filename);
- /**
- * 获取项目根目录
- */
- function getProjectRoot() {
- return path.join(__dirname, '..', '..');
- }
- // 创建变量projectRoot储存项目根目录
- const projectRoot = getProjectRoot();
- // 创建变量rootPath储存根目录
- const rootPath = path.join(
- projectRoot,
- 'static',
- '漫画',
- 'image',
- '鬼-巷第001卷',
- '第一章'
- );
- const imageName = '0005_鬼-巷第001卷';
- // 创建变量imagePath储存图片路径
- let originImagePath = path.join(
- rootPath,
- `${imageName}.jpeg`
- );
- // 创建变量储存输出目录
- let outputDir = path.join(
- rootPath,
- 'test3'
- );
- let tmpDir = path.join(
- outputDir,
- 'tmp'
- );
- // 创建变量textMaskPath储存文字遮罩图路径
- let textGreenPanelImgPath = path.join(
- tmpDir,
- `${imageName}_text_green_panel.png`
- );
- // 创建变量textBlocksJsonPath储存文字区域json文件路径
- let textBlocksJsonPath = path.join(
- tmpDir,
- `${imageName}_text_blocks.json`
- );
- // 漫画格子外轮廓位置json文件路径
- let textCheckRegionJsonPath = path.join(
- tmpDir,
- `${imageName}_text_check_region.json`
- );
- //漫画格子外轮廓图片
- let panelImgPath = path.join(
- tmpDir,
- `${imageName}_panel_img.png`
- );
- // 合并后的图片路径
- let mergedImgPath = path.join(
- tmpDir,
- `${imageName}_merged.png`
- );
- //根据漫画格子切割分类好的图片目录
- let cutPanelImgDir = path.join(
- tmpDir,
- 'cut-panel-img'
- );
- let resultDialogJsonPath = path.join(
- outputDir,
- `${imageName}_dialog.json`
- );
- /**
- * 步骤1: 创建start()函数
- */
- // 执行start函数
- if (import.meta.url === `file://${path.resolve(process.argv[1])}` ||
- process.argv[1]?.endsWith('test-ocr.js')) {
- start();
- }
- async function start() {
- console.log(`步骤1: test-ocr.js 开始测试`);
- console.log(`步骤2: 获取图片路径`);
- if (!fs.existsSync(originImagePath)) {
- throw new Error(`图片不存在: ${originImagePath}`);
- }
- console.log(`步骤3: 获取输出目录`);
-
-
- if (!fs.existsSync(outputDir)) {
- // 创建输出目录
- fs.mkdirSync(outputDir, { recursive: true });
- }
- console.log(`步骤4: 调用comic-text-detector`);
- // 使用超细文字配置,2次腐蚀让文字更细但仍然可见
- await startComicTextDetector(originImagePath,textGreenPanelImgPath, textBlocksJsonPath);
- console.log(`步骤5: 调用check-reg`);
- await startCheckReg(originImagePath,textCheckRegionJsonPath, panelImgPath);
- console.log(`步骤6: 调用merge-image`);
- await startMergeImage(textGreenPanelImgPath,panelImgPath,mergedImgPath);
- console.log(`步骤7: 调用cut-check.js`);
- let cutCheckResultArr = await startCutCheck(mergedImgPath,cutPanelImgDir);
- console.log(`步骤8: 调用cut-dialog-block`);
- let cutDialogBlockImgNameArr = await startCutDialogBlock(cutPanelImgDir,cutCheckResultArr);
- console.log(`步骤9: 调用ocr`);
- let ocrResultJsonPathArr = await startOcr(cutDialogBlockImgNameArr);
- console.log(`步骤10: 调用sort-sentence`);
- let ocrTxtResultArr = await startSortSentence(ocrResultJsonPathArr);
- console.log(`步骤11: 调用sort-dialog`);
- let sortDialogTxtResultArr = await startSortDialog(ocrTxtResultArr);
- console.log(`步骤12: 调用generate-dialog-json`);
- await startGenerateDialogJson(sortDialogTxtResultArr,resultDialogJsonPath);
- }
- export { start };
|