From 6fcfb5c5a66b07eecae18239c6784f6b8a378712 Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Tue, 2 Sep 2025 08:39:21 +0800 Subject: [PATCH] refactor(ocr): streamline OCR service registration and improve image preprocessing - Simplified the registration of the system OCR service by removing the conditional check for Linux. - Updated SystemOcrService to directly import necessary modules, enhancing clarity. - Refactored image preprocessing to use a static import of the 'sharp' library for better performance. --- scripts/before-pack.js | 6 ------ src/main/services/ocr/OcrService.ts | 6 ++---- src/main/services/ocr/builtin/SystemOcrService.ts | 8 ++------ src/main/utils/ocr.ts | 2 +- 4 files changed, 5 insertions(+), 17 deletions(-) diff --git a/scripts/before-pack.js b/scripts/before-pack.js index f0d4bdb096..59c0a39171 100644 --- a/scripts/before-pack.js +++ b/scripts/before-pack.js @@ -7,15 +7,12 @@ const allArm64 = { '@img/sharp-darwin-arm64': '0.34.3', '@img/sharp-win32-arm64': '0.34.3', '@img/sharp-linux-arm64': '0.34.3', - '@img/sharp-linuxmusl-arm64': '0.34.3', '@img/sharp-libvips-darwin-arm64': '1.2.0', '@img/sharp-libvips-linux-arm64': '1.2.0', - '@img/sharp-libvips-linuxmusl-arm64': '1.2.0', '@libsql/darwin-arm64': '0.4.7', '@libsql/linux-arm64-gnu': '0.4.7', - '@libsql/linux-arm64-musl': '0.4.7', '@strongtz/win32-arm64-msvc': '0.4.7', '@napi-rs/system-ocr-darwin-arm64': '1.0.2', @@ -25,16 +22,13 @@ const allArm64 = { const allX64 = { '@img/sharp-darwin-x64': '0.34.3', '@img/sharp-linux-x64': '0.34.3', - '@img/sharp-linuxmusl-x64': '0.34.3', '@img/sharp-win32-x64': '0.34.3', '@img/sharp-libvips-darwin-x64': '1.2.0', '@img/sharp-libvips-linux-x64': '1.2.0', - '@img/sharp-libvips-linuxmusl-x64': '1.2.0', '@libsql/darwin-x64': '0.4.7', '@libsql/linux-x64-gnu': '0.4.7', - '@libsql/linux-x64-musl': '0.4.7', '@libsql/win32-x64-msvc': '0.4.7', '@napi-rs/system-ocr-darwin-x64': '1.0.2', diff --git a/src/main/services/ocr/OcrService.ts b/src/main/services/ocr/OcrService.ts index 20ea201226..dfd796346f 100644 --- a/src/main/services/ocr/OcrService.ts +++ b/src/main/services/ocr/OcrService.ts @@ -2,6 +2,7 @@ import { loggerService } from '@logger' import { isLinux } from '@main/constant' import { BuiltinOcrProviderIds, OcrHandler, OcrProvider, OcrResult, SupportedOcrFile } from '@types' +import { systemOcrService } from './builtin/SystemOcrService' import { tesseractService } from './builtin/TesseractService' const logger = loggerService.withContext('OcrService') @@ -34,7 +35,4 @@ export const ocrService = new OcrService() // Register built-in providers ocrService.register(BuiltinOcrProviderIds.tesseract, tesseractService.ocr.bind(tesseractService)) -if (!isLinux) { - const { systemOcrService } = require('./builtin/SystemOcrService') - ocrService.register(BuiltinOcrProviderIds.system, systemOcrService.ocr.bind(systemOcrService)) -} +!isLinux && ocrService.register(BuiltinOcrProviderIds.system, systemOcrService.ocr.bind(systemOcrService)) diff --git a/src/main/services/ocr/builtin/SystemOcrService.ts b/src/main/services/ocr/builtin/SystemOcrService.ts index f6fcfe32a7..50e2a4ff29 100644 --- a/src/main/services/ocr/builtin/SystemOcrService.ts +++ b/src/main/services/ocr/builtin/SystemOcrService.ts @@ -1,4 +1,4 @@ -import { isLinux, isWin } from '@main/constant' +import { isWin } from '@main/constant' import { loadOcrImage } from '@main/utils/ocr' import { ImageFileMetadata, @@ -9,6 +9,7 @@ import { } from '@types' import { OcrBaseService } from './OcrBaseService' +import { OcrAccuracy, recognize } from '@napi-rs/system-ocr' // const logger = loggerService.withContext('SystemOcrService') export class SystemOcrService extends OcrBaseService { @@ -17,11 +18,6 @@ export class SystemOcrService extends OcrBaseService { } private async ocrImage(file: ImageFileMetadata, options?: OcrSystemConfig): Promise { - if (isLinux) { - return { text: '' } - } - - const { OcrAccuracy, recognize } = require('@napi-rs/system-ocr') const buffer = await loadOcrImage(file) const langs = isWin ? options?.langs : undefined const result = await recognize(buffer, OcrAccuracy.Accurate, langs) diff --git a/src/main/utils/ocr.ts b/src/main/utils/ocr.ts index d94fb002d1..446fbe63d6 100644 --- a/src/main/utils/ocr.ts +++ b/src/main/utils/ocr.ts @@ -1,8 +1,8 @@ import { ImageFileMetadata } from '@types' import { readFile } from 'fs/promises' +import sharp from 'sharp' const preprocessImage = async (buffer: Buffer): Promise => { - const sharp = require('sharp') return sharp(buffer) .grayscale() // 转为灰度 .normalize()