A free online barcode scanner powered by Dynamsoft Barcode Reader — scan 1D/2D barcodes from your camera, images, or video files
Loading...
No test images? Build a set with the barcode & QR code generator → Stress test dataset. Its ZIP carries the expected value, symbology and box of every symbol, so the benchmark can score recall and precision instead of only counting what it found.
It decodes 1D and 2D barcodes from a live camera, from JPG/PNG/GIF/BMP/WebP images, from MP4/WebM/MOV video, or from every page of a PDF or multi-page TIFF — there is no button to press, detection starts on its own. Each hit is drawn on the frame as a bounding box. Benchmark mode scores a whole image set against ground truth: recall, precision, symbology agreement, box overlap and per-page timing.
Start with the small synthetic fixture shipped beside this page. Download
sample-qr.png, choose File (image or video)
and open it in Default mode. The page detects the symbol without a button press and returns one
result: [QR_CODE] https://www.dynamsoft.com/codepool/demos/barcode-scanner/.
Expressed as structured output, the decode is:
{
"count": 1,
"results": [
{
"format": "QR_CODE",
"text": "https://www.dynamsoft.com/codepool/demos/barcode-scanner/"
}
]
}
sample-qr.png fixture. The red box is drawn from the decoder's corner points;
no barcode value is entered by hand.For a larger test, the
barcode
generator exports a dataset as one ZIP — images/*.png plus
annotations.json — and this page reads that archive directly. Drop the ZIP on
the upload zone in Benchmark mode and every image arrives with its expected values already
attached, including the degradation each image was built with. Ground truth is matched on
text, and the other two fields are optional:
{
"images": [
{
"file": "sample1.jpg",
"barcodes": [
{
"text": "9781234567897",
"format": "EAN_13",
"points": [[10, 20], [310, 20], [310, 140], [10, 140]]
}
],
"degradations": { "blur": 1.2, "rotate": -7 }
}
]
}
Four columns come back for each row, and they do not all mean the same kind of thing:
| Column | What it counts |
|---|---|
| Missed | Expected values that never came back. Listed under Details beside the capture conditions, so a miss can be read against the blur or rotation that caused it. |
| Symbology | How many correct values came back under the annotated symbology — informational. A correct value is never downgraded because the reader named the format differently. |
| Box IoU | How many decoded boxes overlap the annotated box at IoU ≥ 0.5, plus the mean — also informational. |
| Unmatched decodes | Values that read but matched nothing expected. Either a wrong read or a barcode the annotations do not cover; the page does not guess which. |
Known naming differences are folded together before comparing — CODE_39_EXTENDED
with CODE_39, UPC_A with an EAN_13 that starts with 0,
MSI with MSI_CODE. Anything else is reported rather than
normalised away. If you have no dataset of your own,
Dynamsoft's
challenging-images set ships 68 photos and 514 annotated barcodes in exactly this
format.
The stock ReadBarcodes_Default preset enables 32 of the 52 formats the SDK knows.
It leaves out DotCode, both Pharmacode tracks and the postal symbologies — and the barcode
generator produces DotCode and Pharmacode. Benchmark a dataset containing them against the
preset alone and the report shows misses that are not reading failures: the reader was never
asked to look. This page sets those three bits on top of the preset through the simplified
settings API and re-applies them after any settings reset. Measured on bundle 11.6.3200, a
clean DotCode and a clean one-track Pharmacode both decode once the bits are set, and neither
decodes without them.
| Capability | This tool |
|---|---|
| Symbologies | 1D and 2D, with the preset's 32 formats plus DotCode and both Pharmacode tracks enabled. A custom JSON template can change the list entirely. |
| Camera | Live scanning with format selection. Requires HTTPS or localhost and camera permission. |
| Images | JPG, PNG, GIF, BMP, WebP, single or multi-select, plus clipboard paste. |
| Video | MP4, WebM and MOV, scanned frame by frame as the file plays. Plus a clip recorder that replays the live stream through the same decoder. |
| PDF and TIFF | Decoded page by page, up to 50 pages, rasterized at up to 2000 px on the long edge. PDF goes through pdf.js; TIFF through UTIF. |
| TIFF compression | Raw, G3, G4, LZW, JPEG, Deflate (including Adobe Deflate), PackBits, Thunder and Nikon. Other codes are rejected with a message rather than decoded to noise. |
| Large files | Documents are capped at 50 pages and rasterized to a 2000 px long edge; images are decoded in the tab, so browser memory is the practical file-size ceiling and nothing is uploaded. |
| Benchmark and ground truth | Yes, with an HTML report export. Scoring needs annotations.json;
without it you still get counts and timing. |
| Reading printed text | Not offered — this is a barcode decoder. A VIN stamped into metal, or an expiry date printed next to the symbol, is not read. |
| Server-side batch processing | Not offered. Everything runs in the tab; there is no upload endpoint and no CLI. |
| Privacy and network | Images, video and documents are decoded on the device and are not uploaded. The page does fetch the SDK bundle, the licence, pdf.js/UTIF on first use, and demo analytics. |
This page carries a licence bound to dynamsoft.com: no account, no key, no
installation. Open it on a phone and the camera becomes the scanner.
"Free" describes the hosted demo, not the source code. Cloned and served elsewhere, the same files need your own licence before the SDK will activate.