118 lines
3.3 KiB
Markdown
118 lines
3.3 KiB
Markdown
# Architecture {#architecture}
|
|
|
|
This page describes Quagga2's code structure and design decisions.
|
|
|
|
## Project Structure {#project-structure}
|
|
|
|
```
|
|
quagga2/
|
|
├── src/
|
|
│ ├── quagga.ts # Main entry point
|
|
│ ├── config/ # Configuration handling
|
|
│ ├── decoder/ # Barcode decoding
|
|
│ │ ├── barcode_decoder.ts
|
|
│ │ └── readers/ # Individual barcode readers
|
|
│ ├── locator/ # Barcode localization
|
|
│ │ ├── barcode_locator.ts
|
|
│ │ └── skeletonizer.ts
|
|
│ ├── input/ # Input handling
|
|
│ │ ├── camera_access.ts
|
|
│ │ └── frame_grabber.ts
|
|
│ └── common/ # Shared utilities
|
|
│ ├── cv_utils.ts # Computer vision utilities
|
|
│ └── image_wrapper.ts
|
|
├── dist/ # Browser builds
|
|
├── lib/ # Node.js build
|
|
└── type-definitions/ # TypeScript types
|
|
```
|
|
|
|
## Core Components {#core-components}
|
|
|
|
### Quagga (Main API) {#main-api}
|
|
|
|
The main entry point (`src/quagga.ts`) exposes the public API:
|
|
|
|
- `init()` / `start()` / `stop()`
|
|
- `decodeSingle()`
|
|
- `onDetected()` / `onProcessed()`
|
|
- `CameraAccess` namespace
|
|
|
|
### Barcode Locator {#barcode-locator}
|
|
|
|
Located in `src/locator/`, responsible for finding barcode regions in images:
|
|
|
|
- **barcode_locator.ts**: Main localization logic
|
|
- **skeletonizer.ts**: Line structure extraction (asm.js optimized)
|
|
|
|
### Barcode Decoder {#barcode-decoder}
|
|
|
|
Located in `src/decoder/`, handles barcode decoding:
|
|
|
|
- **barcode_decoder.ts**: Coordinates decoding process
|
|
- **readers/**: Individual reader implementations
|
|
- Each reader extends `BarcodeReader` base class
|
|
- Implements format-specific pattern matching
|
|
|
|
### Input Handling {#input-handling}
|
|
|
|
Located in `src/input/`:
|
|
|
|
- **camera_access.ts**: Camera enumeration and control
|
|
- **frame_grabber_browser.ts**: Browser frame capture
|
|
- **frame_grabber_node.ts**: Node.js image loading
|
|
|
|
## Data Flow {#data-flow}
|
|
|
|
```
|
|
Camera/Image
|
|
↓
|
|
FrameGrabber (captures frame)
|
|
↓
|
|
ImageWrapper (grayscale conversion)
|
|
↓
|
|
BarcodeLocator (finds barcode region)
|
|
↓
|
|
BarcodeDecoder (decodes barcode)
|
|
↓
|
|
Result callbacks
|
|
```
|
|
|
|
## Design Decisions {#design-decisions}
|
|
|
|
### Bundle Everything {#bundle-everything}
|
|
|
|
All dependencies are bundled into the final build. This means:
|
|
|
|
- Consumers never install dependencies directly
|
|
- All packages go in `devDependencies`
|
|
- Builds are self-contained
|
|
|
|
### Dual Build Targets {#dual-build-targets}
|
|
|
|
- **Browser**: `dist/quagga.min.js` - UMD bundle
|
|
- **Node.js**: `lib/quagga.js` - CommonJS module
|
|
|
|
### Reader Architecture {#reader-architecture}
|
|
|
|
Readers are pluggable:
|
|
|
|
- Built-in readers in `src/decoder/readers/`
|
|
- External readers via `Quagga.registerReader()`
|
|
- All readers extend common `BarcodeReader` class
|
|
|
|
## Build System {#build-system}
|
|
|
|
- **Webpack 4**: Module bundling
|
|
- **Babel**: ES6+ transpilation
|
|
- **TypeScript**: Type checking (but source is mixed JS/TS)
|
|
|
|
## Related {#related}
|
|
|
|
- [Algorithm Overview](algorithm-overview.md) - How the algorithms work
|
|
- [Create External Readers](../how-to-guides/external-readers.md) - Extend Quagga2
|
|
- [Contributing](../contributing.md) - Development setup
|
|
|
|
---
|
|
|
|
[← Back to Explanation](index.md)
|