/** * 步骤: * 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 };