Optical Character Recognition with EasyOCR and Python | OCR PyTorch
HTML-код
- Опубликовано: 6 ноя 2020
- Need to extract text from an image?
Tired of manually transcribing?
You need OCR!
OCR, also known as Optical Character Recognition allows you to 'recognise' text from within a document, whether it be an image, a PDF or a table. Leveraging OCR, you can easily extract this text to be able to use it for additional processing, NLP, or fit it into your regular workflow.
The great thing about EasyOCR (which is shown in the video) is that it works with Python and is quite accurate without any fine tuning, this means you can spend less time processing and more time doing the fun stuff. What's even better is that in this video you'll learn how to do it all in just 15 minutes.
In this video you’ll learn how to:
1. Setup and install EasyOCR and Pytorch
2. Use EasyOCR to extract text from an Image with Python
3. Extract multiple lines of text with OCR and handle the results
4. Visualise the results from the image using OpenCV
Get the training template here: github.com/nic...
Other Links Mentioned in the Video
PyTorch Install: pytorch.org/ge...
EasyOCR Documentation: github.com/Jai...
OpenCV Documentation: opencv.org/
Oh, and don't forget to connect with me!
LinkedIn: / nicholasrenotte
Facebook: / nickrenotte
GitHub: github.com/nic...
Happy coding!
Nick
P.s. Let me know how you go and drop a comment if you need a hand! Наука
Works like a charm for my project! So easy to use and with much better results that pyocr and other off-line ocr libraries. Thank you!
Awesome! Seriously it's my first time on your channel, and for sure not the last! Right to the point, and everything is working so good.
I liked, I subscribed, I won over my problem! :-)
Nicho with a moustache... that's a first for me 😁😁😁😁😁 The content is lit tbh
Cannot install torch module always getting error Could not find a version that satisfies the requirement torch (from versions: none) and No matching distribution found for torch
The easiest way to read text........ awesome tutorial..........
for some reason the for loop does not work for me, it only show the last item in the list ??
how to apply this but using web camera? the characters that are detected and extracted from the web camera will be displayed on LCD through Arduino?
Is there any library to do the similar thing for a pdf file which has multiple pages?
Your video is great! Easy. I just have a difficulty when I installed the OCR because the Pillow version 10.0.0 descontinued the "ANTIALIAS" method. I needed to make a little change in the easyOCR lib to make it work. Thank you, man!
i want to save all the detected text in the same order as in the image how can I do it please
wasn't able to install easyocr, error code being
RuntimeWarning: Pillow 8.2.0 does not support Python 3.10 and does not provide prebuilt Windows binaries. We do not recommend building from source on Windows. any ideas on a fix?
if we use this to scan passport , i get all the results correctly but how to get values from the labels yes i can use if statement but the data is not sorted there is no pattern so i dont always know that when label date of birth is found at what index its value is. can you help me with it?
I am getting the error as "UNKNOWN C++ EXCEPTION FROM OPENCV CODE" again and again after processing image please help me
Thanks for the tutorial, I somehow did the install like u did and my Import easyocr does not run. The pip install does not give me any errors but when i import easyocr, the line of code buffer forever. What could be the problem? I did it on jupyter notebook. thankyou
Hi for my case, im trying to detect the vehicle plates and i did everything similar to urs except changing the pictures but im not sure why is my accuracy so low, ranging from 0.38-0.46..
Heya @Zhongwei, try out the new tutorial, it's way more accurate: ruclips.net/video/0-4p_QgrdbE/видео.html
I am getting this error message: error: Unknown C++ exception from OpenCV code
How to solve it?
Isit possible for the ocr to scan the image text from my game (maplestory)
What is the best model for ocr which gives text this format: input - output - (not characted by character)?
Ideally:
- No bboxes
- No additional input text
- Fast
- Accurate
- Ideally easy to fine-tune with a dataset sample in an instruction
- No need to specify boxes in a dataset for training
Many thanks for your video. I have a simple questions. Can you teach how we can use another detection model for easyOCR instead of using default detection model (craft). Thank you very much !!!
I have a very complex question. How do you make it commit certain actions if a certain text is read? Like a If/And statement. EG: If it reads "Clear" in the text and "New", how do I make it preform an action to the "New". I'm mainly asking for Lua but I'm pretty sure Lua and Python are relatively similar. If you could answer it would be a big help Thanks
Heya @OneTrick Guy, you could apply the logic as you would for most logic gates. E.g. In this case you would loop through each word
for word in result:
if word=='New":
#trigger what you need here
This does not work with easyocr conflicting with python 3.10. Do you have any resources on running easyocr with this limitation?
Try paddleOCR instead @Isaac, way easier to get up and running.
I'm getting no module named as easyocr but i installed all packages
i dont see you do the preprocessing data. So is it still good without that?
Sure is! EasyOCR is way more resilient without doing multiple layers of filters
@@NicholasRenotte How is it different from PyTesseract? In your opinion, which one is better? Which one do you recommend?
How can we extract data efficiently from OCR, if we've to fetch data from screen(like Laptop screen). Can you please share any source?
Did you find anything?
i m facing below issue
File "E:\Python\Pratics\venv\lib\site-packages\easyocr\easyocr.py", line 90, in init
download_and_unzip(detection_models[detector_model]['url'], detection_models[detector_model]['filename'], self.model_storage_directory, verbose)
File "E:\Python\Pratics\venv\lib\site-packages\easyocr\utils.py", line 586, in download_and_unzip
urlretrieve(url, zip_path, reporthook=reporthook)
File "C:\Users\Onkar\AppData\Local\Programs\Python\Python38\lib\urllib
equest.py", line 283, in urlretrieve
reporthook(blocknum, bs, size)
File "E:\Python\Pratics\venv\lib\site-packages\easyocr\utils.py", line 686, in progress_hook
print(f'
{prefix} |{bar}| {percent}% {suffix}', end = printEnd)
File "C:\Users\Onkar\AppData\Local\Programs\Python\Python38\lib\encodings\cp1252.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\u2588' in position 12: character maps to
Plz suggest what need to do for download reader model
Is this helpful in handwritten images I am still confuse between tesseract and easy ocr kindly suggest
can you say what to do for vertical text extraction? is there any mothed?
Thank you so much for sharing ! Great vidéo!!
So glad you enjoyed it @Petrusse!
Hi sir thank you for your video,i have a doubt :- using the bounding box cordinates (like---([[758, 1106], [1210, 1106], [1210, 1148], [758, 1148]],
'TELEPHONE (Include Area Code)',
0.6403904183737966) HOW can i print the text "TELEPHONE" WORD
I Am facing an issue while importing easyocr, as my kernel goes dead when i try to import it in jupyter notebook, please help
Hmmm, any errors in the terminal?
what if i have a lot of dataset images?
Could try looping through them, would likely need some post processing or preprocessing to get clean results however!
@@NicholasRenotte can you make a tutorial , with datasetsss plss 😭
Thanks for the tutorial! Mind if I ask your computer specs? The detection was blazing fast for you and that too using only CPU?!
It takes at least 15-20 seconds on my laptop, and I'm wondering how I should speed up the detection because I plan to use it on a video, so I will end up passing every frame to easyocr.
Here you go, fastest way to speed it up would be to use a GPU.
CPU: AMD Ryzen 7 3700X Wraith Prism
GPU: Gigabyte GeForce RTX 2070 Super Windforce OC 8GB
Motherboard: MSI MAG B550 Tomahawk
RAM: Team T-Force Dark Z 32GB (2x16GB) 3200MHz CL16 DDR4
SSD: Kingston A400 2.5in SATA SSD 240GB
Hello,
Don't use the ocr on every single frame,
Choose the frames where the needed information is and apply the ocr.
I used this way, and is way easier to run on my poor machine.
hey bro,
I am getting a name error which says 'name 'easyocr' is not defined' . Can u help me getting out with this issue
Got it installed into the same environment? Double check that it is by running !pip list from the same place you're trying to install it from.
@@NicholasRenotte I've got the same problem. When run import easyocr, aslo writes version: 1.4.1
Amazing as always mate.
Hey, thank u for the nice video, is it possible for EasyOCR to deal with rotated Texts in Images by various degrees? or is there any Code to automatically correct the Orientation of the Images to read out the Text?
I believe it finds this hard. You can change the scanning pattern but dealing with unaligned text will be difficult.
this was very useful, thank you.
Is there a guide on EacyOcr fine tunning to improve the accuracy?
Hi Nick, Reader is taking very very long time to complete even 5% and gets ended with "ConnectionEndedwitherror" at around 6% .. why its taking this much time.. Is there any offline method? Note: my connection speed is 40Mbps.
Thanks so much for the video however im having an issue. I run the code in Sublime Text:
import easyocr
import cv2
from matplotlib import pyplot as plt
IMAGE_PATH = 'sign.jpeg'
reader = easyocr.Reader(['en'], gpu=False)
result = reader.readtext(IMAGE_PATH)
result
And shows this:
Using CPU. Note: This module is much faster with a GPU.
[Finished in 4.3s]
It doesnt output anything but doesnt say it failed . Im sure i installed all the packages.
Change result to print(result)
@@NicholasRenotte Thank you for the video! I'm having a similar issue but I keep getting "CUDA not available - defaulting to CPU. Note: This module is much faster with a GPU." And then a long list of Traceback calls. Can you help me with this? (I'm on a mac using VScode)
@@megankociscak6619 Could you solve this problem?
accuracy, F1 score wise which is better in your experience easyocr or pytesseract?
I tried this by just creating a virtual env with 'python3.10 -m venv work' and then 'source work/bin/activate'; but I had to pip install while the virtual env was activated the following:
pip install torch torchvision torchaudio
pip install easyocr
pip install matplotlib
import easyocr
import cv2
from matplotlib import pyplot as plt
import numpy as np
IMAGE_PATH = ‘page33-34.jpg’
reader = easyocr.Reader([‘en’],gpu=False)
result = reader.readtext(IMAGE_PATH)
result
I then got the correct output, but what if I just wanted the text only without other info or quotes or any extra punctuation? Also , I couldn't get this to work properly or at all when I tried placing all the above in a file named easyocr.py and typing 'python3 easyocr.py' in the terminal. I was in the top directory where the image file and the .py file were located but I wasn't running a virtual env this time. Would I have to install all the dependancies each time I run the .py file?
Oh man you got a good list of videos
Thanks @Atif, right now there's 213 videos on the schedule planned!!
Well @@remedytee, I try to start off simple and easy to understand so we can dive into more hardcore examples like this: ruclips.net/video/NApYP_5wlKY/видео.html
i'm new with this, can we use the camera and detect it like object detection for this code?
Sure can!
Hi Nicholas,
Can we run/deploy OpenCv + easyocr in Aws lambda ?? Is that possible ?
hello sir, with your videos it is so easy and helpful for me. actually i doing a project where i am stuck, can you plz help me in that. I want to create a project where, if i pass a image as input the model gives the info present in that image, like item name, quantity, price from that image. can you plz provide me how i will do that.
Whenever i am trying to easyocr.readtext terminal is showing me name error easyocr how to solve
Tbh, switch over to PaddleOCR, way more accurate! ruclips.net/video/t5xwQguk9XU/видео.html
Cool Movember look! 🖖😂
🤣thanks @Vikash, it's getting there, slowly evolving from seedy mo to full blown 'stache.
can we use this library to use ocr for webcam?
Thanks great vid. Can I use easyocr to decode scanned pdfs with multiple pages?
What are the option for GPU acceleration for AMD GPUs? Besides using Linux (I'm running W10).
I believe development is being done with ROCm but it's still very early days.
Nicolas your work is great! Is it possible to realize the same thing in react native? wich framework or library could you advice for that. Also, if I only want to extract for instance a date in the document that I capture, instead of all the text, is it possible ? thank you for your replying. Gos bless you!
hello, does this technology also allow me to ask him to describe images to me?
anyway thank you so much for this video
Is there a way to capture text from your screen and not an image. I want it to capture my desktop programs, like capturing the numbers in my game thats running in windowed mode and store that number in a txt or some kind of docu
Definitely, you could use an additional library like mss to capture your screen (or a region of your screen) e.g. stackoverflow.com/questions/35097837/capture-video-data-from-screen-in-python/54246290
@@NicholasRenotte Omg I love you so much.... you have no idea how long I've been looking for something like this, thank you so damn much lol
@@shineori4078 right back at ya 😍! Let me know how you go!
First of all Thank you very much for sharing the great content. If I want to complete this task within a less time (even though it may not be much accurate), are there any other alternative available ? (As implementing this is in a realtime project expects to complete in less time.)
Yah, I've got a real time example now, check out ANPR vid on the channel :)
This method works also for scanned pdfs or only images?
Great video! 👍
I am having problem differentiating between O and 0 , 2 and Z while character extraction from Image using EasyOcr . Can anyone suggest solution for this
Hello,
I try to make it work for me for a water meter recognition software but it doesn't even want to recognize the surf picture. It gives me an "I" with 1% accuracy... U have any idea maybe?
Ya, try PaddleOCR instead, super accurate (and faster): ruclips.net/video/t5xwQguk9XU/видео.html Ensure your images are clear and ideally close!
Can I use easyocr with raspberry pi?? I failed to install it ..
Hmm, haven't tried it. What errors are you getting?
how can i do the same with cv video please someone tell i mean by using webcam as input
Amazing content!! Can you compare it with PaddleOCR next time? I heard it works great in some cases.
will it work for handwritten text too ?? ... please reply 😀
Nope, mainly for computer generated text!
that was awsom Nicholas , but as i have checked the workable languages , I couldn't find khmer , so do you have any recommendation to any open source that work with khmer language ,looking forward to hearing back from you , thanks
I don't understand why I do like you and I can't run it showing such an error while my Python uses 3.10.6. It shows errors like this:
PS C:\Users\ACER> python -u "C:\Users\ACER\AppData\Local\Temp\tempCodeRunnerFile.python"
Traceback (most recent call last):
File "C:\Users\ACER\AppData\Local\Temp\tempCodeRunnerFile.python", line 2, in
import easyocr
File "C:\Users\ACER\AppData\Roaming\Python\Python310\site-packages\easyocr\__init__.py", line 1, in
from .easyocr import Reader
File "C:\Users\ACER\AppData\Roaming\Python\Python310\site-packages\easyocr\easyocr.py", line 3, in
from .recognition import get_recognizer, get_text
File "C:\Users\ACER\AppData\Roaming\Python\Python310\site-packages\easyocr
ecognition.py", line 2, in
import torch
File "C:\Users\ACER\AppData\Local\Programs\Python\Python310\lib\site-packages\torch\__init__.py", line 141, in
raise err
OSError: [WinError 126] The specified module could not be found. Error loading "C:\Users\ACER\AppData\Local\Programs\Python\Python310\lib\site-packages\torch\lib\shm.dll" or one of its dependencies.
PS C:\Users\ACER>
pls Help me!!!
I HAVE AN END OF STUDY PROJECT AND I AM VERY LATE WITH A SUBJECT WHICH IS VERY COMPLICATED If you or someone can help me please
Is it possible to only target a predetermined text on an image to by pulled? Scenario, I would like to scan ID card numbers, I do not care about any of the other text in the image (ID card). All ID's have the same static number of digits, all numbers, in case that helps. Thanks
Could isolate the numbers then apply OCR, it's usually done with a two part detector, I do something similar for extracting license plates (could use the same pipeline): ruclips.net/video/0-4p_QgrdbE/видео.html
Do you have the resources for online handwritting recognition? Thank you.
Nothing atm unfortunately @Dmitri
Will it work with randomly rotated characters like in some captchas?
Haven't actually tested that out @Expert Channel.
Is anyone getting this error for easyocr?
zipfile.BadZipFile: File is not a zip file
This line is producing the error: reader = easyocr.Reader(['en', 'ch_tra'], gpu=False)
Would this be able to recognize hand writing as well
Nope, it works best for computer generated text! Check out handwriting models for written text.
Thanks for the tutorial ! Could you tell me please how to use a custom dictionary ?
The tuts is well explained and i got everything working following your tut. But I got this error when trying to display the rectangles bounding boxes
any assistance
5 text = detection[1]
6 font = cv2.FONT_HERSHEY_SIMPLEX
----> 7 img = cv2.rectangle(img, text, top_left, bottom_right, (0,255,0), 5)
8 img = cv2.putText(img, text, top_left, font,2, (0,255,0),2, cv2.LINE_AA)
9
error: OpenCV(4.5.4) :-1: error: (-5:Bad argument) in function 'rectangle'
> Overload resolution failed:
> - Can't parse 'pt1'. Expected sequence length 2, got 3
> - Can't parse 'pt1'. Expected sequence length 2, got 3
> - Can't parse 'rec'. Expected sequence length 4, got 3
> - Can't parse 'rec'. Expected sequence length 4, got 3
Hi Nickolas, I really like your tutorials. they are the best for me. Can you please do this with "skew"ing the image?
Thanks for your efforts.
Will give it a crack!
is it possible to detect unknown language from a image??
Ah, I think it has certain supported languages. If it's unknown it's kinda hard to detect or work it out.
Amazing video!
Thanks!
Thanks for sharing. Really nice.
Anytime, thanks @Alok!
which one works faster tesseract-ocr or easy-ocr?
how to run them with gpu?
Heya @Mike, I think tesseract is faster but requires more preprocessing compared to easy-ocr which is heavily GPU reliant. Easy-OCR should run on your GPU as long as you have PyTorch configured to leverage GPU acceleration.
thank u , if folder contains set of images, how to extract text from each image from that folder of images, how to display
Heya @Raju, you can loop through each file in the folder and run the same code!
@@NicholasRenotte will it work for hand written text? please provide code to extract text from group of images as input
@@NicholasRenotte thank u Nicholas
@@RAZZKIRAN it works best on non-handwritten text, for hand written characters you might choose to use a DL model instead.
like this we can extract the vertical text in a image
Hello Nicholas
When I am trying to run (reader) in section1 with GPU. I am getting : "CUDA error: no kernel image is available for execution on the device"
Any Suggestions? :)
Got the right version of CUDA/cuDNN installed?
@@NicholasRenotte I am using cuda 10.1 and cudnn 7.6.5
@@h-electronics602 hmmm, are you running an Nvidia GPU?
How can we do this exact same thing with a video? I want to extract text from a video clip with no sound, can you please help?
Try this out, best example I've done of it so far: ruclips.net/video/0-4p_QgrdbE/видео.html
Is it work with Windows?? or only with Mac and Linux??
Heya @dhanashree, should be able to run on all three!
How to can train it
How to save a specific line into a specific file sir ?
Like save a single line from the OCR detections @Ludo?
how to change the size of the ocr box
Awesome videos!
Thanks so much 🙏
If anyone struggles to install torch, as of 31/01/23 you must have python 3.9 interpreter installed and selected in the text editor you are using. Doesn't work with python311 like I was trying firstly.
please can you make video how can train easyOcr?
i dont want the program to print the coordinates and accuracy , what can be done
Just wrap them in a separate print statement and print what's needed. E.g. ruclips.net/video/0-4p_QgrdbE/видео.html
thanks was helpful to me, do you have any video about image enhancement?
Not yet @July but it's planned!
Sir kindly do a video for handwritten text recognition also...... Thank you
Does it support other languages?
Sure does, it can handle a bunch: github.com/JaidedAI/EasyOCR
Great stuff!
Thanks 🙏 so much @Chuks Grinage!
Very good work, I'm going to ask a question how to do if there are two languages on the same picture.thanks
Heya @Ridha, you could perform multi-language detection by running over the image using a second OCR model in a different language!
@@NicholasRenotte thank you for answering me, it is good it is done but for the display of the text in Arabic in the form of question marks."???????????"
@@ridhazaghdoud6208 hmm, just checking, you loaded up the Arabic OCR model?
@@NicholasRenotte yes i loaded two language latin and arabic. latin is well displayed but arabic text no,the characters are question marks.
@@ridhazaghdoud6208 can you share the image, I can test it out?
Great Video!! can it read PDF???
Great stuff but it possible to use easyocr for handwriting ?
TBH it doesn't perform that well on handwriting. You're better off looking into Deep Learning approaches.
@@NicholasRenotte thanks
@@sokharsamb3518 anytime!
Hello Sokhar, what a coincidence !?
@@landrynoulawe1565 hi Landry, are you also working on handwriting?
Can we extract text from specific position or location from an image using this ocr ???
Definitely @Koppula! You can filter the region using numpy indexing then apply the OCR. I show how to do this in the latest ANPR tutorial in fact: ruclips.net/video/0-4p_QgrdbE/видео.html
@@NicholasRenotte wow🤩 thank you so much I am looking exactly for this type of filtering. I will share this to my frdz amazing video. Keep it up bro ,a big shout out to you 😉
That initial meme is "tell me you use Windows without telling me you use Windows 🤪"
Hahahaha, every god damn time!
Can we add this project in our resume?😅
YEAHYA! Go for it!
I keep getting segmantion fault
can these work on 32bit OS??
Haven't tried myself, would need to dig into each package.
@@NicholasRenotte Sir will this work if I try it on Google Colab ??
@@bhushantayde5762 yup!
Hello sir i am very much interested in deep learning projects and want to implement them in tenserflow android , is there any play list available your to teach tenserflow from scratch?
Nothin for Android yet @Sanjeev but I've got some React Native stuff coming soon!
I have developed android app but extraction process is on Google colab and save in firebase after save result fetch in android
@@rajeshkumar-lr1um ha cool!!