I have this image and my code to convert it to string is:
import pytesseract
from PIL import Image
print(pytesseract.image_to_string(Image.open("screenshot.png")))
and my ouptut is nothing...
any suggestion?
The string conversion of an image might be very long... Depending on your editor, it may hide it
Related
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))}")
maybe someone could help me! When I run the following code
import pytesseract
from pytesseract import image_to_string
from PIL import Image
import PIL
file = Image.open('/usr/local/Cellar/tesseract/4.1.0/share/tessdata/cap.png')
we_will = pytesseract.image_to_string(file)
print(we_will)
all that gets outputed is:
Process finished with exit code 0
which is no help. What am I doing wrong?
Sounds like we_will is the empty string. Try printing repr(we_will) to understand this idea more clearly.
IIRC, PyTesseract does this when it can't figure out what the text is inside the image. You can get the best results for a cropped image with a single-color background.
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)
I want to get the image in the clipboard and convert its data into a base64 encoded string so that I can put that into a HTML img tag.
I've tried the following:
from PIL import ImageGrab
from base64 import encodestring
img = ImageGrab.grabclipboard()
imgStr = encodestring(img.fp.read())
Plus some other combinations, all of which give me incorrect representations of the image.
I'm struggling with the docs on this one; does anyone have an idea on how to accomplish this?
ImageGrab.grabclipboard() returns an Image object. You need to convert it to a known image format, like jpeg or png, then to encode the resulting string in base64 to be able to
use it within an HTML img tag:
import cStringIO
jpeg_image_buffer = cStringIO.StringIO()
image.save(jpeg_image_buffer, format="JPEG")
imgStr = base64.b64encode(jpeg_image_buffer.getvalue())
(answer has been edited to fix the typo).
I am using the frombuffer command to save DICOM image data as TIFF images. But somehwere throughout this process, the image intensities are inverted (inverted LUT). Any idea on how to overcome this?
I have tried using the ImageOps.invert function from PIL, but if gives me "not supported for this image mode" error.
This is the code I'm using:
import dicom
import Image
import PIL.ImageOps
meta=dicom.read_file("DicomImage.dcm")
imHeight=meta.Rows
imWidth=meta.Columns
imSize=(imWidth,imHeight)
TT=Image.frombuffer("L",imSize,meta.PixelData,"raw","L",0,1)
TT.save("testOUTPUT.tiff","TIFF",compression="none")
Any guidance is appreciated ...
Python 2.7
PIL 1.1.7
Pydicom 0.9.6
Rather than "" for the raw mode, you should be using one of the mode strings from the documentation. Try "L" or "L;I", one or the other should be correct.