Image to text python - python

I am using python 3.x and using the following code to convert image into text:
from PIL import Image
from pytesseract import image_to_string
image = Image.open('image.png', mode='r')
print(image_to_string(image))
I am getting the following error:
Traceback (most recent call last):
File "C:/Users/hp/Desktop/GII/Image_to_text.py", line 12, in <module>
print(image_to_string(image))
File "C:\Users\hp\Downloads\WinPython-64bit-3.5.1.2\python-3.5.1.amd64\lib\site-packages\pytesseract\pytesseract.py", line 161, in image_to_string
config=config)
File "C:\Users\hp\Downloads\WinPython-64bit-3.5.1.2\python-3.5.1.amd64\lib\site-packages\pytesseract\pytesseract.py", line 94, in run_tesseract
stderr=subprocess.PIPE)
File "C:\Users\hp\Downloads\WinPython-64bit-3.5.1.2\python-3.5.1.amd64\lib\subprocess.py", line 950, in __init__
restore_signals, start_new_session)
File "C:\Users\hp\Downloads\WinPython-64bit-3.5.1.2\python-3.5.1.amd64\lib\subprocess.py", line 1220, in _execute_child
startupinfo)
FileNotFoundError: [WinError 2] The system cannot find the file specified
Please note that I have put the image in the same directory where my python is present. Also It does not raise error on image = Image.open('image.png', mode='r') but it raises on the line print(image_to_string(image)).
Any idea what might be wrong here? Thanks

You have to have tesseract installed and accesible in your path.
According to source, pytesseract is merely a wrapper for subprocess.Popen with tesseract binary as a binary to run. It does not perform any kind of OCR itself.
Relevant part of sources:
def run_tesseract(input_filename, output_filename_base, lang=None, boxes=False, config=None):
'''
runs the command:
`tesseract_cmd` `input_filename` `output_filename_base`
returns the exit status of tesseract, as well as tesseract's stderr output
'''
command = [tesseract_cmd, input_filename, output_filename_base]
if lang is not None:
command += ['-l', lang]
if boxes:
command += ['batch.nochop', 'makebox']
if config:
command += shlex.split(config)
proc = subprocess.Popen(command,
stderr=subprocess.PIPE)
return (proc.wait(), proc.stderr.read())
Quoting another part of source:
# CHANGE THIS IF TESSERACT IS NOT IN YOUR PATH, OR IS NAMED DIFFERENTLY
tesseract_cmd = 'tesseract'
So quick way of changing tesseract path would be:
import pytesseract
pytesseract.tesseract_cmd = "/absolute/path/to/tesseract" # this should be done only once
pytesseract.image_to_string(img)

You need to download tesseract OCR setup as well. Use this link to download the setup:http://digi.bib.uni-mannheim.de/tesseract/tesseract-ocr-setup-3.05.01.exe
Then, include this line in your code to use tesseract executable:
pytesseract.pytesseract.tesseract_cmd = 'C:\Program Files (x86)\Tesseract-OCR\tesseract'
This is the default location where tesseract will be installed.
That's it. I have also followed these steps to run the code at my end.
Hope this will help.

Please install the Below packages for extracting text from images pnf/jpeg
pip install pytesseract
pip install Pillow
using python pytesseract OCR (Optical Character Recognition) is the process of electronically extracting text from images
PIL is used anything from simply reading and writing image files to scientific image processing, geographical information systems, remote sensing, and more.
from PIL import Image
from pytesseract import image_to_string
print(image_to_string(Image.open('/home/ABCD/Downloads/imageABC.png'),lang='eng'))

Your "current" directory is not where you think.
==> You may specify the full path to the image, for example:
image = Image.open(r'C:\Users\hp\Downloads\WinPython-64bit-3.5.1.2\python-3.5.1.amd64\image.png', mode='r')

You can try using this python library: https://github.com/prabhakar267/ocr-convert-image-to-text
As mentioned on the README of the package, usage is very straightforward.
usage: python main.py [-h] input_dir [output_dir]
positional arguments:
input_dir
output_dir
optional arguments:
-h, --help show this help message and exit

Related

How to fix a Ghostscript OS Error when using Pillow?

This is the error I am getting:
OS Error: Ghostscript not found on paths
When running the following function:
from PIL import Image
def convert_ps_to_png(ps_file):
img = Image.open(ps_file)
img = Image.save("file.png")# Error occurs on this line
convert_ps_to_png(ps_file_path)
Any solutions would be appreciated. The end goal is to convert a .ps file to a .png file through a script.
As per the answers to your previous questions, you need to have Ghostscript installed, and available in the system environment variable $PATH.

WinError 5:Access denied PyTesseract

I know this question has already been answered on this site, however, none of the solutions I looke up the internet seemed to work. Here's what I tried:
Giving all permissions to my python file
Changing PATH variable to point to my tesseract folder
Running IDLE as administrator and then executing the file from there
This error is quite bothering me now and I can't advance any further because of it.
Here's my code if that's going to help:
import pytesseract
import sys
import argparse
try:
import Image
except ImportError:
from PIL import Image
from subprocess import check_output
pytesseract.pytesseract.tesseract_cmd = 'C:\Program Files\Tesseract-OCR'
c=pytesseract.image_to_string(Image.open('img.png'))
print(c)
Traceback:
Traceback (most recent call last):
File "C:\Users\Hp\Desktop\bot.py", line 12, in <module>
c=pytesseract.image_to_string(Image.open('captcha.png'))
File "C:\Python\lib\site-packages\pytesseract\pytesseract.py", line 122, in image_to_string
config=config)
File "C:\Python\lib\site-packages\pytesseract\pytesseract.py", line 46, in run_tesseract
proc = subprocess.Popen(command, stderr=subprocess.PIPE)
File "C:\Python\lib\subprocess.py", line 707, in __init__
restore_signals, start_new_session)
File "C:\Python\lib\subprocess.py", line 992, in _execute_child
startupinfo)
PermissionError: [WinError 5] Accès refusé
I encountered same problem, and I fixed it as 0xc0de said, change the below line:
pytesseract.pytesseract.tesseract_cmd=r"C:\MyApps\Tesseract-ocr\"
to:
pytesseract.pytesseract.tesseract_cmd="C:\\MyApps\\Tesseract-ocr\\tesseract.exe"
I suspect a few things, not sure about any though.
First and the most obvious, the path to Tesseract is not complete. It should be something like:
tesseract_cmd = 'C:\\Program Files (x86)\\Tesseract-OCR\\tesseract'
I believe your path points to a directory/folder and not an executable, though only you can confirm that. Let me know if this is incorrect, I see something else too that doesn't seem right at first, but needs more investigation.
Use this to read the tesseract path and also make sure that you have installed the Tesseract- OCR
pytesseract.pytesseract.tesseract_cmd = r'C:\\\Program Files (x86)\\\Tesseract-OCR\\\tesseract.exe'
using always double \\ instead of a single "\"
You need to install tesseract separately. I am providing the link from where you should install
https://github.com/UB-Mannheim/tesseract/wiki
tesseract-ocr-w32-setup-v5.0.0-alpha.20201127.exe (32 bit) and
tesseract-ocr-w64-setup-v5.0.0-alpha.20201127.exe (64 bit) resp.
choose here according to your system config. most of us have 64 bit. so choose that.
Install the file very carefully. I Would suggest doing it in a separate drive other than c.
take the path where you have install the tesseract.exe file. and paste it at pytesseract.pytesseract.tesseract_cmd
look the code...
import cv2
import pytesseract
pytesseract.pytesseract.tesseract_cmd = r'E:/OCR/tesseract_install/tesseract.exe'
img = cv2.imread('E:/OCR/example1.png')
# to see the image below codes are there
cv2.imshow('sampleimage',img)
#enter any key to destroy the image window opened due to previous line code
cv2.waitKey(0)
cv2.destroyAllWindows()
#convert image to text using tesseract
text = pytesseract.image_to_string(img)
print(text)
I had this issues pretty consistent, and I fix it without any access change.
The trick is:
1: You need to install tesseract and remember where is path to tesseract.exe file.
2: Then install pytesseract on exect environment you going to use it using pip install pytesseract
3: Do not add any Path to your System Env variables, it will mess up with everything.
4: CLEARLY define path to image file, or even better if image will be in closest/the same directory where is your python code.
from PIL import Image
import pytesseract
pytesseract.pytesseract.tesseract_cmd=r'C:/Users/your_name/AppData/Local/Programs/Tesseract-OCR/tesseract'
#this path to image
path = r'C:\Users\irina_max\Documents\Python_Scripts\Invoice 1.jpg'
image= Image.open(path)
image
Install the tesseract exe in a directory inside your project. I did the above and it worked fine, without giving Win 5 error.

Python Error: PermissionError: [WinError 5] Access is denied

So I am currently trying to use Tesseract (pytesseract wrapper) in Python 3.5. Now Im at the office so my guess is that there are some goofy permissions not set and thats why I get this error trying to run some pretty simple code. Now I do have admnin permissions on this machine and can change file permissions... any idea what I can do to get this to run?
If anything it will help me wrap my head around system permissions in general as I work with different OS.
import pytesseract
from PIL import Image
test = Image.open('test.png')
print (pytesseract.image_to_string(test))
Python 3.5.1 (v3.5.1:37a07cee5969, Dec 6 2015, 01:38:48) [MSC v.1900 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>>
========= RESTART: C:\Users\dmartin\CheckScanScript\TextFromImage.py =========
Traceback (most recent call last):
File "C:\Users\dmartin\CheckScanScript\TextFromImage.py", line 4, in <module>
print (pytesseract.image_to_string(test))
File "C:\Users\dmartin\AppData\Local\Programs\Python\Python35-32\lib\site-packages\pytesseract\pytesseract.py", line 161, in image_to_string
config=config)
File "C:\Users\dmartin\AppData\Local\Programs\Python\Python35-32\lib\site-packages\pytesseract\pytesseract.py", line 94, in run_tesseract
stderr=subprocess.PIPE)
File "C:\Users\dmartin\AppData\Local\Programs\Python\Python35-32\lib\subprocess.py", line 950, in __init__
restore_signals, start_new_session)
File "C:\Users\dmartin\AppData\Local\Programs\Python\Python35-32\lib\subprocess.py", line 1220, in _execute_child
startupinfo)
PermissionError: [WinError 5] Access is denied
I've had same problem. I solved this. First you must add path C:\Program Files (x86)\Tesseract-OCR\ in environment variables. Second I noticed if my code in differen disk, programm can't load language from folder tessdata. So I move my code from Disk D to Disk C, and it's finally work.
I faced this same issue and adding complete path for the pytesseract executable has worked for me. So , if you have installed pytesseract in your "C:\Program Files (x86)\Tesseract-OCR\tesseract" make sure in your code you are adding below path:-
C:\Program Files (x86)\Tesseract-OCR\tesseract\tesseract.exe
Your code would look like below
tesseract_cmd = 'C:\\Program Files (x86)\\Tesseract-OCR\\tesseract\\tesseract.exe'
pytesseract.pytesseract.tesseract_cmd = tesseract_cmd
print(pytesseract.image_to_string(Image.open('test.png')))
Hope this works for you too.
I solved it by give Permission to the file by code:
import stat
import os
os.chmod("file",stat.S_IRUSR|stat.S_IRGRP|stat.S_IROTH|stat.S_IXUSR|stat.S_IRUSR|stat.S_IWUSR|stat.S_IWGRP|stat.S_IXGRP)
os.remove("file")
I had the same issue and I resolved it by running IDLE as an Administrator and then opening the .py file thru IDLE.
Run Python or Python IDE as Admin and Set tesseract_cmd, pytesseract.pytesseract.tesseract_cmd, TESSDATA_PREFIX and tessdata_dir_config as follows:
from PIL import Image
import pytesseract
tesseract_cmd = 'D:\\Softwares\\Tesseract-OCR\\tesseract'
pytesseract.pytesseract.tesseract_cmd = 'D:\\Softwares\\Tesseract-OCR\\tesseract'
TESSDATA_PREFIX= 'D:\Softwares\Tesseract-OCR'
tessdata_dir_config = '--tessdata-dir "D:\\Softwares\\Tesseract-OCR\\tessdata"'
print(pytesseract.image_to_string( Image.open('D:\\ImageProcessing\\f2.jpg'), lang='eng', config=tessdata_dir_config))
For me what fixed it was inserting the direct path to tesseract.exe
What it looks like for me is:
import pyautogui
from PIL import Image
from pytesseract import *
pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
Note that you will have to find the path yourself!
I had the same error. For me, it turned out the file mentioned in the (access denied) error was still held by the system in the background from previous run. I ended the process in the Task Manager of Windows and problem solved.

pytesseract error Windows Error [Error 2]

Hi I am trying the python library pytesseract to extract text from image.
Please find the code:
from PIL import Image
from pytesseract import image_to_string
print image_to_string(Image.open(r'D:\new_folder\img.png'))
But the following error came:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\site-packages\pytesseract\pytesseract.py", line 161, in image_to_string
config=config)
File "C:\Python27\lib\site-packages\pytesseract\pytesseract.py", line 94, in run_tesseract
stderr=subprocess.PIPE)
File "C:\Python27\lib\subprocess.py", line 710, in __init__
errread, errwrite)
File "C:\Python27\lib\subprocess.py", line 958, in _execute_child
startupinfo)
WindowsError: [Error 2] The system cannot find the file specified
I did not found a specific solution to this. Can anyone help me what to do. Anything more to be downloaded or from where i can download it etc..
Thanks in advance :)
I had the same trouble and quickly found the solution after reading this post:
OSError: [Errno 2] No such file or directory using pytesser
Just need to adapt it to Windows, replace the following code:
tesseract_cmd = 'tesseract'
with:
tesseract_cmd = 'C:\\Program Files (x86)\\Tesseract-OCR\\tesseract'
(need double \\ to escape first \ in the string)
You're getting exception because subprocess isn't able to find the binaries (tesser executable).
The installation is a 3 step process:
1.Download/Install system level libs/binaries:
For various OS here's the help. For MacOS you can directly install it using brew.
Install Google Tesseract OCR (additional info how to install the
engine on Linux, Mac OSX and Windows). You must be able to invoke the
tesseract command as tesseract. If this isn’t the case, for example
because tesseract isn’t in your PATH, you will have to change the
“tesseract_cmd” variable at the top of tesseract.py. Under
Debian/Ubuntu you can use the package tesseract-ocr. For Mac OS users.
please install homebrew package tesseract.
For Windows:
An installer for the old version 3.02 is available for Windows from
our download page. This includes the English training data. If you
want to use another language, download the appropriate training data,
unpack it using 7-zip, and copy the .traineddata file into the
'tessdata' directory, probably C:\Program Files\Tesseract-OCR\tessdata.
To access tesseract-OCR from any location you may have to add the
directory where the tesseract-OCR binaries are located to the Path
variables, probably C:\Program Files\Tesseract-OCR.
Can download the .exe from here.
2.Install Python package
pip install pytesseract
3.Finally, you need to have tesseract binary in you PATH.
Or, you can set it at run-time:
import pytesseract
pytesseract.pytesseract.tesseract_cmd = '<path-to-tesseract-bin>'
For Windows:
pytesseract.pytesseract.tesseract_cmd = 'C:/Program Files (x86)/Tesseract-OCR/tesseract'
The above line will make it work temporarily, for permanent solution add the tesseract.exe to the PATH - such as PATH=%PATH%;"C:\Program Files (x86)\Tesseract-OCR".
Beside that make sure that TESSDATA_PREFIX Windows environment variable is set to the directory, containing tessdata directory. For example:
TESSDATA_PREFIX=C:\Program Files (x86)\Tesseract-OCR
i.e. tessdata location is: C:\Program Files (x86)\Tesseract-OCR\tessdata
Your example:
from PIL import Image
import pytesseract
pytesseract.pytesseract.tesseract_cmd = 'C:/Program Files (x86)/Tesseract-OCR/tesseract'
print pytesseract.image_to_string(Image.open(r'D:\new_folder\img.png'))
You need Tesseract OCR engine ("Tesseract.exe") installed in your machine. If the path is not configured in your machine, provide complete path in pytesseract.py(tesseract.py).
README
Install Google Tesseract OCR (additional info how to install the engine on Linux, Mac OSX and Windows). You must be able to invoke the tesseract command as tesseract. If this isn't the case, for example because tesseract isn't in your PATH, you will have to change the "tesseract_cmd" variable at the top of tesseract.py. Under Debian/Ubuntu you can use the package tesseract-ocr. For Mac OS users. please install homebrew package tesseract.
Another thread
I have also faced the same problem regarding pytesseract.
I would suggest you to work in linux environment, to solve such errors.
Do the following commands in linux:
pip install pytesseract
sudo apt-get update
sudo apt-get install pytesseract-ocr
Hope this will do the work..

emf to jpeg conversion using PIL works in python but not pyinstaller packaged exe

I have a peculiar problem at the intersection of the EMF image format, the python PIL (as well as Pillow) image libraries, and the Pyinstaller program for packaging Python into a Windows executable.
I have a script that uses PIL/Pillow to convert an EMF file to JPEG. This works correctly when I run the python script in python. However, when I package it into an EXE using Pyinstaller.exe -F, it does not work.
With the Pillow version, I get a simple error saying
"Cannot convert image1.emf".
With the PIL version, I get a longer message that says:
Traceback (most recent call last):
File "", line 38, in
File "", line 27, in convertImageFile
File "C:\Embibe\Git\content-ingestion\src\build\convertImage\out00-PYZ.pyz\PIL
.Image", line 2126, in open
IOError: cannot identify image file 'image1.emf'
Has anyone else encountered this and found a working solution?
The gory details follow, if you need them... :-)
OS: Windows 7 64-bit (but all software is 32 bit)
Software:: Python:2.7.5, Pyinstaller:2.1, PIL:built-in with Python, Pillow: 2.4.0
Python script convImg.py:
from __future__ import print_function
import os, sys
from PIL import Image
for infile in sys.argv[1:]:
f, e = os.path.splitext(infile)
outfile = f + ".jpg"
if infile != outfile:
try:
Image.open(infile).convert('RGB').save(outfile)
except IOError:
print("cannot convert", infile)
run as: convImg.py image1.emf works correctly and generates image1.jpg.
When packaged to exe using \python27\scripts\pyinstaller.exe -F convImg.py and run as convImg.exe image1 gives the errors listed above for the Pillow and PIL versions.
I found a related post here, Pyinstaller troubles with Pillow but the solution for it, namely using py2app instead of pyinstaller is not an option for me since that is for MacOS and I need Windows. I considered using similar alternatives for windows, py2exe and cx_freeze, but they do not create a single self-contained exe like pyinstaller does.
Thanks,
Amit
Ok, I found the answer to my own question at http://www.py2exe.org/index.cgi/py2exeAndPIL
The issue is that PIL relies on dynamically loading many image plugins, and when packaged using pyinstaller or py2exe, it cannot find these plugins. So the key is to
a. explicitly import all the plugins in your code
b. mark the Image class status as already initialized
c. explicitly specify the target format to the save command
So, I modify convImag.py to be:
from __future__ import print_function
import os, sys
from PIL import Image
from PIL import BmpImagePlugin,GifImagePlugin,Jpeg2KImagePlugin,JpegImagePlugin,PngImagePlugin,TiffImagePlugin,WmfImagePlugin # added this line
Image._initialized=2 # added this line
for infile in sys.argv[1:]:
f, e = os.path.splitext(infile)
outfile = f + ".jpg"
if infile != outfile:
try:
Image.open(infile).convert('RGB').save(outfile,"JPEG") # added "JPEG"
except IOError:
print("cannot convert", infile)
After this, the pyinstaller tool works like a charm and the packaged exe runs correctly :-)
Thanks to g.d.d.c. for confirming I was on the right track with the solution!

Categories

Resources