mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2026-01-11 16:39:15 +08:00
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.
This commit is contained in:
parent
1295d37ff6
commit
6fcfb5c5a6
@ -7,15 +7,12 @@ const allArm64 = {
|
|||||||
'@img/sharp-darwin-arm64': '0.34.3',
|
'@img/sharp-darwin-arm64': '0.34.3',
|
||||||
'@img/sharp-win32-arm64': '0.34.3',
|
'@img/sharp-win32-arm64': '0.34.3',
|
||||||
'@img/sharp-linux-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-darwin-arm64': '1.2.0',
|
||||||
'@img/sharp-libvips-linux-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/darwin-arm64': '0.4.7',
|
||||||
'@libsql/linux-arm64-gnu': '0.4.7',
|
'@libsql/linux-arm64-gnu': '0.4.7',
|
||||||
'@libsql/linux-arm64-musl': '0.4.7',
|
|
||||||
'@strongtz/win32-arm64-msvc': '0.4.7',
|
'@strongtz/win32-arm64-msvc': '0.4.7',
|
||||||
|
|
||||||
'@napi-rs/system-ocr-darwin-arm64': '1.0.2',
|
'@napi-rs/system-ocr-darwin-arm64': '1.0.2',
|
||||||
@ -25,16 +22,13 @@ const allArm64 = {
|
|||||||
const allX64 = {
|
const allX64 = {
|
||||||
'@img/sharp-darwin-x64': '0.34.3',
|
'@img/sharp-darwin-x64': '0.34.3',
|
||||||
'@img/sharp-linux-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-win32-x64': '0.34.3',
|
||||||
|
|
||||||
'@img/sharp-libvips-darwin-x64': '1.2.0',
|
'@img/sharp-libvips-darwin-x64': '1.2.0',
|
||||||
'@img/sharp-libvips-linux-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/darwin-x64': '0.4.7',
|
||||||
'@libsql/linux-x64-gnu': '0.4.7',
|
'@libsql/linux-x64-gnu': '0.4.7',
|
||||||
'@libsql/linux-x64-musl': '0.4.7',
|
|
||||||
'@libsql/win32-x64-msvc': '0.4.7',
|
'@libsql/win32-x64-msvc': '0.4.7',
|
||||||
|
|
||||||
'@napi-rs/system-ocr-darwin-x64': '1.0.2',
|
'@napi-rs/system-ocr-darwin-x64': '1.0.2',
|
||||||
|
|||||||
@ -2,6 +2,7 @@ import { loggerService } from '@logger'
|
|||||||
import { isLinux } from '@main/constant'
|
import { isLinux } from '@main/constant'
|
||||||
import { BuiltinOcrProviderIds, OcrHandler, OcrProvider, OcrResult, SupportedOcrFile } from '@types'
|
import { BuiltinOcrProviderIds, OcrHandler, OcrProvider, OcrResult, SupportedOcrFile } from '@types'
|
||||||
|
|
||||||
|
import { systemOcrService } from './builtin/SystemOcrService'
|
||||||
import { tesseractService } from './builtin/TesseractService'
|
import { tesseractService } from './builtin/TesseractService'
|
||||||
|
|
||||||
const logger = loggerService.withContext('OcrService')
|
const logger = loggerService.withContext('OcrService')
|
||||||
@ -34,7 +35,4 @@ export const ocrService = new OcrService()
|
|||||||
// Register built-in providers
|
// Register built-in providers
|
||||||
ocrService.register(BuiltinOcrProviderIds.tesseract, tesseractService.ocr.bind(tesseractService))
|
ocrService.register(BuiltinOcrProviderIds.tesseract, tesseractService.ocr.bind(tesseractService))
|
||||||
|
|
||||||
if (!isLinux) {
|
!isLinux && ocrService.register(BuiltinOcrProviderIds.system, systemOcrService.ocr.bind(systemOcrService))
|
||||||
const { systemOcrService } = require('./builtin/SystemOcrService')
|
|
||||||
ocrService.register(BuiltinOcrProviderIds.system, systemOcrService.ocr.bind(systemOcrService))
|
|
||||||
}
|
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { isLinux, isWin } from '@main/constant'
|
import { isWin } from '@main/constant'
|
||||||
import { loadOcrImage } from '@main/utils/ocr'
|
import { loadOcrImage } from '@main/utils/ocr'
|
||||||
import {
|
import {
|
||||||
ImageFileMetadata,
|
ImageFileMetadata,
|
||||||
@ -9,6 +9,7 @@ import {
|
|||||||
} from '@types'
|
} from '@types'
|
||||||
|
|
||||||
import { OcrBaseService } from './OcrBaseService'
|
import { OcrBaseService } from './OcrBaseService'
|
||||||
|
import { OcrAccuracy, recognize } from '@napi-rs/system-ocr'
|
||||||
|
|
||||||
// const logger = loggerService.withContext('SystemOcrService')
|
// const logger = loggerService.withContext('SystemOcrService')
|
||||||
export class SystemOcrService extends OcrBaseService {
|
export class SystemOcrService extends OcrBaseService {
|
||||||
@ -17,11 +18,6 @@ export class SystemOcrService extends OcrBaseService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private async ocrImage(file: ImageFileMetadata, options?: OcrSystemConfig): Promise<OcrResult> {
|
private async ocrImage(file: ImageFileMetadata, options?: OcrSystemConfig): Promise<OcrResult> {
|
||||||
if (isLinux) {
|
|
||||||
return { text: '' }
|
|
||||||
}
|
|
||||||
|
|
||||||
const { OcrAccuracy, recognize } = require('@napi-rs/system-ocr')
|
|
||||||
const buffer = await loadOcrImage(file)
|
const buffer = await loadOcrImage(file)
|
||||||
const langs = isWin ? options?.langs : undefined
|
const langs = isWin ? options?.langs : undefined
|
||||||
const result = await recognize(buffer, OcrAccuracy.Accurate, langs)
|
const result = await recognize(buffer, OcrAccuracy.Accurate, langs)
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
import { ImageFileMetadata } from '@types'
|
import { ImageFileMetadata } from '@types'
|
||||||
import { readFile } from 'fs/promises'
|
import { readFile } from 'fs/promises'
|
||||||
|
import sharp from 'sharp'
|
||||||
|
|
||||||
const preprocessImage = async (buffer: Buffer): Promise<Buffer> => {
|
const preprocessImage = async (buffer: Buffer): Promise<Buffer> => {
|
||||||
const sharp = require('sharp')
|
|
||||||
return sharp(buffer)
|
return sharp(buffer)
|
||||||
.grayscale() // 转为灰度
|
.grayscale() // 转为灰度
|
||||||
.normalize()
|
.normalize()
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user