Extract Text from Image with Python & OpenCV
Python will automatically find and extract text from an image. Yes, Python can do amazing things. Let’s start working on this interesting Python project.
A picture is worth a thousand words
You must have heard the quote many times right! Well, the saying is very true because sometimes the picture says it all.
We have discussed the importance of a single picture so far and now it’s time to learn something more interesting about it. In this python project, we will learn how to extract text content from images using openCV and tesseract. Now let’s see how we can create this.
Keeping you updated with latest technology trends, Join TechVidvan on Telegram
What is Tesseract?
It is an open-source engine for optical character recognition (OCR). It efficiently reads text from images and is very easy to use. As mentioned earlier it is open source so it is free to use.
To implement this project you should have basic knowledge of:
Download Project Code
Before proceeding ahead, please download the source code of Text Extraction Project: Extract Text from Image with Python.
Steps to start text extraction
Let’s start the text detection and extraction project development
Install required libraries
To install the libraries use pip installer from the command prompt / terminal:
Pip install opencv-python Pip install pytesseract pip install tkinter
Create main.py file and add the following code
from tkinter import * from tkinter import filedialog from PIL import ImageTk, Image import cv2 import pytesseract pytesseract.pytesseract.tesseract_cmd = 'C:\\Program Files (x86)\\Tesseract-OCR\\tesseract.exe' root = Tk() root.title('TechVidvan Text from image project') newline= Label(root) uploaded_img=Label(root) scrollbar = Scrollbar(root) scrollbar.pack( side = RIGHT, fill = Y ) def extract(path): Actual_image = cv2.imread(path) Sample_img = cv2.resize(Actual_image,(400,350)) Image_ht,Image_wd,Image_thickness = Sample_img.shape Sample_img = cv2.cvtColor(Sample_img,cv2.COLOR_BGR2RGB) texts = pytesseract.image_to_data(Sample_img) mytext="" prevy=0 for cnt,text in enumerate(texts.splitlines()): if cnt==0: continue text = text.split() if len(text)==12: x,y,w,h = int(text),int(text),int(text),int(text) if(len(mytext)==0): prey=y if(prevy-y>=10 or y-prevy>=10): print(mytext) Label(root,text=mytext,font=('Times',15,'bold')).pack() mytext="" mytext = mytext + text+" " prevy=y Label(root,text=mytext,font=('Times',15,'bold')).pack() def show_extract_button(path): extractBtn= Button(root,text="Extract text",command=lambda: extract(path),bg="#2f2f77",fg="gray",pady=15,padx=15,font=('Times',15,'bold')) extractBtn.pack() def upload(): try: path=filedialog.askopenfilename() image=Image.open(path) img=ImageTk.PhotoImage(image) uploaded_img.configure(image=img) uploaded_img.image=img show_extract_button(path) except: pass uploadbtn = Button(root,text="Upload an image",command=upload,bg="#2f2f77",fg="gray",height=2,width=20,font=('Times',15,'bold')).pack() newline.configure(text='\n') newline.pack() uploaded_img.pack() root.mainloop()
- Import all the required libraries (opencv, tkinter, tesseract)
- Provide the location of the tesseract.exe file.
- Tkinter provides GUI functionalities: open an image dialog box so user can upload an image
- Let’s jump to the extract function which takes the path of the image as a parameter
- In this function, we’ll read the image using cv2.imread. We will also resize the image so that we can get well-formatted output for all different sizes of input images.
- Tesseract works on RGB images and opencv reads an image as BGR image, so we need to convert the image and then call tesseract functions on the image. Here,the conversion is done using cv2.cvtCOLOR().
- we have stored height, width, and thickness of the input image using img.shape for later use.
- After the pre-processing, call image_to_data() function of tesseract which returns a string (of extracted text from the image0.
- Print the whole string for better understanding.
- The string is a multiline string, where each line contains extracted text but its first line (starting from zero) contains headings that are not useful for us, so we will skip the very first line.
- Now, split the string to get the extracted text and finally print the extracted text on the screen.
In this article, we have successfully developed a project which automatically detects and extracts text from images very efficiently using inbuilt functions of pytesseract and opencv.