Webcam as barcode reader - C# and VB.NET samples - ByteScout

Webcam as barcode reader – C# and VB.NET samples

  • Home
  • /
  • Articles
  • /
  • Webcam as barcode reader – C# and VB.NET samples

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.

1. Web cam module is providing frames as pictures from the web cam when user clicks 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
           }
       }
2. BarCode 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 barcode reader class, passing file to it, reading data and processing response.

 

1. We’re initializing barcode reader by creating instance of Reader class which is in “Bytescout.BarcodeReader” assembly. While in production we also need to provide registration key and name, so that we have full response.

Reader reader = new Reader();

We can also configuring this reader as per our requirements, for example in this instance we’re setting property “TypeToFind” which can control which type of barcodes to consider for reading.

2. Providing input data to reader. In this program we’re reading form webcam frame image.

reader.ReadFrom(img);

We can also read other sources such as from pdf file, tiff file , other image types, or from stream. In 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 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 glimpse of how to read barcode from webcam.

Happy Coding!

Tutorials:

prev
next