71 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import { createScheduler, createWorker } from 'tesseract.js'
 | 
						|
import { GetAreaById, GetDocumentById, RequestAddProcessedArea, RequestSaveProcessedTextCollection } from '../wailsjs/wailsjs/go/ipc/Channel'
 | 
						|
import { ipc } from '../wailsjs/wailsjs/go/models'
 | 
						|
import loadImage from './loadImage'
 | 
						|
import { saveProcessedText } from './saveData'
 | 
						|
 | 
						|
const processImageArea = async (documentId: string, areaId: string) => {
 | 
						|
  const foundDocument = await GetDocumentById(documentId)
 | 
						|
  const foundArea = await GetAreaById(areaId)
 | 
						|
  if (!foundDocument.path || !foundDocument.areas?.length || !foundArea.id) return
 | 
						|
 | 
						|
  const processLanguage = foundDocument.defaultLanguage.processCode
 | 
						|
 | 
						|
  if (!processLanguage) return console.error('No process language selected')
 | 
						|
 | 
						|
  const { path } = foundDocument
 | 
						|
  const imageData = await loadImage(path)
 | 
						|
 | 
						|
  const scheduler = createScheduler()
 | 
						|
  const worker = await createWorker()
 | 
						|
  await worker.loadLanguage(processLanguage)
 | 
						|
  await worker.initialize(processLanguage)
 | 
						|
  scheduler.addWorker(worker)
 | 
						|
 | 
						|
  const result = await scheduler.addJob('recognize', imageData, {
 | 
						|
    rectangle: {
 | 
						|
      left: foundArea.startX,
 | 
						|
      top: foundArea.startY,
 | 
						|
      width: foundArea.endX - foundArea.startX,
 | 
						|
      height: foundArea.endY - foundArea.startY,
 | 
						|
    }
 | 
						|
  })
 | 
						|
 | 
						|
  const addProcessesAreaRequest = await RequestAddProcessedArea(new ipc.ProcessedArea({
 | 
						|
    id: foundArea.id,
 | 
						|
    documentId,
 | 
						|
    order: foundArea.order,
 | 
						|
    fullText: result.data.text,
 | 
						|
    lines: result.data.lines.map((l: any) => new ipc.ProcessedLine({
 | 
						|
      fullText: l.text,
 | 
						|
      words: l.words.map((w: any) => new ipc.ProcessedWord({
 | 
						|
        fullText: w.text,
 | 
						|
        direction: w.direction,
 | 
						|
        confidence: w.confidence,
 | 
						|
        boundingBox: new ipc.ProcessedBoundingBox({
 | 
						|
          x0: w.bbox.x0,
 | 
						|
          y0: w.bbox.y0,
 | 
						|
          x1: w.bbox.x1,
 | 
						|
          y1: w.bbox.y1,
 | 
						|
        }),
 | 
						|
        symbols: w.symbols.map((s: any) => new ipc.ProcessedSymbol({
 | 
						|
          fullText: s.text,
 | 
						|
          confidence: s.confidence,
 | 
						|
          boundingBox: new ipc.ProcessedBoundingBox({
 | 
						|
            x0: s.bbox.x0,
 | 
						|
            y0: s.bbox.y0,
 | 
						|
            x1: s.bbox.x1,
 | 
						|
            y1: s.bbox.y1,
 | 
						|
          })
 | 
						|
        }))
 | 
						|
      }))
 | 
						|
    }))
 | 
						|
  }))
 | 
						|
 | 
						|
  saveProcessedText()
 | 
						|
 | 
						|
  return addProcessesAreaRequest
 | 
						|
}
 | 
						|
 | 
						|
export default processImageArea
 |