Exemplo n.º 1
0
    def image_to_text(self, link):
        try:
            from PIL import Image
        except:
            import Image

        self.r = mathpix.latex({
            'src': mathpix.image_uri(link),
            'formats': self.formats
        })
        '''except socket.error:
            print('hi i am naresh')
            pass'''

        try:

            self.element = self.r['latex_confidence']

            if self.element != None:
                self.confidence.append(self.element)
            else:
                self.confidence.append("0")

            element = self.r['latex_simplified']

            if element != None:
                self.latex.append(element)
            else:
                self.latex.append("error")

            element = self.r['text']

            if element != None:
                self.numerical_texts.append(element)
            else:
                self.numerical_texts.append("error")
        except KeyError:
            self.latex.append("error")
            self.numerical_texts.append("error")

        element = pytesseract.image_to_string(Image.open(link))

        if element != None:
            self.texts.append(element)
        else:
            self.texts.append("error")

        self.data = pd.DataFrame(
            list(
                zip(self.numerical_texts, self.latex, self.confidence,
                    self.texts)),
            columns=['numerical_text', 'latex', 'confidence', 'text'])
        return self.data
Exemplo n.º 2
0
def main(root):
    savedir = '../out/'
    list = os.listdir(root)
    for filename in list:
        path = os.path.join(rootdir, filename)
        if not os.path.isfile(path):
            break
        portion = os.path.splitext(filename)
        savename = portion[0] + '.txt'
        savepath = os.path.join(savedir, savename)
        r = mathpix.latex({
            'src': mathpix.image_uri(path),
            'formats': ['latex_simplified']
        })

        with open(savepath, 'w+') as f:
            f.write(r['latex_simplified'])
        print(savepath)
Exemplo n.º 3
0
import mathpix
import json

#
# Example using Mathpix OCR with multiple result formats. We want to recognize
# both math and text in the image, so we pass the ocr parameter set to
# ['math', 'text']. This example returns the LaTeX text format, which
# starts in text mode instead of math mode, the latex_styled format,
# the asciimath format, and the mathml format. We define custom
# math delimiters for the text result so that the math is surrounded
# by dollar signs ("$").
#

r = mathpix.latex({
    'src': mathpix.image_uri('../image/get.jpg'),
    'ocr': ['math', 'text'],
    'skip_recrop': True,
    'formats': ['text', 'latex_styled', 'asciimath', 'mathml'],
    'format_options': {
        'text': {
            'transforms': ['rm_spaces', 'rm_newlines'],
            'math_delims': ['$', '$']
        },
        'latex_styled': {
            'transforms': ['rm_spaces']
        }
    }
})

#
Exemplo n.º 4
0

im = ImageGrab.grab()
while len(position) == 0:
    with mouse.Listener(on_click=on_click) as listener:
        listener.join()
bbox = (position[0], position[1], position[2], position[3])
print(bbox)
im.save('/tmp/latexTmp.jpg')
img = Image.open('/tmp/latexTmp.jpg')
cropped = img.crop(bbox)
cropped.save('/tmp/latexTmp.jpg')
try:
    r.append(
        mathpix.latex({
            'src': mathpix.image_uri('/tmp/latexTmp.jpg'),
            'formats': ['latex_simplified']
        }))
except:
    pass
r_new = []
for i in range(len(r)):
    try:
        islatexFormual = r[i]['latex_simplified'] != 0
        if (islatexFormual):
            r_new.append(r[i])
    except:
        pass

if (len(r_new) == 1):
    formatDict = {}
Exemplo n.º 5
0
    calls += 1

    if calls < 100:
        pass

    else:
        print("Waiting for API")
        time.sleep(60)
        calls = 0

    print(calls)

    try:

        r = mathpix.latex({'src': mathpix.image_uri(link), 'formats': formats})
    except socket.error:
        print(link)
        pass

    try:

        element = r['latex_confidence']

        if element != None:
            confidence.append(element)
        else:
            confidence.append("0")

        element = r['latex_simplified']
Exemplo n.º 6
0
def pdftranslator():

    finalResult = []

    os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = r'Mathpix-e6a478ab8826.json'

    def listprocessor(words, pageNum):
        # y-axis intervals A[p1by, p1ty] B[p2by, p2ty]
        lines = []
        currentLine = -1

        for i in range(0, len(words) - 1):
            sameLine = None  # defaults to none
            if not ((words[i + 1][1] - words[i][3] >= 0) or
                    (words[i][1] - words[i + 1][3] >=
                     0)):  #(p2by-p1ty>=0||p1by-p2ty>=0):
                oBot = max(words[i][1], words[i + 1][1])  #max(p1by,p2by)
                oTop = min(words[i][3], words[i + 1][3])  #min(p1ty,p2ty)
                overlap = oTop - oBot
                overlapConst = 0.2
                if overlap >= overlapConst * max(
                        words[i][3] - words[i][1],
                        words[i + 1][3] - words[i + 1][1]
                ):  # overlapConst*max(p1ty-p1by, p2ty-p2by)): # checks if the words overlap
                    sameLine = True
                else:
                    sameLine = False
            else:
                sameLine = False

            if (sameLine == True):
                # print("true") - for debugging purposes
                lines[currentLine] = [
                    lines[currentLine][0],
                    min(lines[currentLine][1], words[i + 1][1]),
                    words[i + 1][2],
                    max(lines[currentLine][3], words[i + 1][3])
                ]  #[p1tx, max(p1ty, p2ty), p2bx, min(p1by, p2by)])
            else:  # if not on the sameline
                lines.append([
                    words[i + 1][0], words[i + 1][1], words[i + 1][2],
                    words[i + 1][3]
                ])  #([p2tx, p2ty, p2bx, p2by])
                currentLine += 1

        #print(lines)
        lines.pop(0)
        print(lines)

        # Opens a image in RGB mode
        im = Image.open(r"./preprocessed-data/preprocessed-data" +
                        str(pageNum) + ".jpg")
        os.mkdir('/Users/matthewyang/PycharmProjects/MathPix3/processed-data' +
                 str(pageNum))

        counter = 0
        for line in lines:
            im1 = im.crop((line[0] - 5, line[1] - 5, line[2] + 5, line[3] + 5))
            saveName = 'crop' + str(counter) + '.jpg'
            finalPath = os.path.join(
                '/Users/matthewyang/PycharmProjects/MathPix3/processed-data' +
                str(pageNum), saveName)
            im1.save(finalPath, 'JPEG')
            counter += 1

    pages = convert_from_path('test.pdf', 750)

    counta = 0
    for page in pages:
        page.save(
            './preprocessed-data/preprocessed-data' + str(counta) + '.jpg',
            'JPEG')
        counta += 1
        # now crop based on the list

    pageNum = 0
    for filename in sorted(os.listdir('./preprocessed-data')):
        if filename.endswith(".png") or filename.endswith(".jpg"):
            #Text recognition
            client = vision.ImageAnnotatorClient()
            File_Name = filename
            Folder_Path = r'/Users/matthewyang/PycharmProjects/MathPix3/preprocessed-data'
            with io.open(os.path.join(Folder_Path, File_Name),
                         'rb') as image_file:
                content = image_file.read()

            image = vision.types.Image(content=content)
            response = client.text_detection(image=image)
            #print(response)
            texts = response.text_annotations
            #print('Texts:')
            bound_list = []
            bound_list.append([100000, 100001, 99990, 99999])
            i = 1
            for text in texts:
                #print('\n"{}"'.format(text.description))
                vertices = ([
                    '({},{})'.format(vertex.x, vertex.y)
                    for vertex in text.bounding_poly.vertices
                ])
                #print('bounds: {}'.format(','.join(vertices)))
                bound_list.append('bounds: {}'.format(','.join(vertices)))
                bound_list[i] = bound_list[i].strip('bounds: ')
                bound_list[i] = bound_list[i].replace("(", "")
                bound_list[i] = bound_list[i].replace(")", "")
                bound_list[i] = [int(s) for s in bound_list[i].split(",")]
                bound_list[i].pop(2)
                bound_list[i].pop(2)
                bound_list[i].pop(4)
                bound_list[i].pop(4)
                i += 1

            # print(filename)
            # print("\n")
            print(bound_list)
            print("\n")

            listprocessor(bound_list, pageNum)
            pageNum += 1

    #!/usr/bin/env python3
    #
    # Example using Mathpix OCR with multiple result formats. We want to recognize
    # both math and text in the image, so we pass the ocr parameter set to
    # ['math', 'text']. This example returns the LaTeX text format, which
    # starts in text mode instead of math mode, the latex_styled format,
    # the asciimath format, and the mathml format. We define custom
    # math delimiters for the text result so that the math is surrounded
    # by dollar signs ("$").
    #
    #
    #
    #
    # Create a for loop to go through all pngs generated.
    for x in range(0, pageNum):
        for filename in sorted(os.listdir('./processed-data' + str(x))):
            r = mathpix.latex({
                'src':
                mathpix.image_uri(
                    os.path.join('./processed-data' + str(x), filename)),
                'ocr': ['math', 'text'],
                'skip_recrop':
                True,
                'formats': ['latex_styled'],
                'format_options': {
                    'text': {
                        'transforms': ['rm_spaces', 'rm_newlines'],
                        'math_delims': ['$', '$']
                    }
                }
            })

            #
            # Note the actual results might be slighly different in LaTeX spacing or
            # MathML attributes.
            #
            #
            # print('Expected for r["text"]: "$-10 x^{2}+5 x-3$ and $-7 x+4$"')
            # print('Expected for r["latex_styled"]: "-10 x^{2}+5 x-3 \\text { and }-7 x+4"')
            # print('Expected for r["asciimath"]: "-10x^(2)+5x-3\\" and \\"-7x+4"')
            # print('Expected for r["mathml"]: "<math><mo>\u2212</mo><mn>10</mn><msup><mi>x</mi><mn>2</mn></msup><mo>+</mo><mn>5</mn><mi>x</mi><mo>\u2212</mo><mn>3</mn><mtext>\u00a0and\u00a0</mtext><mo>\u2212</mo><mn>7</mn><mi>x</mi><mo>+</mo><mn>4</mn></math>"')
            json_str = json.dumps(r, indent=4, sort_keys=True)
            #print("\nResult object:", json_str)
            output = json.loads(json_str)
            finalResult.append(output['latex_styled'])
    return finalResult
Exemplo n.º 7
0
#!/usr/bin/env python3

import mathpix
import json

#
# Simple example of calling Mathpix OCR with ../images/algebra.jpg.
#
# We use the default ocr (math-only) and a single return format, latex_simplified.
#
# If you expect the image to be math and want to examine the result
# as math then the return format should either be latex_simplified,
# asciimath, or mathml. If you want to see the text in the image then
# you should include 'ocr': ['math', 'text'] as an argument and
# the return format should be either text or latex_styled
# (depending on whether you want to use the result as a paragraph or an equation).
#

r = mathpix.latex({
    'src':
    mathpix.image_uri(
        '/home/jakob/Documents/Hackathon/lent21/api-examples/images/algebra.jpg'
    ),
    'formats': ['latex_simplified']
})

print(json.dumps(r, indent=4, sort_keys=True))
assert (r['latex_simplified'] == '12 + 5 x - 8 = 12 x - 10')
Exemplo n.º 8
0
import mathpix
import json

#
# Example using Mathpix OCR with multiple result formats. We want to recognize
# both math and text in the image, so we pass the ocr parameter set to
# ['math', 'text']. This example returns the LaTeX text format, which
# starts in text mode instead of math mode, the latex_styled format,
# the asciimath format, and the mathml format. We define custom
# math delimiters for the text result so that the math is surrounded
# by dollar signs ("$").
#

r = mathpix.latex({
    'src': mathpix.image_uri('../images/mixed_text_math.jpg'),
    'ocr': ['math', 'text'],
    'skip_recrop': True,
    'formats': ['text', 'latex_styled', 'asciimath', 'mathml'],
    'format_options': {
        'text': {
            'transforms': ['rm_spaces', 'rm_newlines'],
            'math_delims': ['$', '$']
        },
        'latex_styled': {
            'transforms': ['rm_spaces']
        }
    }
})

#
Exemplo n.º 9
0
#
# Example using Mathpix OCR with multiple result formats. We want to recognize
# both math and text in the image, so we pass the ocr parameter set to
# ['math', 'text']. This example returns the LaTeX text format, which
# starts in text mode instead of math mode, the latex_styled format,
# the asciimath format, and the mathml format. We define custom
# math delimiters for the text result so that the math is surrounded
# by dollar signs ("$").
#

#array to store the LaTex code into a final string
latex_code=[]

r1 = mathpix.latex({
    'src': mathpix.image_uri('new_rotated1.png'),
    'ocr': ['math', 'text'],
    'skip_recrop': True,
    'formats': ['text', 'latex_styled'],
    'format_options': {
        'text': {
            'transforms': ['rm_spaces', 'rm_newlines'],
            'math_delims': ['$', '$']
        },
        'latex_styled': {
            'transforms': ['rm_spaces'],
            'math_delim': ['$$','$$']}
    }
})
r2 = mathpix.latex({
    'src': mathpix.image_uri('new_rotated2.png'),
Exemplo n.º 10
0
#!/usr/bin/env python3

import mathpix
import json

#
# Simple example of calling Mathpix OCR with ../images/algebra.jpg.
#
# We use the default ocr (math-only) and a single return format, latex_simplified.
#
# If you expect the image to be math and want to examine the result
# as math then the return format should either be latex_simplified,
# asciimath, or mathml. If you want to see the text in the image then
# you should include 'ocr': ['math', 'text'] as an argument and
# the return format should be either text or latex_styled
# (depending on whether you want to use the result as a paragraph or an equation).
#

r = mathpix.latex({
    'src': mathpix.image_uri('../images/algebra.jpg'),
    'formats': ['latex_simplified']
})

print(json.dumps(r, indent=4, sort_keys=True))
assert (r['latex_simplified'] == '12 + 5 x - 8 = 12 x - 10')