{"id":21089373,"url":"https://github.com/id1945/ngx-scanner-qrcode","last_synced_at":"2025-04-04T10:07:36.021Z","repository":{"id":60035407,"uuid":"464317846","full_name":"id1945/ngx-scanner-qrcode","owner":"id1945","description":"This library is built to provide a solution scanner QR code. This library takes in raw images and will locate, extract and parse any QR code found within.","archived":false,"fork":false,"pushed_at":"2024-11-24T06:30:40.000Z","size":2933,"stargazers_count":59,"open_issues_count":9,"forks_count":29,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-03-28T09:07:18.690Z","etag":null,"topics":["angular","angular2","barcode","camera","camera-scanner","code","code-128","codebar","databar","ean","qr","qr-codes","qrcode","qrcode-decoder","qrcode-detector","qrcode-encoder","qrcode-reader","scanner","scanner-web","upc"],"latest_commit_sha":null,"homepage":"https://id1945.github.io/ngx-scanner-qrcode","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-2.1","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":"supported-barcode-types.png","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-02-28T02:54:25.000Z","updated_at":"2025-03-20T18:39:50.000Z","dependencies_parsed_at":"2025-01-16T01:08:16.375Z","dependency_job_id":"c204ba65-2413-40cf-b414-3d2b735f32a2","html_url":"https://github.com/id1945/ngx-scanner-qrcode","commit_stats":{"total_commits":7,"total_committers":1,"mean_commits":7.0,"dds":0.0,"last_synced_commit":"b611196971fc0cb5e8cb5abcae00e36ac4ed5982"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/id1945%2Fngx-scanner-qrcode","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/id1945%2Fngx-scanner-qrcode/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/id1945%2Fngx-scanner-qrcode/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/id1945%2Fngx-scanner-qrcode/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/id1945","download_url":"https://codeload.github.com/id1945/ngx-scanner-qrcode/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247157281,"owners_count":20893220,"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","angular2","barcode","camera","camera-scanner","code","code-128","codebar","databar","ean","qr","qr-codes","qrcode","qrcode-decoder","qrcode-detector","qrcode-encoder","qrcode-reader","scanner","scanner-web","upc"],"created_at":"2024-11-19T21:28:36.105Z","updated_at":"2025-04-04T10:07:36.000Z","avatar_url":"https://github.com/id1945.png","language":"TypeScript","funding_links":[],"categories":["Third Party Components"],"sub_categories":["QR Codes"],"readme":"# ngx-scanner-qrcode\n\nThis library is built to provide a solution scanner QR code.\\\nThis library takes in raw images and will locate, extract and parse any QR code found within.\\\nThis demo [Github](https://id1945.github.io/ngx-scanner-qrcode), [Stackblitz](https://stackblitz.com/edit/angular-ngx-scanner-qrcode).\n\n![Logo](https://raw.githubusercontent.com/id1945/ngx-scanner-qrcode/master/ngx-scanner-qrcode.png)\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003cth colspan=\"4\"\u003eSupported Barcode Types\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eQR Code\u003c/td\u003e\n    \u003ctd\u003eCode-39\u003c/td\u003e\n    \u003ctd\u003eCode-93\u003c/td\u003e\n    \u003ctd\u003eCode-128\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eCodabar\u003c/td\u003e\n    \u003ctd\u003eDatabar/Expanded\u003c/td\u003e\n    \u003ctd\u003eEAN/GTIN-5/8/13\u003c/td\u003e\n    \u003ctd\u003eISBN-10/13\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eISBN-13+2\u003c/td\u003e\n    \u003ctd\u003eISBN-13+5\u003c/td\u003e\n    \u003ctd\u003eITF (Interleaved 2 of 5)\u003c/td\u003e\n    \u003ctd\u003eUPC-A/E.\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n## Installation\n\nInstall `ngx-scanner-qrcode` from `npm`:\n\n```bash\nnpm install ngx-scanner-qrcode@\u003cversion\u003e --save\n```\n\nAdd wanted package to NgModule imports:\n```typescript\nimport { NgxScannerQrcodeModule, LOAD_WASM } from 'ngx-scanner-qrcode';\n\n// Necessary to solve the problem of losing internet connection\nLOAD_WASM('assets/wasm/ngx-scanner-qrcode.wasm').subscribe();\n\n@NgModule({\n    imports: [\n        NgxScannerQrcodeModule\n    ]\n})\n```\n\nangular.json\n\n```json\n{\n  \"architect\": {\n    \"build\": {\n      \"options\": {\n        \"assets\": [\n          /* Necessary to solve the problem of losing internet connection */\n          {\n            \"glob\": \"**/*\",\n            \"input\": \"node_modules/ngx-scanner-qrcode/wasm/\", \n            \"output\": \"./assets/wasm/\"\n          }\n        ]\n      }\n    }\n  }\n}\n```\n\nIn the Component:\n\n```html\n\u003c!-- For camera --\u003e\n\u003cngx-scanner-qrcode #action=\"scanner\"\u003e\u003c/ngx-scanner-qrcode\u003e\n\n\u003c!-- data  --\u003e\n\u003cspan\u003e{{ action.data.value | json }}\u003c/span\u003e\u003c!-- value --\u003e\n\u003cspan\u003e{{ action.data | async | json }}\u003c/span\u003e\u003c!-- async --\u003e\n\n\u003c!-- Loading --\u003e\n\u003cp *ngIf=\"action.isLoading\"\u003e⌛ Loading...\u003c/p\u003e\n\n\u003c!-- start --\u003e\n\u003cbutton (click)=\"action.isStart ? action.stop() : action.start()\"\u003e{{action.isStart ? 'Stop' : 'Start'}}\u003c/button\u003e\n```\n\n\u003cdetails\u003e\u003csummary\u003e\u003cb\u003eImage src\u003c/b\u003e\u003c/summary\u003e\n\n```html\n\u003c!-- For image src --\u003e\n\u003cngx-scanner-qrcode #action=\"scanner\" [src]=\"'https://domain.com/test.png'\"\u003e\u003c/ngx-scanner-qrcode\u003e\n\n\u003cspan\u003e{{ action.data.value | json }}\u003c/span\u003e\u003c!-- value --\u003e\n\u003cspan\u003e{{ action.data | async | json }}\u003c/span\u003e\u003c!-- async --\u003e\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003e\u003cb\u003eSelect files\u003c/b\u003e\u003c/summary\u003e\n\n```html\n\u003c!-- For select files --\u003e\n\u003cinput #file type=\"file\" (change)=\"onSelects(file.files)\" [multiple]=\"'multiple'\" [accept]=\"'.jpg, .png, .gif, .jpeg'\"/\u003e\n\n\u003cdiv *ngFor=\"let item of qrCodeResult\"\u003e\n  \u003cngx-scanner-qrcode #actionFile=\"scanner\" [src]=\"item.url\" [config]=\"config\"\u003e\u003c/ngx-scanner-qrcode\u003e\n  \u003cp\u003e{{ actionFile.data.value | json }}\u003c/p\u003e\u003c!-- value --\u003e\n  \u003cp\u003e{{ actionFile.data | async | json }}\u003c/p\u003e\u003c!-- async --\u003e\n\u003c/div\u003e\n```\n\n```typescript\nimport { Component } from '@angular/core';\nimport { NgxScannerQrcodeService, ScannerQRCodeSelectedFiles } from 'ngx-scanner-qrcode';\n\n@Component({\n  selector: 'app-root',\n  templateUrl: './app.component.html',\n  styleUrls: ['./app.component.css']\n})\nexport class AppComponent {\n  public qrCodeResult: ScannerQRCodeSelectedFiles[] = [];\n\n  public config: ScannerQRCodeConfig = {\n    constraints: { \n      video: {\n        width: window.innerWidth\n      }\n    } \n  };\n\n  constructor(private qrcode: NgxScannerQrcodeService) { }\n\n  public onSelects(files: any) {\n    this.qrcode.loadFiles(files).subscribe((res: ScannerQRCodeSelectedFiles[]) =\u003e {\n      this.qrCodeResult = res;\n    });\n  }\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003e\u003cb\u003eSelect files to Scan\u003c/b\u003e\u003c/summary\u003e\n\n```html\n\u003c!-- For select files --\u003e\n\u003cinput #file type=\"file\" (change)=\"onSelects(file.files)\" [multiple]=\"'multiple'\" [accept]=\"'.jpg, .png, .gif, .jpeg'\"/\u003e\n\n\u003cdiv *ngFor=\"let item of qrCodeResult\"\u003e\n  \u003cimg [src]=\"item.url | safe: 'url'\" [alt]=\"item.name\" style=\"max-width: 100%\"\u003e\u003c!-- Need bypassSecurityTrustUrl --\u003e\n  \u003cp\u003e{{ item.data | json }}\u003c/p\u003e\n\u003c/div\u003e\n```\n\n```typescript\nimport { Component } from '@angular/core';\nimport { NgxScannerQrcodeService, ScannerQRCodeSelectedFiles } from 'ngx-scanner-qrcode';\n\n@Component({\n  selector: 'app-root',\n  templateUrl: './app.component.html',\n  styleUrls: ['./app.component.css']\n})\nexport class AppComponent {\n  public qrCodeResult: ScannerQRCodeSelectedFiles[] = [];\n\n  public config: ScannerQRCodeConfig = {\n    constraints: { \n      video: {\n        width: window.innerWidth\n      }\n    } \n  };\n\n  constructor(private qrcode: NgxScannerQrcodeService) { }\n\n  public onSelects(files: any) {\n    this.qrcode.loadFilesToScan(files).subscribe((res: ScannerQRCodeSelectedFiles[]) =\u003e {\n      this.qrCodeResult = res;\n    });\n  }\n}\n```\n\n\u003c/details\u003e\n\n### API Documentation\n\n#### Input\n\n|   Field         |   Description                 |     Type                    |     Default     |\n|   ---           |       ---                     |     ---                     |       ---       |\n| [src]           | image url                     | string                      |       -         |\n| [fps]           | fps/ms                        | number                      |       30        |\n| [vibrate]       | vibrate for mobile            | number                      |       300       |\n| [decode]        | decode value                  | string                      |       utf-8     |\n| [isBeep]        | beep                          | boolean                     |       true      |\n| [isMasked]      | masked                        | boolean                     |       true      |\n| [unScan]        | scan                          | boolean                     |       false     |\n| [loadWasmUrl]   | wasm local url                | string                      |       blank     |\n| [symbolType]    | type                          | ScannerQRCodeSymbolType[]   | [ScannerQRCode_NONE]  |\n| [constraints]   | setting video                 | MediaStreamConstraints      | ``` {audio:false,video:true} ```  |\n| [canvasStyles]  | setting canvas                | CanvasRenderingContext2D[]  | ``` [{ lineWidth: 1, strokeStyle: 'green', fillStyle: '#55f02880' },{ font: '15px serif', strokeStyle: '#fff0', fillStyle: '#ff0000' }] ``` | \n| [config]        | config                        | ScannerQRCodeConfig         | ``` {src:..,fps..,vibrate..,decode:..,isBeep:..,config:..,constraints:..,canvasStyles:..} ``` |\n\n#### Ouput\n\n| Field     | Description   | Type                                      | Default |\n| ---       | ---           | ---                                       | ---     |\n| (event)   | data response | BehaviorSubject\u003cScannerQRCodeResult[]\u003e    | []      |\n\n#### Component exports\n\n| Field             | Description               | Type                                        | Default   |\n| ---               | ---                       | ---                                         | ---       |\n| isStart           | status                    | boolean                                     | false     | \n| isLoading         | status                    | boolean                                     | false     | \n| isTorch           | torch                     | boolean                                     | false     | \n| isPause           | status                    | boolean                                     | -         | \n| isReady           | status wasm               | AsyncSubject\u003cboolean\u003e                       | -         | \n| data              | data response             | BehaviorSubject\u003cScannerQRCodeResult[]\u003e      | []        |\n| devices           | data devices              | BehaviorSubject\u003cScannerQRCodeDevice[]\u003e      | []        |\n| deviceIndexActive | device index              | number                                      | 0         |\n| ---               | ---                       | ---                                         | ---       |\n| (start)           | start camera              | AsyncSubject                                | -         |\n| (stop)            | stop camera               | AsyncSubject                                | -         |\n| (play)            | play video                | AsyncSubject                                | -         |\n| (pause)           | pause video               | AsyncSubject                                | -         |\n| (torcher)         | toggle on/off flashlight  | AsyncSubject                                | -         |\n| (applyConstraints)| set media constraints     | AsyncSubject                                | -         |\n| (getConstraints)  | get media constraints     | AsyncSubject                                | -         |\n| (playDevice)      | play deviceId             | AsyncSubject                                | -         |\n| (loadImage)       | load image from src       | AsyncSubject                                | -         |\n| (download)        | download image            | AsyncSubject\u003cScannerQRCodeSelectedFiles[]\u003e  | -         |\n\n#### Service\n\n| Field             | Description         | Type                                        | Default |\n| ---               | ---                 | ---                                         | ---     |\n| (loadFiles)       | Convert files       | AsyncSubject\u003cScannerQRCodeSelectedFiles[]\u003e  | []      |\n| (loadFilesToScan) | Scanner files       | AsyncSubject\u003cScannerQRCodeSelectedFiles[]\u003e  | []      |\n\n#### Models\n\n\u003cdetails\u003e\u003csummary\u003e\u003cb\u003eScannerQRCodeConfig\u003c/b\u003e\u003c/summary\u003e\n\n```typescript\nexport interface ScannerQRCodeConfig {\n  src?: string;\n  fps?: number;\n  vibrate?: number; /* support mobile */\n  decode?: string;\n  unScan?: boolean;\n  isBeep?: boolean;\n  isMasked?: boolean;\n  loadWasmUrl?: string; /* eg. assets/wasm/ngx-scanner-qrcode.wasm */\n  symbolType?: ScannerQRCodeSymbolType[];\n  constraints?: MediaStreamConstraints;\n  canvasStyles?: CanvasRenderingContext2D[] | any[];\n}\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003e\u003cb\u003eScannerQRCodeDevice\u003c/b\u003e\u003c/summary\u003e\n\n```typescript\ninterface ScannerQRCodeDevice {\n  kind: string;\n  label: string;\n  groupId: string;\n  deviceId: string;\n}\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003e\u003cb\u003eScannerQRCodeResult\u003c/b\u003e\u003c/summary\u003e\n\n```typescript\nclass ScannerQRCodeResult {\n  type: ScannerQRCodeSymbolType;\n  typeName: string;\n  data: Int8Array;\n  points: Array\u003cScannerQRCodePoint\u003e;\n  orientation: ScannerQRCodeOrientation;\n  time: number;\n  cacheCount: number;\n  quality: number;\n  value: string;\n}\n```\n\n```typescript\n\nenum ScannerQRCodeSymbolType {\n  ScannerQRCode_NONE = 0,   /**\u003c no symbol decoded */\n  ScannerQRCode_PARTIAL = 1,   /**\u003c intermediate status */\n  ScannerQRCode_EAN2 = 2,   /**\u003c GS1 2-digit add-on */\n  ScannerQRCode_EAN5 = 5,   /**\u003c GS1 5-digit add-on */\n  ScannerQRCode_EAN8 = 8,   /**\u003c EAN-8 */\n  ScannerQRCode_UPCE = 9,   /**\u003c UPC-E */\n  ScannerQRCode_ISBN10 = 10,  /**\u003c ISBN-10 (from EAN-13). @since 0.4 */\n  ScannerQRCode_UPCA = 12,  /**\u003c UPC-A */\n  ScannerQRCode_EAN13 = 13,  /**\u003c EAN-13 */\n  ScannerQRCode_ISBN13 = 14,  /**\u003c ISBN-13 (from EAN-13). @since 0.4 */\n  ScannerQRCode_COMPOSITE = 15,  /**\u003c EAN/UPC composite */\n  ScannerQRCode_I25 = 25,  /**\u003c Interleaved 2 of 5. @since 0.4 */\n  ScannerQRCode_DATABAR = 34,  /**\u003c GS1 DataBar (RSS). @since 0.11 */\n  ScannerQRCode_DATABAR_EXP = 35,  /**\u003c GS1 DataBar Expanded. @since 0.11 */\n  ScannerQRCode_CODABAR = 38,  /**\u003c Codabar. @since 0.11 */\n  ScannerQRCode_CODE39 = 39,  /**\u003c Code 39. @since 0.4 */\n  ScannerQRCode_PDF417 = 57,  /**\u003c PDF417. @since 0.6 */\n  ScannerQRCode_QRCODE = 64,  /**\u003c QR Code. @since 0.10 */\n  ScannerQRCode_SQCODE = 80,  /**\u003c SQ Code. @since 0.20.1 */\n  ScannerQRCode_CODE93 = 93,  /**\u003c Code 93. @since 0.11 */\n  ScannerQRCode_CODE128 = 128, /**\u003c Code 128 */\n\n  /*\n   * Please see _ScannerQRCode_get_symbol_hash() if adding\n   * anything after 128\n   */\n\n  /** mask for base symbol type.\n   * @deprecated in 0.11, remove this from existing code\n   */\n  ScannerQRCode_SYMBOL = 0x00ff,\n  /** 2-digit add-on flag.\n   * @deprecated in 0.11, a ::ScannerQRCode_EAN2 component is used for\n   * 2-digit GS1 add-ons\n   */\n  ScannerQRCode_ADDON2 = 0x0200,\n  /** 5-digit add-on flag.\n   * @deprecated in 0.11, a ::ScannerQRCode_EAN5 component is used for\n   * 5-digit GS1 add-ons\n   */\n  ScannerQRCode_ADDON5 = 0x0500,\n  /** add-on flag mask.\n   * @deprecated in 0.11, GS1 add-ons are represented using composite\n   * symbols of type ::ScannerQRCode_COMPOSITE; add-on components use ::ScannerQRCode_EAN2\n   * or ::ScannerQRCode_EAN5\n   */\n  ScannerQRCode_ADDON = 0x0700,\n}\n\ninterface ScannerQRCodePoint {\n  x: number;\n  y: number;\n}\n\nenum ScannerQRCodeOrientation {\n  ScannerQRCode_ORIENT_UNKNOWN = -1,  /**\u003c unable to determine orientation */\n  ScannerQRCode_ORIENT_UP,            /**\u003c upright, read left to right */\n  ScannerQRCode_ORIENT_RIGHT,         /**\u003c sideways, read top to bottom */\n  ScannerQRCode_ORIENT_DOWN,          /**\u003c upside-down, read right to left */\n  ScannerQRCode_ORIENT_LEFT,          /**\u003c sideways, read bottom to top */\n}\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003e\u003cb\u003eScannerQRCodeSelectedFiles\u003c/b\u003e\u003c/summary\u003e\n\n```typescript\ninterface ScannerQRCodeSelectedFiles {\n  url: string;\n  name: string;\n  file: File;\n  data?: ScannerQRCodeResult[];\n  canvas?: HTMLCanvasElement;\n}\n```\n\u003c/details\u003e\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.7.3\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eAngular 6+\u003c/td\u003e\n    \u003ctd\u003e1.7.2\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#### To make this library more complete, please donate to me if you can!\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003cth\u003eBitcoin\u003c/th\u003e\n    \u003cth\u003ePaypal\u003c/th\u003e\n    \u003cth\u003eMbBank\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    \u003ctd\u003e\u003cimg src=\"https://raw.githubusercontent.com/id1945/id1945/master/donate-paypal.png\" width=\"182px\"\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cimg src=\"https://raw.githubusercontent.com/id1945/id1945/master/donate-mbbank.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[LGPL-2.1+ License](https://github.com/id1945/ngx-scanner-qrcode/blob/master/LICENSE). Copyright (C) 1991, 1999 Free Software Foundation, Inc.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fid1945%2Fngx-scanner-qrcode","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fid1945%2Fngx-scanner-qrcode","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fid1945%2Fngx-scanner-qrcode/lists"}