cv2 to tesseract directly without saving - python

import pytesseract
from pdf2image import convert_from_path, convert_from_bytes
import cv2,numpy
def pil_to_cv2(image):
open_cv_image = numpy.array(image)
return open_cv_image[:, :, ::-1].copy()
path='OriginalsFile.pdf'
images = convert_from_path(path)
cv_h=[pil_to_cv2(i) for i in images]
img_header = cv_h[0][:160,:]
#print(pytesseract.image_to_string(Image.open('test.png'))) I only found this in tesseract docs
Hello, is there a way to read the img_header directly using pytesseract without saving it,
pytesseract docs

pytesseract.image_to_string() input format
As documentation explains pytesseract.image_to_string() needs a PIL image as input.
So you can convert your CV image into PIL one easily, like this:
from PIL import Image
... (your code)
print(pytesseract.image_to_string(Image.fromarray(img_header)))
if you really don't want to use PIL!
see:
https://github.com/madmaze/pytesseract/blob/master/src/pytesseract.py
pytesseract is an easy wrapper to run the tesseract command def run_and_get_output() line, you'll see that it saves your image into an temporary file, and then gives the address to the tesseract to run.
hence, you can do the same with opencv, just rewrite the pytesseract only .py file to do it with opencv, although; i don't see any performance improvements whatsoever.

The fromarray function allows you to load the PIL document into tesseract without saving the document to disk, but you should also ensure that you don`t send a list of pil images into tesseract. The convert_from_path function can generate a list of pil images if a pdf document contains multiple pages, therefore you need to send each page into tesseract individually.
import pytesseract
from pdf2image import convert_from_path
import cv2, numpy
def pil_to_cv2(image):
open_cv_image = numpy.array(image)
return open_cv_image[:, :, ::-1].copy()
doc = convert_from_path(path)
for page_number, page_data in enumerate(doc):
cv_h= pil_to_cv2(page_data)
img_header = cv_h[:160,:]
print(f"{page_number} - {pytesseract.image_to_string(Image.fromarray(img_header))}")

Related

Python - Image to text enclosed in pentagon shape pytesseract

I am trying to ready Energy Efficiency Rating from EPC certificate using python. Usually EPC certificate comes in PDF format. I have converted PDF into image already and using pytesseract to get text from image. However I am not getting expected results.
Sample Image:
Expected output:
Current rating : 79, Potential rating : 79
What I have tried so far:
from pdf2image import convert_from_path
import pytesseract
from PIL import Image
pages = convert_from_path(r'my_file.pdf', 500)
img =pages[0].save(r'F:\Freelancer\EPC rating\fwdepcs\out.jpg', 'JPEG')
text = pytesseract.image_to_string(Image.open(r'F:\Freelancer\EPC rating\fwdepcs\out.jpg'))
However text does not capture 79.
I also tried cv2 pattern matching and shape detection, but those not worked for other reasons.
You say that you have convert this pdf to image file.
Use PIL(.crop()) or opencv to crop picture.And crop it like this:
And use PIL Image.convert("1"),maybe tesseract can catch this number.
If not,I think you can use jTessBoxEditor to train tesseract.

Extracting text/characters from Xray images using python

I am trying to extract the characters in the x-ray, I have tried using pytesseract to extract but couldn't succeed, I used a canny edge to remove the noise and extract, but still, I am not able to extract the text/chars. Can you please help/guide me to extract the text/chars
Try this tuotrial to locate the text:
https://www.pyimagesearch.com/2018/08/20/opencv-text-detection-east-text-detector/
Then once you locate you can isolate and use tesseract to recognize it.
If it's a DICOM file, you could use gdcm to get the attribute. It's available on python too.
pytesseract should be sufficient, if the file is in 'png' or 'jpg' form.
now suppose image is the name of your image. Please write the below code.
from PIL import Image
from pytesseract import image_to_string
import pytesseract
pytesseract.pytesseract.tesseract_cmd = r'C:/Program Files (x86)/Tesseract-OCR/tesseract.exe'
im = Image.open('F:/kush/invert.jpg')
pytesseract.image_to_string(im, lang = 'eng')

how to read this file using tesseract(python)?

how to read this png file using tesseract?
data:image/png;base64,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
Decoding Captcha isn't easy job, but maybe this example would be helpful.
In order to recognize text from Captcha you need more magic with cv2.
bfile='blablabla' #your base64 image
ffile=bfile.decode('base64')
pl=open('capcha.png','wb')
pl.write(ffile)
pl.close()
import pytesseract
from PIL import Image
img=Image.open('capcha.png')
text = pytesseract.image_to_string(img)
print (text)

Using python to save a JPG image that was edited in the script

Referring to the answer to this question, I tried to save my own JPG image files, after some basic image processing. I've only applied a rotation and a shear. This is my code:
import numpy as np
import sys
from skimage import data, io, filter, color, exposure
import skimage.transform as tf
from skimage.transform import rotate, setup, AffineTransform
from PIL import Image
mypath = PATH_TO_FILENAME
readfile = FILENAME
img = color.rgb2gray(io.imread(mypath + readfile))
myimg = rotate(img, angle=10, order=2)
afine_tf = tf.AffineTransform(shear=0.1)
editedimg = tf.warp(myimg, afine_tf)
# IF I UNCOMMENT THE TWO LINES BELOW, I CAN SEE THE EDITED IMAGE AS EXPECTED
#io.imshow(editedimg)
#io.show()
saveimg= np.array(editedimg)
result = Image.fromarray((saveimg).astype(np.uint8))
newfile = "edited_" + readfile
result.save(path+newfile)
I know that the image processing was fine because if I display it before saving, it's just the original image with a bit of rotation and shearing, as expected. But I'm doing something wrong while saving it. I tried without the astype(np.uint8)) part but got an error. Then I removed some of the code from the link mentioned above because I guessed it was particularly for Fourier Transforms, since when I included some of their code, then I got an image that was all gray but with white lines in the direction of the shear I'd applied. But now the image that gets saved is just 2KB of nothing but blackness.
And when I tried something as simple as:
result = Image.fromarray(editedimg)
result.save(path+newfile)
then I got this error:
raise IOError("cannot write mode %s as JPEG" % im.mode)
IOError: cannot write mode F as JPEG
I don't really need to use PIL, if there's another way to simply save my image, I'm fine with that.
Look into the PIL fork, Pillow, is is not as outdated and what you should probably be using for this.
Also depending on your operating system you may need a few other libraries to compile PIL with JPEG support properly, see here
This may also help Says you need to convert your image to RGB mode before saving.
Image.open('old.jpeg').convert('RGB').save('new.jpeg')

ImageOps.unsharp_mask not working on PIL

I writing a Python app where I need to do some image tasks.
I'm trying PIL and it's ImageOps module. But it looks that the unsharp_mask method is not working properly. It should return another image, but is returning a ImagingCore object, which I don't know what is.
Here's some code:
import Image
import ImageOps
file = '/home/phius/test.jpg'
img = Image.open(file)
img = ImageOps.unsharp_mask(img)
#This fails with AttributeError: save
img.save(file)
I'm stuck on this.
What I need: Ability to do some image tweeks like PIL's autocontrast and unsharp_mask and to re-size, rotate and export in jpg controlling the quality level.
What you want is the filter command on your image and the PIL ImageFilter module[1] so:
import Image
import ImageFilter
file = '/home/phius/test.jpg'
img = Image.open(file)
img2 = img.filter(ImageFilter.UnsharpMask) # note it returns a new image
img2.save(file)
The other filtering operations are part of the ImageFilter module[1] as well and are applied the same way. The transforms (rotation, resize) are handled by calling functions[2] on the image object itself i.e. img.resize. This question addresses JPEG quality How to adjust the quality of a resized image in Python Imaging Library?
[1] http://effbot.org/imagingbook/imagefilter.htm
[2] http://effbot.org/imagingbook/image.htm

Categories