Arduino Projects

OCR Optical Character recognition using VB.net and Arduino

OCR Project Description:

This tutorial is based on the OCR “Optical character recognition” technology. In this project, the car number plates will be scanned using the OCR. For the Car number plates reading we will be making our own image processing application in visual basic .net“ VB.net”. The scanned numbers will be then compared with the pre-defined numbers and then display the car owner information and open and close the entrance accordingly using the electronic lock.

On the hardware side, the Arduino Uno will be used for controlling the door lock. The Arduino will do serial communication with the computer/laptop application.

About OCR:

Optical Character Recognition ( which is also known as the optical character reader, OCR) is the technology used for reading/scanning the text images, or any sheet or paper on which the text is written. In this tutorial, we will be using the same concept. We will be using a camera to scan the number plate in real-time and then we will compare the scanned number with the predefined numbers stored in the program.


Amazon Links:

12v Adaptor:

Arduino Uno

Arduino Nano

Mega 2560:

WebCam:

12v Electronic Door Lock / Elock / Solenoid Lock:

Other Tools and Components:

Top Arduino Sensors:

Super Starter kit for Beginners

Digital Oscilloscopes

Variable Supply

Digital Multimeter

Soldering iron kits

PCB small portable drill machines

*Please Note: These are affiliate links. I may make a commission if you buy the components through these links. I would appreciate your support in this way!

Images which will be used as the number plates:

OCR

OCR

OCR

Circuit Diagram:

OCR

In the circuit diagram as you can see, I have used a Servo motor, but in the video, I controlled a door lock. The door lock is already explained in the video, so I decided to share with you the idea of how you can also control a servo motor.

If you are using a small servo motor then you can power the servo motor using the Arduino’s 5 volts. But if you are using a larger Servo motor then I highly recommend you should power the Servo motor using External power supply. You can make an external power supply based on the famous LM7805 voltage regulator. Make sure to add 470uf capacitors at the input and output sides of the voltage regulator for the best performance. You can watch my previous tutorials on how to use the Servo motor. you can find the related videos on my channel “Electronic Clinic”.


Arduino E Lock Programming:

This code is written for the Electronic Lock. I started by defining a Pin for the Electronic lock. So the electronic lock will be controlled using the Arduino’s Pin number 13. Then I defined a variable data of the type character. The variable data will be used to store the character received from the computer application.

int elock = 13;
char data ; 

After defining the Variables and Pins, the next step is to tell the controller which pin is the input or output and which baud rate we are going to use. To set any pin of the Arduino Uno as input or output for this we use the built in function which is pinMode() function. This function takes two arguments as the input, the pin number or pin name which in our case is elock, and the status which can be input or output. As the electronic lock is an output device so that’s why we set it to OUTPUT.

For activating the Serial communication we use a function called Serial.begin(). Serail.begin function is also a built in function and it takes only one Argument as the input which is the Baud rate. As the Arduino Uno board will be doing serial communication with the computer so for this we will have to define the baud rate. I Selected 9600. If you want you can set any other Baud rate. Finally we turn off the electronic lock. The void setup function only executes one time, when the Arduino uno Or Mega board is powered up.

void setup()
{
  pinMode( elock, OUTPUT);
 Serial.begin(9600); 
 digitalWrite(elock, LOW); 
   
}

The code inside the void loop function is very simple. All we are doing is just reading the serial port, store the received character in a variable data and then use some if condition to check if we have received the desired character to control open or close the electronic lock.


void loop()
{
 
 if ( Serial.available() > 0 ) 
{
 
 data = Serial.read(); 
 
 if ( data == 'c' ) 
 {
   digitalWrite(elock, HIGH); 
 }
 
  if ( data == 'd' ) 
 {
   digitalWrite(elock, LOW); 
 }
} 
  
}

OCR Computer application Program:

This is how the final form looks like after designing. For the EmguCv installation and settings and form designing and program explanation watch video Tutorial available at the end of this Article.

OCR

Imports Emgu.CV
Imports Emgu.CV.Util
Imports Emgu.CV.OCR
Imports Emgu.CV.Structure

Imports System.IO
Imports System.IO.Ports
Imports System.Threading



Public Class Form1
    Dim webcam As Capture = New Capture
    Dim ocr As Tesseract = New Tesseract("tessdata", "eng", Tesseract.OcrEngineMode.OEM_TESSERACT_ONLY = 500, whiteList:="ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz")
    Dim pic As Bitmap = New Bitmap(270, 270)
    Dim gf As Graphics = Graphics.FromImage(pic)
    Dim data As String
    Dim search As String


    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        SerialPort1.Close()
        SerialPort1.PortName = "com5"
        SerialPort1.BaudRate = "9600"
        SerialPort1.DataBits = 8
        SerialPort1.Parity = Parity.None
        SerialPort1.StopBits = StopBits.One
        SerialPort1.Handshake = Handshake.None
        SerialPort1.Encoding = System.Text.Encoding.Default
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim photo As Image(Of Bgr, Byte) = webcam.QueryFrame
        'gf.CopyFromScreen(New Point(Me.Location.X = PictureBox1.Location.X = 4, Me.Location.Y = PictureBox1.Location.Y = 30), New Point(0, 0), pic.Size)
        PictureBox1.Image = photo.ToBitmap
        ocr.Recognize(New Image(Of Bgr, Byte)(photo.ToBitmap))
        RichTextBox1.Text = ocr.GetText
        data = RichTextBox1.Text
        If InStr(data, "LHR786") Or InStr(data, " lhr786") Or InStr(data, "Lhr786") Then
            Label1.Text = "registered"
            Label2.Text = "Jhon"
            Label3.Text = "13106-5256283-7"
            Label4.Text = "Corolla 2006"
            Label5.Text = "3322bv54676"
            '  SerialPort1.Open()
            ' SerialPort1.Write("1")

            ' SerialPort1.Close()

        ElseIf InStr(data, "ABC1") Or InStr(data, " abc1") Or InStr(data, "Abc1") Then
            Label1.Text = "registered"
            Label2.Text = "Afaq"
            Label3.Text = "13401-6756284-2"
            Label4.Text = "HONDA 2004"
            Label5.Text = "552Cbv76676"
            SerialPort1.Open()
            SerialPort1.Write("1")

            SerialPort1.Close()

        ElseIf InStr(data, "RWP4") Or InStr(data, " RWP 4") Or InStr(data, "rwp 4") Then
            Label1.Text = "un registered"
            Label2.Text = "No record"
            Label3.Text = "No record"
            Label4.Text = "No record"
            Label5.Text = "No record"

        End If

    End Sub

    Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label1.Click

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        SerialPort1.Open()
        SerialPort1.Write("1")

        SerialPort1.Close()

    End Sub
End Class

Watch Video Tutorial:

Other Image Processing Projects:

Arduino image processing Eye Pupil Tracking, how to make Haarcascade XML file

Arduino Image processing CCTV camera system using VB.net

Arduino Image Processing based Entrance lock Control System

Engr Fahad

My name is Shahzada Fahad and I am an Electrical Engineer. I have been doing Job in UAE as a site engineer in an Electrical Construction Company. Currently, I am running my own YouTube channel "Electronic Clinic", and managing this Website. My Hobbies are * Watching Movies * Music * Martial Arts * Photography * Travelling * Make Sketches and so on...

6 Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

Back to top button