{"id":14973215,"url":"https://github.com/id1945/ngx-scanner-text","last_synced_at":"2025-04-24T09:31:38.369Z","repository":{"id":58824675,"uuid":"533381909","full_name":"id1945/ngx-scanner-text","owner":"id1945","description":"This library is built to support optical character recognition (OCR) from images provided as urls. The core is based on Tesseract, supporting over 100 national languages ​​worldwide.","archived":false,"fork":false,"pushed_at":"2023-06-28T17:10:27.000Z","size":1103,"stargazers_count":1,"open_issues_count":0,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-30T12:01:58.101Z","etag":null,"topics":["angular","angular-ngx-scanner-text","angular2","angular4","card","dynamsoft","easy-tesseract-ocr","machine","mrz","mrz-codes","mrz-scanner","ngx-mrz-sdk","ngx-scanner-text","ocr","ocr-recognition","passport","scanner-text","smart","tesseract-ocr","tesseractjs"],"latest_commit_sha":null,"homepage":"https://id1945.github.io/ngx-scanner-text/","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/id1945.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-09-06T15:15:05.000Z","updated_at":"2024-12-16T16:12:19.000Z","dependencies_parsed_at":"2023-01-18T13:46:06.577Z","dependency_job_id":null,"html_url":"https://github.com/id1945/ngx-scanner-text","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/id1945%2Fngx-scanner-text","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/id1945%2Fngx-scanner-text/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/id1945%2Fngx-scanner-text/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/id1945%2Fngx-scanner-text/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/id1945","download_url":"https://codeload.github.com/id1945/ngx-scanner-text/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250600709,"owners_count":21457012,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["angular","angular-ngx-scanner-text","angular2","angular4","card","dynamsoft","easy-tesseract-ocr","machine","mrz","mrz-codes","mrz-scanner","ngx-mrz-sdk","ngx-scanner-text","ocr","ocr-recognition","passport","scanner-text","smart","tesseract-ocr","tesseractjs"],"created_at":"2024-09-24T13:48:23.685Z","updated_at":"2025-04-24T09:31:37.836Z","avatar_url":"https://github.com/id1945.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ngx-scanner-text\n\nThis library is built to support optical character recognition (OCR) from images provided as urls.\\\nThe core is based on Tesseract, supporting over 100 national languages ​​worldwide.\\\nThis demo [codesandbox](https://codesandbox.io/s/angular-ngx-scanner-text-16856z?file=/src/app/app.component.ts), [github](https://id1945.github.io/ngx-scanner-text/).\n\n![Logo](https://raw.githubusercontent.com/id1945/ngx-scanner-text/master/ngx-scanner-text-mark.png)\n\n### Installation :gear:\n```\nnpm install ngx-scanner-text@\u003cversion\u003e --save\n```\n\n### Usage :syringe:\n```typescript \nimport { NgxScannerTextModule } from \"ngx-scanner-text\";\n\n@NgModule({\n    imports: [NgxScannerTextModule],\n})\nexport class AppModule {}\n```\n\n\u003cdetails\u003e\u003csummary\u003e\u003cb\u003eAppComponent :hammer_and_wrench:\u003c/b\u003e\u003c/summary\u003e\n\n```html\n\u003cngx-scanner-text #scanner=\"scanner\" [configs]=\"configs\" (event)=\"onData($event)\"\u003e\u003c/ngx-scanner-text\u003e\n\u003cbutton (click)=\"onScanOCR(scanner)\"\u003eScan\u003c/button\u003e\n\n\u003ctextarea\u003e{{ scanner?.logger$ | async | json }}\u003c/textarea\u003e\n\u003ctextarea\u003e{{ text }}\u003c/textarea\u003e\n```\n\n```typescript\nimport { ChangeDetectorRef, Component } from \"@angular/core\";\nimport { NgxScannerTextComponent, Configs, Page } from \"ngx-scanner-text\";\n\n@Component({\n  selector: \"app-root\",\n  templateUrl: \"./app.component.html\",\n  styleUrls: [\"./app.component.scss\"]\n})\nexport class AppComponent {\n  public text: string;\n\n  public configs: Configs = {\n    src: 'https://raw.githubusercontent.com/id1945/ngx-scanner-text/master/ngx-scanner-text-origin.png',\n    languages: ['eng'],\n    color: 'red',\n    isAuto: true,\n    isImage: false,\n    options: {\n      rectangle: {\n        left: 70,\n        top: 100,\n        width: 700,\n        height: 200\n      }\n    }\n  };\n\n  constructor(private cdf: ChangeDetectorRef) {}\n\n  onData(data: Page) {\n    this.text = data.text;\n    this.cdf.detectChanges();\n  }\n\n  onScanOCR(scanner: NgxScannerTextComponent) {\n    scanner.scanOCR(this.configs).subscribe(console.log);\n  }\n}\n```\n\u003c/details\u003e\n\n\n\u003cdetails\u003e\u003csummary\u003e\u003cb\u003eModels :satellite:\u003c/b\u003e\u003c/summary\u003e\n\n```typescript\nexport interface Configs {\n  src: string;\n  color: string;\n  isAuto: boolean;\n  isImage: boolean;\n  languages: string[];\n  jobId?: string;\n  output?: Partial\u003cOutputFormats\u003e;\n  options?: Partial\u003cRecognizeOptions\u003e;\n};\n\nexport interface Scheduler {\n  addWorker(worker: Worker): string;\n  addJob(\n    action: 'recognize',\n    ...args: Parameters\u003cWorker['recognize']\u003e\n  ): Promise\u003cRecognizeResult\u003e;\n  addJob(\n    action: 'detect',\n    ...args: Parameters\u003cWorker['detect']\u003e\n  ): Promise\u003cDetectResult\u003e;\n  terminate(): Promise\u003cany\u003e;\n  getQueueLen(): number;\n  getNumWorkers(): number;\n}\n\nexport interface Worker {\n  load(jobId?: string): Promise\u003cConfigResult\u003e;\n  writeText(path: string, text: string, jobId?: string): Promise\u003cConfigResult\u003e;\n  readText(path: string, jobId?: string): Promise\u003cConfigResult\u003e;\n  removeText(path: string, jobId?: string): Promise\u003cConfigResult\u003e;\n  FS(method: string, args: any[], jobId?: string): Promise\u003cConfigResult\u003e;\n  loadLanguage(langs?: string | Lang[], jobId?: string): Promise\u003cConfigResult\u003e;\n  initialize(\n    langs?: string | Lang[],\n    oem?: OEM,\n    config?: string | Partial\u003cInitOptions\u003e,\n    jobId?: string\n  ): Promise\u003cConfigResult\u003e;\n  setParameters(\n    params: Partial\u003cWorkerParams\u003e,\n    jobId?: string\n  ): Promise\u003cConfigResult\u003e;\n  getImage(type: imageType): string;\n  recognize(\n    image: ImageLike,\n    options?: Partial\u003cRecognizeOptions\u003e,\n    output?: Partial\u003cOutputFormats\u003e,\n    jobId?: string\n  ): Promise\u003cRecognizeResult\u003e;\n  detect(image: ImageLike, jobId?: string): Promise\u003cDetectResult\u003e;\n  terminate(jobId?: string): Promise\u003cConfigResult\u003e;\n  getPDF(\n    title?: string,\n    textonly?: boolean,\n    jobId?: string\n  ): Promise\u003cGetPDFResult\u003e;\n}\n\nexport interface Lang {\n  code: string;\n  data: unknown;\n}\n\nexport interface InitOptions {\n  load_system_dawg: string;\n  load_freq_dawg: string;\n  load_unambig_dawg: string;\n  load_punc_dawg: string;\n  load_number_dawg: string;\n  load_bigram_dawg: string;\n}\n\nexport type LoggerMessage = {\n  jobId: string;\n  progress: number;\n  status: string;\n  userJobId: string;\n  workerId: string;\n};\n\nexport interface WorkerOptions {\n  corePath: string;\n  langPath: string;\n  cachePath: string;\n  dataPath: string;\n  workerPath: string;\n  cacheMethod: string;\n  workerBlobURL: boolean;\n  gzip: boolean;\n  logger: (arg: LoggerMessage) =\u003e void;\n  errorHandler: (arg: any) =\u003e void;\n}\n\nexport interface WorkerParams {\n  tessedit_ocr_engine_mode: OEM;\n  tessedit_pageseg_mode: PSM;\n  tessedit_char_whitelist: string;\n  preserve_interword_spaces: string;\n  user_defined_dpi: string;\n  tessjs_create_hocr: string;\n  tessjs_create_tsv: string;\n  tessjs_create_box: string;\n  tessjs_create_unlv: string;\n  tessjs_create_osd: string;\n}\n\nexport interface OutputFormats {\n  text: boolean;\n  blocks: boolean;\n  layoutBlocks: boolean;\n  hocr: boolean;\n  tsv: boolean;\n  box: boolean;\n  unlv: boolean;\n  osd: boolean;\n  pdf: boolean;\n  imageColor: boolean;\n  imageGrey: boolean;\n  imageBinary: boolean;\n  debug: boolean;\n}\n\nexport interface RecognizeOptions {\n  rectangle: Rectangle;\n  pdfTitle: string;\n  pdfTextOnly: boolean;\n  rotateAuto: boolean;\n  rotateRadians: number;\n}\n\nexport interface ConfigResult {\n  jobId: string;\n  data: any;\n}\n\nexport interface RecognizeResult {\n  jobId: string;\n  data: Page;\n}\n\nexport interface GetPDFResult {\n  jobId: string;\n  data: number[];\n}\n\nexport interface DetectResult {\n  jobId: string;\n  data: DetectData;\n}\n\nexport interface DetectData {\n  tesseract_script_id: number | null;\n  script: string | null;\n  script_confidence: number | null;\n  orientation_degrees: number | null;\n  orientation_confidence: number | null;\n}\n\nexport interface Rectangle {\n  left: number;\n  top: number;\n  width: number;\n  height: number;\n}\n\nexport enum OEM {\n  TESSERACT_ONLY,\n  LSTM_ONLY,\n  TESSERACT_LSTM_COMBINED,\n  DEFAULT,\n}\n\nexport enum PSM {\n  OSD_ONLY = '0',\n  AUTO_OSD = '1',\n  AUTO_ONLY = '2',\n  AUTO = '3',\n  SINGLE_COLUMN = '4',\n  SINGLE_BLOCK_VERT_TEXT = '5',\n  SINGLE_BLOCK = '6',\n  SINGLE_LINE = '7',\n  SINGLE_WORD = '8',\n  CIRCLE_WORD = '9',\n  SINGLE_CHAR = '10',\n  SPARSE_TEXT = '11',\n  SPARSE_TEXT_OSD = '12',\n  RAW_LINE = '13',\n}\n\nexport const enum imageType {\n  COLOR = 0,\n  GREY = 1,\n  BINARY = 2,\n}\n\nexport type ImageLike =\n  | string\n  | HTMLImageElement\n  | HTMLCanvasElement\n  | HTMLVideoElement\n  | CanvasRenderingContext2D\n  | File\n  | Blob\n  | ImageData\n  | any;\n\nexport interface Block {\n  paragraphs: Paragraph[];\n  text: string;\n  confidence: number;\n  baseline: Baseline;\n  bbox: Bbox;\n  blocktype: string;\n  polygon: any;\n  page: Page;\n  lines: Line[];\n  words: Word[];\n  symbols: Symbol[];\n}\n\nexport interface Baseline {\n  x0: number;\n  y0: number;\n  x1: number;\n  y1: number;\n  has_baseline: boolean;\n}\n\nexport interface Bbox {\n  x0: number;\n  y0: number;\n  x1: number;\n  y1: number;\n}\n\nexport interface Line {\n  words: Word[];\n  text: string;\n  confidence: number;\n  baseline: Baseline;\n  bbox: Bbox;\n  paragraph: Paragraph;\n  block: Block;\n  page: Page;\n  symbols: Symbol[];\n}\n\nexport interface Paragraph {\n  lines: Line[];\n  text: string;\n  confidence: number;\n  baseline: Baseline;\n  bbox: Bbox;\n  is_ltr: boolean;\n  block: Block;\n  page: Page;\n  words: Word[];\n  symbols: Symbol[];\n}\n\nexport interface Symbol {\n  choices: Choice[];\n  image: any;\n  text: string;\n  confidence: number;\n  baseline: Baseline;\n  bbox: Bbox;\n  is_superscript: boolean;\n  is_subscript: boolean;\n  is_dropcap: boolean;\n  word: Word;\n  line: Line;\n  paragraph: Paragraph;\n  block: Block;\n  page: Page;\n}\n\nexport interface Choice {\n  text: string;\n  confidence: number;\n}\n\nexport interface Word {\n  symbols: Symbol[];\n  choices: Choice[];\n  text: string;\n  confidence: number;\n  baseline: Baseline;\n  bbox: Bbox;\n  is_numeric: boolean;\n  in_dictionary: boolean;\n  direction: string;\n  language: string;\n  is_bold: boolean;\n  is_italic: boolean;\n  is_underlined: boolean;\n  is_monospace: boolean;\n  is_serif: boolean;\n  is_smallcaps: boolean;\n  font_size: number;\n  font_id: number;\n  font_name: string;\n  line: Line;\n  paragraph: Paragraph;\n  block: Block;\n  page: Page;\n}\n\nexport interface Page {\n  blocks: Block[] | null;\n  confidence: number;\n  lines: Line[];\n  oem: string;\n  osd: string;\n  paragraphs: Paragraph[];\n  psm: string;\n  symbols: Symbol[];\n  text: string;\n  version: string;\n  words: Word[];\n  hocr: string | null;\n  tsv: string | null;\n  box: string | null;\n  unlv: string | null;\n  sd: string | null;\n  imageColor: string | null;\n  imageGrey: string | null;\n  imageBinary: string | null;\n  rotateRadians: number | null;\n  pdf: number[] | null;\n}\n```\n\u003c/details\u003e\n\n\n\u003cdetails\u003e\u003csummary\u003e\u003cb\u003eLanguage support :satellite:\u003c/b\u003e\u003c/summary\u003e\n\n```json\n[\n  {\n    \"name\": \"Afrikaans\",\n    \"code\": \"afr\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Albanian\",\n    \"code\": \"qi\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Amharic\",\n    \"code\": \"amh\",\n    \"dir\": \"rtl\"\n  },\n  {\n    \"name\": \"Arabic\",\n    \"code\": \"ara\",\n    \"dir\": \"rtl\"\n  },\n  {\n    \"name\": \"Armenian\",\n    \"code\": \"hye\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Azerbaijani\",\n    \"code\": \"aze\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Basque\",\n    \"code\": \"eus\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Belarusian\",\n    \"code\": \"bel\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Bengali\",\n    \"code\": \"ben\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Bosnian\",\n    \"code\": \"bos\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Bulgarian\",\n    \"code\": \"bul\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Catalan\",\n    \"code\": \"cat\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Cebuano\",\n    \"code\": \"ceb\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Cherokee\",\n    \"code\": \"chr\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Chinese (Simplified)\",\n    \"code\": \"chi_sim\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Chinese (Traditional)\",\n    \"code\": \"chi_tra\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Corsican\",\n    \"code\": \"cos\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Croatian\",\n    \"code\": \"hrv\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Czech\",\n    \"code\": \"ces\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Danish\",\n    \"code\": \"dan\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Dutch\",\n    \"code\": \"nld\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"English\",\n    \"code\": \"eng\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Esperanto\",\n    \"code\": \"epo\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Estonian\",\n    \"code\": \"est\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Finnish\",\n    \"code\": \"fin\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"French\",\n    \"code\": \"fra\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Frisian\",\n    \"code\": \"fry\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Galician\",\n    \"code\": \"glg\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Georgian\",\n    \"code\": \"kat\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"German\",\n    \"code\": \"deu\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Greek\",\n    \"code\": \"ell\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Gujarati\",\n    \"code\": \"guj\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Haitian Creole\",\n    \"code\": \"hat\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Hausa\",\n    \"code\": \"hau\",\n    \"dir\": \"rtl\"\n  },\n  {\n    \"name\": \"Hebrew\",\n    \"code\": \"heb\",\n    \"dir\": \"rtl\"\n  },\n  {\n    \"name\": \"Hindi\",\n    \"code\": \"hin\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Hungarian\",\n    \"code\": \"hun\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Icelandic\",\n    \"code\": \"isl\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Igbo\",\n    \"code\": \"ibo\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Indonesian\",\n    \"code\": \"ind\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Irish\",\n    \"code\": \"gle\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Italian\",\n    \"code\": \"ita\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Japanese\",\n    \"code\": \"jpn\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Javanese\",\n    \"code\": \"jav\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Kannada\",\n    \"code\": \"kan\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Kazakh\",\n    \"code\": \"kaz\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Khmer\",\n    \"code\": \"khm\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Kinyarwanda\",\n    \"code\": \"kin\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Korean\",\n    \"code\": \"kor\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Kurdish (Kurmanji)\",\n    \"code\": \"kur_ara\",\n    \"dir\": \"rtl\"\n  },\n  {\n    \"name\": \"Kyrgyz\",\n    \"code\": \"kir\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Lao\",\n    \"code\": \"lao\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Latin\",\n    \"code\": \"lat\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Latvian\",\n    \"code\": \"lav\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Lithuanian\",\n    \"code\": \"lit\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Luxembourgish\",\n    \"code\": \"ltz\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Macedonian\",\n    \"code\": \"kd\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Malagasy\",\n    \"code\": \"lg\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Malay\",\n    \"code\": \"sa\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Malayalam\",\n    \"code\": \"al\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Maltese\",\n    \"code\": \"lt\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Maori\",\n    \"code\": \"i\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Marathi\",\n    \"code\": \"ar\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Mongolian\",\n    \"code\": \"on\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Myanmar (Burmese)\",\n    \"code\": \"ya\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Nepali\",\n    \"code\": \"nep\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Norwegian\",\n    \"code\": \"nor\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Odia (Oriya)\",\n    \"code\": \"ori\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Pashto\",\n    \"code\": \"pus\",\n    \"dir\": \"rtl\"\n  },\n  {\n    \"name\": \"Persian\",\n    \"code\": \"fas\",\n    \"dir\": \"rtl\"\n  },\n  {\n    \"name\": \"Polish\",\n    \"code\": \"pol\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Portuguese\",\n    \"code\": \"por\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Punjabi\",\n    \"code\": \"pan\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Romanian\",\n    \"code\": \"ron\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Russian\",\n    \"code\": \"rus\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Samoan\",\n    \"code\": \"mo\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Scots Gaelic\",\n    \"code\": \"gla\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Serbian\",\n    \"code\": \"rp\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Sesotho\",\n    \"code\": \"ot\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Shona\",\n    \"code\": \"na\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Sindhi\",\n    \"code\": \"d\",\n    \"dir\": \"rtl\"\n  },\n  {\n    \"name\": \"Sinhala (Sinhalese)\",\n    \"code\": \"in\",\n    \"dir\": \"in\"\n  },\n  {\n    \"name\": \"Slovak\",\n    \"code\": \"k\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Slovenian\",\n    \"code\": \"l\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Somali\",\n    \"code\": \"o\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Spanish\",\n    \"code\": \"pa\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Sundanese\",\n    \"code\": \"u\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Swahili\",\n    \"code\": \"wa\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Swedish\",\n    \"code\": \"we\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Tajik\",\n    \"code\": \"tg\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Tamil\",\n    \"code\": \"ta\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Tatar\",\n    \"code\": \"tt\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Telugu\",\n    \"code\": \"te\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Thai\",\n    \"code\": \"th\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Turkish\",\n    \"code\": \"tur\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Ukrainian\",\n    \"code\": \"ukr\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Urdu\",\n    \"code\": \"urd\",\n    \"dir\": \"rtl\"\n  },\n  {\n    \"name\": \"Uzbek\",\n    \"code\": \"uzb\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Vietnamese\",\n    \"code\": \"vie\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Welsh\",\n    \"code\": \"cym\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Xhosa\",\n    \"code\": \"xho\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Yiddish\",\n    \"code\": \"yi\",\n    \"dir\": \"rtl\"\n  },\n  {\n    \"name\": \"Yoruba\",\n    \"code\": \"yo\",\n    \"dir\": \"ltr\"\n  },\n  {\n    \"name\": \"Zulu\",\n    \"code\": \"zu\",\n    \"dir\": \"ltr\"\n  }\n]\n```\n\n```\nNote that the `dir` property indicates the direction of the language,\nwhere `ltr` means left-to-right and `rtl` means right-to-left.\n```\n\u003c/details\u003e\n\n\n### API Documentation :rescue_worker_helmet:\n\n#### Input :electric_plug:\n\n|   Field   |   Description   |   Type  | Default |\n|   ---     |       ---       |   ---   | ---     |\n| [configs] | config          | Configs | {}      |\n\n#### Ouput :electric_plug:\n\n| Field     | Description   | Type                    | Default |\n| ---       | ---           | ---                     | ---     |\n| (event)   | result data   | BehaviorSubject\u003cPage\u003e   | {}      |\n\n#### Component exports :electric_plug:\n\n| Field   | Description       | Type                    | Default               |\n| ---     | ---               | ---                     | ---                   |\n| data$   | result data       | BehaviorSubject\u003cPage\u003e   | {}                    | \n| logger$ | status            | BehaviorSubject         | {}                    | \n| image$  | actual photo size | BehaviorSubject         | {width: 0, height: 0} | \n\n\n#### Support versions\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003cth colspan=\"2\"\u003eSupport versions\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eAngular 16\u003c/td\u003e\n    \u003ctd\u003e1.1.0\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eAngular 14\u003c/td\u003e\n    \u003ctd\u003e1.0.9\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n#### Author Information\n  \n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003cth colspan=\"2\"\u003eAuthor Information\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eAuthor\u003c/td\u003e\n    \u003ctd\u003eDaiDH\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003ePhone\u003c/td\u003e\n    \u003ctd\u003e+84845882882\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eCountry\u003c/td\u003e\n    \u003ctd\u003eVietnam\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n#### If you want donate for me! :moneybag:\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003cth\u003eBitcoin\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003cimg src=\"https://raw.githubusercontent.com/id1945/id1945/master/donate-bitcoin.png\" width=\"182px\"\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n![Vietnam](https://raw.githubusercontent.com/id1945/id1945/master/vietnam.gif)\n\n[MIT License](https://github.com/id1945/ngx-scanner-text/blob/master/LICENSE) Copyright (c) 2022 DaiDH\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fid1945%2Fngx-scanner-text","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fid1945%2Fngx-scanner-text","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fid1945%2Fngx-scanner-text/lists"}