Webcam as barcode reader tutorial shows how to read barcodes using web camera with Barcode Reader SDK.
With BarCode Reader SDK you can use webcam as barcode reader from your application. Full source code for this tutorial is available as “Read From Live Video Cam” samples (both VB.NET and C# versions) in the evaluation version of the SDK for barcode web camera.
Webcam module is providing frames as pictures from the webcam when the user clicks the Start button:
/// <summary> /// Function to read barcodes from image (used by new created Thread object) /// </summary> public void <span data-scayt_word="startImageProcessing" data-scaytid="2">startImageProcessing</span>() { try { // work while user has not changed the status to false (i.e. false <span data-scayt_word="meanse" data-scaytid="3">meanse</span> user canceled the scan) while (STATUS) { // get current frame bitmap from camera using <span data-scayt_word="Touchless" data-scaytid="4">Touchless</span> lib Bitmap bitmap = MANAGER.CurrentCamera.GetCurrentImage(); // search for bar codes <span data-scayt_word="findBarcodes" data-scaytid="5">findBarcodes</span>(bitmap); // wait for a little to lower the CPU load Thread.Sleep(SCAN_DELAY); } } catch { ; // suppress errors if any } }
Reader SDK scans frames as pictures to read barcode:
/// <summary> /// Finds barcodes from bitmap object /// </summary> /// <param name="img">input bitmap private void <span data-scayt_word="findBarcodes" data-scaytid="8">findBarcodes</span>(Bitmap <span data-scayt_word="img" data-scaytid="10">img</span>) { // create barcode object Reader reader = new Reader(); // limit to <span data-scayt_word="1D" data-scaytid="12">1D</span> barcodes search only (<span data-scayt_word="2d" data-scaytid="14">2d</span> are not included to speed up search) // change to SymbologyFilter.FindAll to scan for all possible <span data-scayt_word="1D" data-scaytid="13">1D</span> and <span data-scayt_word="2D" data-scaytid="15">2D</span> barcodes reader.TypeToFind = <span data-scayt_word="GetBarcodeTypeToFindFromCombobox" data-scaytid="16">GetBarcodeTypeToFindFromCombobox</span>(); // you may optimize processing by setting number of barcodes per page //reader.MaxNumberOfBarcodesPerPage = 1; // read barcodes from bitmap reader.ReadFrom(<span data-scayt_word="img" data-scaytid="11">img</span>); // save current time String <span data-scayt_word="timeNow" data-scaytid="17">timeNow</span> = string.Format("{0:<span data-scayt_word="HH" data-scaytid="19">HH</span>:mm:<span data-scayt_word="ss" data-scaytid="20">ss</span>:<span data-scayt_word="tt" data-scaytid="21">tt</span>}", DateTime.Now); // check barcode scan results if (reader.FoundBarcodes.Length > 0) { textAreaBarcodes.SelectionStart = 0; textAreaBarcodes.SelectionLength = 0; textAreaBarcodes.SelectedText = "<span data-scayt_word="nTime" data-scaytid="22">nTime</span>: " + <span data-scayt_word="timeNow" data-scaytid="18">timeNow</span> + "n"; // insert barcodes into the text area output <span data-scayt_word="foreach" data-scaytid="23">foreach</span> (<span data-scayt_word="FoundBarcode" data-scaytid="24">FoundBarcode</span> barcode in reader.FoundBarcodes) { // make a sound that we found the barcode (not working on <span data-scayt_word="x64" data-scaytid="25">x64</span> due to Microsoft changed it) Console.Beep(); // form the string with barcode value String <span data-scayt_word="barcodeValue" data-scaytid="26">barcodeValue</span> = String.Format("Found: {0} {1}" + "rn", barcode.Type, barcode.Value); // add barcode to the text area output textAreaBarcodes.SelectedText = <span data-scayt_word="barcodeValue" data-scaytid="27">barcodeValue</span> + "n"; // add barcode to the list of saved barcodes m_foundBarcodes.Add(barcode); // increase counter of found barcodes <span data-scayt_word="foundBarcodesCount" data-scaytid="28">foundBarcodesCount</span>++; // update status text with number of barcodes lblFoundBarcodes.Text = String.Format("Found {0} barcodes:", <span data-scayt_word="foundBarcodesCount" data-scaytid="29">foundBarcodesCount</span>); } } // make flickering for "Scanning..." label lblScanning.Visible = !lblScanning.Visible; lblScanning.Update(); }
Here, basically, we’re initializing the barcode reader class, passing files to it, reading data, and processing the response.
1. We’re initializing the barcode reader by creating an instance of Reader class which is in “Bytescout.BarcodeReader” assembly. While in production we also need to provide the registration key and name, so that we have a full response.
Reader reader = new Reader();
We can also configure this reader as per our requirements, for example in this instance we’re setting the property “TypeToFind” which can control which type of barcodes to consider for reading.
2. Providing input data to the reader. In this program, we’re reading from webcam frame images.
reader.ReadFrom(img);
We can also read other sources such as PDF files, tiff files, other image types, or streams. In the case of PDF or TIFF input files, we can specify from which page to read. We can also specify from any particular input file, from which specific location we need to read the barcode value.
3. Execute and process results. In this example we’re iterating property “FoundBarcodes” of reader object. It contains all found barcode values with other information such as barcode type, barcode position, etc.
foreach (FoundBarcode barcode in reader.FoundBarcodes)
That’s all guys. I hope you get a glimpse of how to read barcodes from a webcam.
Happy Coding!