Skip to content

Horiqq7/barcode-decoder

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Functional Barcode Decoder

A purely functional Scala application that processes raw image files and decodes standard 13-digit barcodes.

This project implements a complete image processing pipeline from scratch: - reading raw binary data - applying luminosity conversions - thresholding - using Run-Length Encoding (RLE) to parse and validate barcode digits


🚀 Key Features

Custom Image Parsing (Parser.scala)

  • Parses raw binary .ppm (P6) files
  • Builds internal RGB data structures
  • No external graphics libraries used

Image Processing Pipeline (Convertor.scala)

  • Grayscale Conversion
    • Converts RGB .ppm → grayscale .pgm
    • Uses standard luminosity weights
  • Binarization
    • Converts grayscale → black & white (.pbm)
    • Uses dynamic, quadrant-based thresholding
    • Handles uneven lighting conditions

Functional Decoding Engine (Decoder.scala)

  • Extracts pixel rows

  • Applies Run-Length Encoding (RLE) to detect bar widths

  • Normalizes sequences using custom RatioInt

  • Handles scaling and distortion

  • Digit decoding:

    • Left side (Odd / Even parity)
    • Right side patterns
  • Validation:

    • Uses standard EAN-13 checksum

📁 Project Structure

  • Types.scala
    Algebraic Data Types (ADTs):

    • pixels
    • bits
    • parities
    • image formats
  • Parser.scala
    Byte-level parsing of .ppm headers and data

  • Convertor.scala
    Image transformations:

    • RGB → Grayscale
    • Grayscale → B&W
  • Decoder.scala
    Core decoding logic:

    • sequence chunking
    • parity matching
    • checksum validation
  • Main.scala / MyBarcodes.scala
    Application entry points:

    • define input/output paths
    • orchestrate pipeline

💻 Build and Run

This project uses sbt (Scala Build Tool).

Steps

  1. Place .ppm images into:
    • MyBarcodesInput/
    • or InitialBarcodes/
  2. Run:
sbt run

Output

  • Generates processed .pbm images
  • Prints decoded 13-digit barcodes in console

🧠 Technical Highlights

Pure Functional Design

  • No mutable state
  • Composable transformations
  • Clear separation of concerns

Robust Image Handling

  • Works directly with raw binary formats
  • No external dependencies

Resilient Decoding

  • Handles noise and distortion
  • Uses normalization (RatioInt)
  • Validates results via checksum

About

A purely functional Scala application that processes raw PPM images, converts them to binary, and decodes barcodes using Run-Length Encoding and checksum validation.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages