Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Input image dimension requirements unclear #2

Open
32-git opened this issue Sep 12, 2024 · 34 comments
Open

Input image dimension requirements unclear #2

32-git opened this issue Sep 12, 2024 · 34 comments

Comments

@32-git
Copy link

32-git commented Sep 12, 2024

Hi. I am using this repo as a part of my project. And I am currently having a problem with the dimensions of the image I pass to the HME recognizer.

If I use the original image size, I get the following error:
Exception: Kernel shape must have the same length as input, but received kernel of shape (3, 3, 1, 32) and input of shape (None, None, 28, 28, 1).

In my attempts to resize the image, I have to go down to sizes such as 120x120 to avoid getting the above error. But when I go down to that image size, then the handwritten math is barely recognizable.

So instead of constantly guessing, I wanted to know what the actual requirements of the model are regarding image size and whether it would be possible to pass larger images (e.g. 600x600) to the model as well.

Thanks in advance!

@carolreis
Copy link
Owner

Hi! Just to give you a feedback: I was in a conference these last weeks, I just came back. Within a few days I'll take a look and help you!

@carolreis
Copy link
Owner

carolreis commented Sep 20, 2024

Meanwhile, can you give examples of your images? @32-git

@32-git
Copy link
Author

32-git commented Sep 21, 2024

Hi! Thanks for the reply and my apologies if i disturbed you. My images may look something like this

image

or this

image

The width of the image may vary as shown above, based on the browser window size when drawing.

Now I would genuinely appreciate it if you could let me know whether these images are fine. If not, what should I pay attention to when passing the images to the model?

@carolreis
Copy link
Owner

carolreis commented Sep 21, 2024

Hi! Don't worry, it's ok to ask me some help.

I'll try to use your images. Did you take a look carefully at the code I used as example?

I'll let you know my results and see what the problem is

But apparently these images should be fine

@32-git
Copy link
Author

32-git commented Sep 21, 2024

Great! If the images should be fine, that's a good start. I have in fact looked at your example code and that's what I based my approach off of:

from mathreader import api
import base64 as b64
import sys

hme_recognizer = api.HME_Recognizer()

def pass_image(image):
  try:
    hme_recognizer.load_image(image)
    expression, img = hme_recognizer.recognize()
    sys.stdout.write(f"{expression}")
  except Exception as e:
    sys.stdout.write(f'Exception: {e}')

try:
  data_url = sys.argv[1]
  header, encoded = data_url.split("base64,", 1)
  pass_image(encoded)

except Exception as err:
  print(f'Exception: {err}')

As I said, the error that I mentioned in my first message is what I receive. Although if it helps I could also paste the entire output I get, which shows all the steps of when the code executes.

@carolreis
Copy link
Owner

carolreis commented Sep 26, 2024

Hello, I ran the "example.py" with your first image and I had the correct output:

image

image


I added both images to:
images/validation/teste.png and images/validation/teste2.png

And, then I ran:

python3 example.py validation/teste.png and python3 example.py validation/teste2.png


For simplicity, I didn't create another project importing mathreader.
I did the test inside the repo:

virtualenv -p $(which python3) .
pip install -e .
cd mathreader
python3 example.py validation/teste.png

In your case, you should install it directly by pip(3) install mathreader...


Now, I will test it with your code.

But now we know that your images are compatible with the application

@carolreis
Copy link
Owner

carolreis commented Sep 26, 2024

@32-git

This code worked with your images:

teste.py

from mathreader.api import *
from mathreader.config import Configuration
from mathreader.helpers.exceptions import *
import base64
import numpy as np
import cv2
import sys

configs = Configuration()

class Example:

    def __init__(self):

        expression = ""
        hme_recognizer = HME_Recognizer()
        print(sys.argv)

        if sys.argv and len(sys.argv) > 1:
            image_path = configs.package_path + '/images/' + sys.argv[1]
        else:
            image_path = configs.package_path + '/images/validation/21.png'

        # Turning into base64 for testing
        with open(image_path, "rb") as img_file:
            encoded_string = base64.b64encode(img_file.read()).decode('utf-8')

        data_url = f"data:image/png;base64,{encoded_string}"

        header, encoded = data_url.split("base64,", 1)

        try:
            hme_recognizer.load_image(encoded, data_type='base64')
            expression, img = hme_recognizer.recognize()

        except (GrammarError, SintaticError, LexicalError) as e:

            if 'latex_string_original' in e.data:
                expression = e.data['latex_string_original']

            print('[example.py] Exception: ', e.data)
            print('[example.py] Exception: ', e.valor)

        print("\nExpression: ", expression)


Example()

Running:
python3 teste.py validation/teste2.png

@32-git
Copy link
Author

32-git commented Sep 27, 2024

Hi thanks a lot for your patience. Relieved to hear that it works.

I tried your code out, but I changed one thing about it. In my project, I receive a base64 string directly from my app which i then send to the python script. Therefore, I skipped the part where you convert the image to b64 and just went straight to the "header, encoded" part.

But I still somehow received an error:

"2024-09-27 15:30:59.928093: I tensorflow/core/util/port.cc:153] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`.
2024-09-27 15:31:01.464427: I tensorflow/core/util/port.cc:153] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`.

...

UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead.
  super().__init__(activity_regularizer=activity_regularizer, **kwargs)
Traceback (most recent call last):

[bunch of references to files]

    raise ValueError(
ValueError: Kernel shape must have the same length as input, but received kernel of shape (3, 3, 1, 32) and input of shape (None, None, 28, 28, 1).
"

I shortened the error to what I thought were the most important bits. Is there any chance you get what's going on here?

@carolreis
Copy link
Owner

@32-git I know it's a bit long, put can you give me the output/value of the encoded image?

@carolreis
Copy link
Owner

About tensorflow... I don't know why you're having this issue. But here they comment about it: https://stackoverflow.com/questions/77921357/warning-while-using-tensorflow-tensorflow-core-util-port-cc113-onednn-custom

@32-git
Copy link
Author

32-git commented Sep 27, 2024

@32-git I know it's a bit long, put can you give me the output/value of the encoded image?

@carolreis
Sure. Here's the data URL with the header (before it's split):

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABBkAAAJYCAYAAAAnqz4BAAAAAXNSR0IArs4c6QAAIABJREFUeF7t3U9spddZP/BjqEAs2MAEJm3V2EhI6YakqkqJNFHsBeCoi0wXEUKaYFszUpEQkC5Qy8q2YBFWbdVKgDQj202lSrDozKYe/kh2NCOlFAkm3VB140QCMtBU7YpF1eLf77lwzTseX/te+7x/z+eVqklm7j3veT7PUTrznfOed+7w8PAwuQgQIECAAAECBAgQIECAAAECFxSYEzJcUNDXCRAgQIAAAQIECBAgQIAAgZGAkMFCIECAAAECBAgQIECAAAECBLIICBmyMBqEAAECBAgQIECAAAECBAgQEDJYAwQIECBAgAABAgQIECBAgEAWASFDFkaDECBAgAABAgQIECBAgAABAkIGa4AAAQIECBAgQIAAAQIECBDIIiBkyMJoEAIECBAgQIAAAQIECBAgQEDIYA0QIECAAAECBAgQIECAAAECWQSEDFkYDUKAAAECBAgQIECAAAECBAgIGawBAgQIECBAgAABAgQIECBAIIuAkCELo0EIECBAgAABAgQIECBAgAABIYM1QIAAAQIECBAgQIAAAQIECGQREDJkYTQIAQIECBAgQIAAAQIECBAgIGSwBggQIECAAAECBAgQIECAAIEsAkKGLIwGIUCAAAECBAgQIECAAAECBIQM1gABAgQIECBAgAABAgQIECCQRUDIkIXRIAQIECBAgAABAgQIECBAgICQwRogQIAAAQIECBAgQIAAAQIEsggIGbIwGoQAAQIECBAgQIAAAQIECBAQMlgDBAgQIECAAAECBAgQIECAQBYBIUMWRoMQIECAAAECBAgQIECAAAECQgZrgAABAgQIECBAgAABAgQIEMgiIGTIwmgQAgQIECBAgAABAgQIECBAQMhgDRAgQIAAAQIECBAgQIAAAQJZBIQMWRgNQoAAAQIECBAgQIAAAQIECAgZrAECBAgQIECAAAECBAgQIEAgi4CQIQujQQgQIECAAAECBAgQIECAAAEhgzVAgAABAgQIECBAgAABAgQIZBEQMmRhNAgBAgQIECBAgAABAgQIECAgZLAGCBAgQIAAAQIECBAgQIAAgSwCQoYsjAYhQIAAAQIECBAgQIAAAQIEhAzWAAECBAgQIECAAAECBAgQIJBFQMiQhdEgBAgQIECAAAECBAgQIECAgJDBGiBAgAABAgQIECBAgAABAgSyCAgZsjAahAABAgQIECBAgAABAgQIEBAyWAMECBAgQIAAAQIECBAgQIBAFgEhQxZGgxAgQIAAAQIECBAgQIAAAQJCBmuAAAECBAgQIECAAAECBAgQyCIgZMjCaBACBAgQIECAAAECBAgQIEBAyGANECBAgAABAgQIECBAgAABAlkEhAxZGA1CgAABAgQIECBAgAABAgQICBmsAQIECBAgQIAAAQIECBAgQCCLgJAhC6NBCBAgQIAAAQIECBAgQIAAASGDNUCAAAECBAgQIECAAAECBAhkERAyZGE0CAECBAgQIECAAAECBAgQICBksAYIECBAgAABAgQIECBAgACBLAJChiyMBiFAgAABAgQIECBAgAABAgSEDNYAAQIECBAgQIAAAQIECBAgkEVAyJCF0SAECBAgQIAAAQIECBAgQICAkMEaIECAAAECBAgQIECAAAECBLIICBmyMBqEAAECBAgQIECAAAECBAgQEDJYAwQIECBAgAABAgQIECBAgEAWASFDFkaDECBAgAABAgQIECBAgAABAkIGa4AAAQIECBAgQIAAAQIECBDIIiBkyMJoEAIECBAgQIAAAQIECBAgQEDIYA0QIECAAAECBAgQIECAAAECWQSEDFkYDUKAAAECBAgQIECAAAECBAgIGawBAgQIECBAgAABAgQIECBAIIuAkCELo0EIECBAgAABAgQIECBAgAABIYM1QIAAAQIECBAgQIAAAQIECGQREDJkYTQIAQIECBAgQIAAAQIECBAgIGSwBggQIECAAAECBAgQIECAAIEsAkKGLIwGIUCAAAECBAgQIECAAAECBIQM1gABAgQIECBAgAABAgQIECCQRUDIkIXRIAQIECBAgAABAgQIECBAgICQwRogQIAAAQIECBAgQIAAAQIEsggIGbIwGoQAAQIECBAgQIAAAQIECBAQMlgDBAgQIECAAAECBAgQIECAQBYBIUMWRoMQIECAAAECBAgQIECAAAECQgZrgAABAgQIECBAgAABAgQIEMgiIGTIwmgQAgQIECBAgAABAgQIECBAQMhgDRAgQIAAAQIECBAgQIAAAQJZBIQMWRgNQoAAAQIECBAgQIAAAQIECAgZrAECBAgQIECAAAECBAgQIEAgi4CQIQujQQgQIECAAAECBAgQIECAAAEhgzVAgAABAgQIECBAgAABAgQIZBEQMmRhNAgBAgQIECBAgAABAgQIECAgZLAGCBAgQIAAAQIECBAgQIAAgSwCQoYsjAYhQIAAAQIECBAgQIAAAQIEhAzWAAECBAgQIECAAAECBAgQIJBFQMiQhdEgBAgQIECAAAECBAgQIECAgJDBGiBAgAABAgQIECBAgAABAgSyCAgZsjAahAABAgQIECBAgAABAgQIEBAyWAMECBAgQIAAAQIECBAgQIBAFgEhQxZGgxAgQIAAAQIECBAgQIAAAQJCBmuAAAECBAgQIECAAAECBAgQyCIgZMjCaBACBAgQIECAAAECBAgQIEBAyGANECBAgAABAgQIECBAgAABAlkEhAxZGA1CgAABAgQIECBAgAABAgQICBmsAQIECBAgQIAAAQIECBAgQCCLgJAhC6NBCBAgQIAAAQIECBAgQIAAASGDNUCAAAECBAgQIECAAAECBAhkERAyZGE0CAECBAgQIECAAAECBAgQICBksAYIECBAgAABAgQIECBAgACBLAJChiyMBiFAgAABAgQIECBAgAABAgSEDNYAAQIECBAgQIAAAQIECBAgkEVAyJCF0SAECBAgQIAAAQIECBAgQICAkMEaIECAAAECBAhkEHj77bcnjjLp1876+X/8x39MP/VTP5WeffbZx8a+dOlS+r3f+70MMzcEAQIECBDIJyBkyGdpJAIECBAgQOAcAnX84fykabzzzjuP/fSs9z7t8+co/cJf+dKXviRouLCiAQgQIEAgp4CQIaemsQgQIECgNoHxH+6qP/71X//1xL/lrW0ixwb+5je/OfqZX/3VX816y7rGPWuSP/jBD9J3vvOd9LGPfezoo0P8w/lZDn35dSFDXzplngQIEChHQMhQTq9VSoAAgU4JVMOC+Ofxv4//QDv+ua79zXGnEE2mUwLz8/MT5zPp1yb9/FNPPTUay+MSnWqxyRAgQIDAFAJChimQfIQAAQIETheYFBjEtyI0OP7rPAlUBer4w/lJwifdZ9Z7n/Z5XSVAgAABAgRSEjJYBQQIEKhB4KMf/Wh6991308/93M+NRo+/lTy+nf6s7fBn/fos077oWBES/Od//mf6hV/4hdYCg/Ef7qo/xpwmHYo3i89FPntR20n3rmvcs2p98OBB+uEPf/jI4xL+cH6Wml8nQIAAAQIE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gZwCQoacmsYiQIAAAQIECBAgQIAAAQIFCwgZCm6+0gkQIECAAAECBAgQIECAQE4BIUNOTWMRIECAAAECBAgQIECAAIGCBYQMBTdf6QQIECBAgAABAgQIECBAIKeAkCGnprEIECBAgAABAgQIECBAgEDBAkKGgpuvdAIECBAgQIAAAQIECBAgkFNAyJBT01gECBAgQIAAAQIECBAgQKBgASFDwc1XOgECBAgQIECAAAECBAgQyCkgZMipaSwCBAgQIECAAAECBAgQIFCwgJCh4OYrnQABAgQIECBAgAABAgQI5BQQMuTUNBYBAgQIECBAgAABAgQIEChYQMhQcPOVToAAAQIECBAgQIAAAQIEcgoIGXJqGosAAQIECBAgQIAAAQIECBQsIGQouPlKJ0CAAAECBAgQIECAAAECOQWEDDk1jUWAAAECBAgQIECAAAECBAoWEDIU3HylEyBAgAABAgQIECBAgACBnAJChpyaxiJAgAABAgQIECBAgAABAgULCBkKbr7SCRAgQIAAAQIECBAgQIBATgEhQ05NYxEgQIAAAQIECBAgQIAAgYIFhAwFN1/pBAgQIECAAAECBAgQIEAgp4CQIaemsQgQIECAAAECBAgQIECAQMECQoaCm690AgQIECBAgAABAgQIECCQU0DIkFPTWAQIECBAgAABAgQIECBAoGABIUPBzVc6AQIECBAgQIAAAQIECBDIKSBkyKlpLAIECBAgQIAAAQIECBAgULCAkKHg5iudAAECBAgQIECAAAECBAjkFBAy5NQ0FgECBAgQIECAAAECBAgQKFhAyFBw85VOgAABAgQIECBAgAABAgRyCggZcmoaiwABAgQIECBAgAABAgQIFCwgZCi4+UonQIAAAQIECBAgQIAAAQI5BYQMOTWNRYAAAQIECBAgQIAAAQIEChYQMhTcfKUTIECAAAECBAgQIECAAIGcAkKGnJrGIkCAAAECBAgQIECAAAECBQsIGQpuvtIJECBAgAABAgQIECBAgEBOASFDTk1jESBAgAABAgQIECBAgACBggWEDAU3X+kECBAgQIAAAQIECBAgQCCngJAhp6axCBAgQIAAAQIECBAgQIBAwQJChoKbr3QCBAgQIECAAAECBAgQIJBTQMiQU9NYBAgQIECAAAECBAgQIECgYAEhQ8HNVzoBAgQIECBAgAABAgQIEMgpIGTIqWksAgQIECBAgAABAgQIECBQsICQoeDmK50AAQIECBAgQIAAAQIECOQUEDLk1DQWAQIECBAgQIAAAQIECBAoWEDIUHDzlU6AAAECBAgQIECAAAECBHIKCBlyahqLAAECBAgQIECAAAECBAgULCBkKLj5SidAgAABAgQIECBAgAABAjkFhAw5NY1FgAABAgQIECBAgAABAgQKFhAyFNx8pRMgQIAAAQIECBAgQIAAgZwCQoacmsYiQIAAAQIECBAgQIAAAQIFCwgZCm6+0gkQIECAAAECBAgQIECAQE4BIUNOTWMRIECAAAECBAgQIECAAIGCBYQMBTdf6QQIECBAgAABAgQIECBAIKeAkCGnprEIECBAgAABAgQIECBAgEDBAkKGgpuvdAIECBAgQIAAAQIECBAgkFNAyJBT01gECBAgQIAAAQIECBAgQKBgASFDwc1XOgECBAgQIECAAAECBAgQyCkgZMipaSwCBAgQIECAAAECBAgQIFCwgJCh4OYrnQABAgQIECBAgAABAgQI5BQQMuTUNBYBAgQIECBAgAABAgQIEChYQMhQcPOVToAAAQIECBAgQIAAAQIEcgoIGXJqGosAAQIECBAgQIAAAQIECBQsIGQouPlKJ0CAAAECBAgQIECAAAECOQWEDDk1jUWAAAECBAgQIECAAAECBAoWEDIU3HylEyBAgAABAgQIECBAgACBnAJChpyaxiJAgAABAgQIECBAgAABAgULCBkKbr7SCRAgQIAAAQIECBAgQIBATgEhQ05NYxEgQIAAAQIECBAgQIAAgYIFhAwFN1/pBAgQIECAAAECBAgQIEAgp4CQIaemsQgQIECAAAECBAgQIECAQMECQoaCm690AgQIECBAgAABAgQIECCQU0DIkFPTWAQIECBAgAABAgQIECBAoGABIUPBzVc6AQIECBAgQIAAAQIECBDIKSBkyKlpLAIECBAgQIAAAQIECBAgULCAkKHg5iudAAECBAgQIECAAAECBAjkFBAy5NQ0FgECBAgQIECAAAECBAgQKFhAyFBw85VOgAABAgQIECBAgAABAgRyCggZcmoaiwABAgQIECBAgAABAgQIFCwgZCi4+UonQIAAAQIECBAgQIAAAQI5BYQMOTWNRYAAAQIECBAgQIAAAQIEChYQMhTcfKUTIECAAAECBAgQIECAAIGcAkKGnJrGIkCAAAECBAgQIECAAAECBQsIGQpuvtIJECBAgAABAgQIECBAgEBOASFDTk1jESBAgAABAgQIECBAgACBggWEDAU3X+kECBAgQIAAAQIECBAgQCCngJAhp6axCBAgQIAAAQIECBAgQIBAwQJChoKbr3QCBAgQIECAAAECBAgQIJBTQMiQU9NYBAgQIECAAAECBAgQIECgYAEhQ8HNVzoBAgQIECBAgAABAgQIEMgpIGTIqWksAgQIECBAgAABAgQIECBQsICQoeDmK50AAQIECBAgQIAAAQIECOQUEDLk1DQWAQIECBAgQIAAAQIECBAoWEDIUHDzlU6AAAECBAgQIECAAAECBHIKCBlyahqLAAECBAgQIECAAAECBAgULCBkKLj5SidAgAABAgQIECBAgAABAjkFhAw5NY1FgAABAgQIECBAgAABAgQKFhAyFNx8pRMgQIAAAQIECBAgQIAAgZwCQoacmsYiQIAAAQIECBAgQIAAAQIFCwgZCm6+0gkQIECAAAECBAgQIECAQE4BIUNOTWMRIECAAAECBAgQIECAAIGCBYQMBTdf6QQIECBAgAABAgQIECBAIKeAkCGnprEIECBAgAABAgQIECBAgEDBAkKGgpuvdAIECBAgQIAAAQIECBAgkFNAyJBT01gECBAgQIAAAQIECBAgQKBgASFDwc1XOgECBAgQIECAAAECBAgQyCkgZMipaSwCBAgQIECAAAECBAgQIFCwgJCh4OYrnQABAgQIECBAgAABAgQI5BQQMuTUNBYBAgQIECBAgAABAgQIEChYQMhQcPOVToAAAQIECBAgQIAAAQIEcgoIGXJqGosAAQIECBAgQIAAAQIECBQsIGQouPlKJ0CAAAECBAgQIECAAAECOQWEDDk1jUWAAAECBAgQIECAAAECBAoWEDIU3HylEyBAgAABAgQIECBAgACBnAJChpyaxiJAgAABAgQIECBAgAABAgULCBkKbr7SCRAgQIAAAQIECBAgQIBATgEhQ05NYxEgQIAAAQIECBAgQIAAgYIFhAwFN1/pBAgQIECAAAECBAgQIEAgp4CQIaemsQgQIECAAAECBAgQIECAQMECQoaCm690AgQIECBAgAABAgQIECCQU0DIkFPTWAQIECBAgAABAgQIECBAoGABIUPBzVc6AQIECBAgQIAAAQIECBDIKSBkyKlpLAIECBAgQIAAAQIECBAgULCAkKHg5iudAAECBAgQIECAAAECBAjkFBAy5NQ0FgECBAgQIECAAAECBAgQKFhAyFBw85VOgAABAgQIECBAgAABAgRyCggZcmoaiwABAgQIECBAgAABAgQIFCwgZCi4+UonQIAAAQIECBAgQIAAAQI5BYQMOTWNRYAAAQIECBAgQIAAAQIEChYQMhTcfKUTIECAAAECBAgQIECAAIGcAkKGnJrGIkCAAAECBAgQIECAAAECBQsIGQpuvtIJECBAgAABAgQIECBAgEBOASFDTk1jESBAgAABAgQIECBAgACBggWEDAU3X+kECBAgQIAAAQIECBAgQCCngJAhp6axCBAgQIAAAQIECBAgQIBAwQJChoKbr3QCBAgQIECAAAECBAgQIJBTQMiQU9NYBAgQIECAAAECBAgQIECgYAEhQ8HNVzoBAgQIECBAgAABAgQIEMgpIGTIqWksAgQIECBAgAABAgQIECBQsICQoeDmK50AAQIECBAgQIAAAQIECOQUEDLk1DQWAQIECBAgQIAAAQIECBAoWOD/ATkYgHA8bb8+AAAAAElFTkSuQmCC

@32-git
Copy link
Author

32-git commented Sep 27, 2024

Maybe this error output can help too?

<class 'numpy.ndarray'>
[recognize.py] to_recognize |             Showing the image of the expression...

[recognize.py] to_recognize |             Starting image preprocessing...

[preprocessing.py] treatment()
[preprocessing.py] resize_full_image()
[preprocessing.py] normalize()
[preprocessing.py] to_gray_denoise()
[preprocessing.py] invert()
[preprocessing.py] segment()
[preprocessing.py] segment() | contours founded:
1
[preprocessing.py] resize()
[preprocessing.py] segment() |             before line and sqrt processing
[preprocessing.py] segment() |             after line and sqrt processing
[preprocessing.py] segment() |             before resize
[preprocessing.py] segment() | after resize
[preprocessing.py] segment() | before border
[preprocessing.py] segment() | after border
[preprocessing.py] binarization()
[preprocessing.py] invert()
[preprocessing.py] invert()
[preprocessing.py] _255_to_1()
[recognize.py] to_recognize |             Showing preprocessed image

[recognize.py] to_recognize |             Image preprocessing finished.

[recognize.py] to_recognize |             Starting symbol classification...

... segmentation ...
... recognize ...
[recognize.py] to_recognize | Exception:
[api.py] recognize | Exception: Kernel shape must have the same length as input, but received kernel of shape (3, 3, 1, 32) and input of shape (None, None, 28, 28, 1).

@carolreis
Copy link
Owner

Oh, God. It reminds me I need to improve these logs urgently...

I'll make a test with your base64 and let you know what I found

@32-git
Copy link
Author

32-git commented Oct 7, 2024

Hi @carolreis

Were you able to make any progress with the base 64 string?

@mustafa-senyuz
Copy link

SAME PROBLEM WITH ME :((

PS I:\ML\MATH\mathoku> & "C:/Program Files/Python311/python.exe" i:/ML/MATH/mathoku/mathreader/test.py
2024-10-15 22:52:10.507499: I tensorflow/core/util/port.cc:153] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable TF_ENABLE_ONEDNN_OPTS=0.
2024-10-15 22:52:11.503528: I tensorflow/core/util/port.cc:153] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable TF_ENABLE_ONEDNN_OPTS=0.

['i:/ML/MATH/mathoku/mathreader/test.py']
[recognize.py] to_recognize | Showing the image of the expression...

[recognize.py] to_recognize | Starting image preprocessing...

[preprocessing.py] treatment()
[preprocessing.py] resize_full_image()
[preprocessing.py] normalize()
[preprocessing.py] to_gray_denoise()
[preprocessing.py] invert()
[preprocessing.py] segment()
[preprocessing.py] segment() | contours founded:
4
[preprocessing.py] resize()
[preprocessing.py] segment() | before line and sqrt processing
hor 4
[preprocessing.py] segment() | after line and sqrt processing
[preprocessing.py] segment() | before resize
[preprocessing.py] segment() | after resize
[preprocessing.py] segment() | before border
[preprocessing.py] segment() | after border
[preprocessing.py] binarization()
[preprocessing.py] invert()
[preprocessing.py] invert()
[preprocessing.py] _255_to_1()
[preprocessing.py] resize()
[preprocessing.py] segment() | before line and sqrt processing
hor 3
[preprocessing.py] segment() | after line and sqrt processing
[preprocessing.py] segment() | before resize
[preprocessing.py] segment() | after resize
[preprocessing.py] segment() | before border
[preprocessing.py] segment() | after border
[preprocessing.py] binarization()
[preprocessing.py] invert()
[preprocessing.py] invert()
[preprocessing.py] _255_to_1()
[preprocessing.py] resize()
[preprocessing.py] segment() | before line and sqrt processing
[preprocessing.py] segment() | after line and sqrt processing
[preprocessing.py] segment() | before resize
[preprocessing.py] segment() | after resize
[preprocessing.py] segment() | before border
[preprocessing.py] segment() | after border
[preprocessing.py] binarization()
[preprocessing.py] invert()
[preprocessing.py] invert()
[preprocessing.py] _255_to_1()
[preprocessing.py] resize()
[preprocessing.py] segment() | before line and sqrt processing
[preprocessing.py] segment() | after line and sqrt processing
[preprocessing.py] segment() | before resize
[preprocessing.py] segment() | after resize
[preprocessing.py] segment() | before border
[preprocessing.py] segment() | after border
[preprocessing.py] binarization()
[preprocessing.py] invert()
[preprocessing.py] invert()
[preprocessing.py] _255_to_1()
[recognize.py] to_recognize | Showing preprocessed image

[recognize.py] to_recognize | Image preprocessing finished.

[recognize.py] to_recognize | Starting symbol classification...

... segmentation ...
... recognize ...
C:\Users\Mustafa\AppData\Roaming\Python\Python311\site-packages\keras\src\layers\convolutional\base_conv.py:107: UserWarning: Do not pass an input_shape/input_dim argument to a layer. When using Sequential models, prefer using an Input(shape) object as the first layer in the model instead.
super().init(activity_regularizer=activity_regularizer, **kwargs)
[recognize.py] to_recognize | Exception:
[api.py] recognize | Exception: Kernel shape must have the same length as input, but received kernel of shape (3, 3, 1, 32) and input of shape (None, None, 28, 28, 1).
Traceback (most recent call last):
File "i:\ML\MATH\mathoku\mathreader\test.py", line 50, in
Example()
File "i:\ML\MATH\mathoku\mathreader\test.py", line 37, in init
expression, img = hme_recognizer.recognize()
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "I:\ML/MATH/mathoku\mathreader\api.py", line 109, in recognize
raise e
File "I:\ML/MATH/mathoku\mathreader\api.py", line 91, in recognize
expression, image = hme.to_recognize()
^^^^^^^^^^^^^^^^^^
File "I:\ML/MATH/mathoku\mathreader\recognize.py", line 85, in to_recognize
raise e
File "I:\ML/MATH/mathoku\mathreader\recognize.py", line 64, in to_recognize
reconhecer = self.__recognize(s['image'])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "I:\ML/MATH/mathoku\mathreader\recognize.py", line 35, in __recognize
return classification.fit(img)
^^^^^^^^^^^^^^^^^^^^^^^
File "I:\ML/MATH/mathoku\mathreader\classification\classification.py", line 35, in fit
raise e
File "I:\ML/MATH/mathoku\mathreader\classification\classification.py", line 21, in fit
model = load_model(config.package_path + '/ann_models/model/model_11-07-2020_23-54-57.h5')
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Mustafa\AppData\Roaming\Python\Python311\site-packages\keras\src\saving\saving_api.py", line 196, in load_model
return legacy_h5_format.load_model_from_hdf5(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Mustafa\AppData\Roaming\Python\Python311\site-packages\keras\src\legacy\saving\legacy_h5_format.py", line 133, in load_model_from_hdf5
model = saving_utils.model_from_config(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Mustafa\AppData\Roaming\Python\Python311\site-packages\keras\src\legacy\saving\saving_utils.py", line 85, in model_from_config
return serialization.deserialize_keras_object(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Mustafa\AppData\Roaming\Python\Python311\site-packages\keras\src\legacy\saving\serialization.py", line 495, in deserialize_keras_object
deserialized_obj = cls.from_config(
^^^^^^^^^^^^^^^^
File "C:\Users\Mustafa\AppData\Roaming\Python\Python311\site-packages\keras\src\models\sequential.py", line 359, in from_config
model.add(layer)
File "C:\Users\Mustafa\AppData\Roaming\Python\Python311\site-packages\keras\src\models\sequential.py", line 122, in add
self._maybe_rebuild()
File "C:\Users\Mustafa\AppData\Roaming\Python\Python311\site-packages\keras\src\models\sequential.py", line 141, in _maybe_rebuild
self.build(input_shape)
File "C:\Users\Mustafa\AppData\Roaming\Python\Python311\site-packages\keras\src\layers\layer.py", line 226, in build_wrapper
original_build_method(*args, **kwargs)
File "C:\Users\Mustafa\AppData\Roaming\Python\Python311\site-packages\keras\src\models\sequential.py", line 187, in build
x = layer(x)
^^^^^^^^
File "C:\Users\Mustafa\AppData\Roaming\Python\Python311\site-packages\keras\src\utils\traceback_utils.py", line 122, in error_handler
raise e.with_traceback(filtered_tb) from None
File "C:\Users\Mustafa\AppData\Roaming\Python\Python311\site-packages\keras\src\ops\operation_utils.py", line 184, in compute_conv_output_shape
raise ValueError(
ValueError: Kernel shape must have the same length as input, but received kernel of shape (3, 3, 1, 32) and input of shape (None, None, 28, 28, 1).

@carolreis
Copy link
Owner

Hi, guys! Sorry I didn't have time to take a look at this.

I'll make an effort to look at it this week!

I'll have to debug it more deeply because using the same images you gave me, it is working here...

@mustafa-senyuz
Copy link

Hello again, Carol. I hope you're doing well. Would it be possible for you to re-share the final working version of the project along with the relevant data files? Thank you very much!

@carolreis
Copy link
Owner

Hello.
Today, after work, I'll run the code with your file.
But, since it is running ok here, I don't know, maybe something during your install went wrong. Let's see.

Could you share with me you repo?

If you don't want to share here, send me an email: [email protected]

@carolreis
Copy link
Owner

@mustafa-senyuz Hi. I'm deeply sorry for not seeing it before. I am going to the at look at this right now. Would mind sending me your repo so I can test here? Don't worry about your project, I care a lot about ethics and I wouldn't use it for any purpose besides helping you. It will help us to see if the problem is with your code or maybe something related about how you install your libraries and so on.

@carolreis
Copy link
Owner

Testing the last base64 here:

image

image

Did you notice this warning?

PS I:\ML\MATH\mathoku> & "C:/Program Files/Python311/python.exe" i:/ML/MATH/mathoku/mathreader/test.py
2024-10-15 22:52:10.507499: I tensorflow/core/util/port.cc:153] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable TF_ENABLE_ONEDNN_OPTS=0.
2024-10-15 22:52:11.503528: I tensorflow/core/util/port.cc:153] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable TF_ENABLE_ONEDNN_OPTS=0.

I don't have it here. Maybe set this env variable to see if it works

@carolreis
Copy link
Owner

I used the example.py file and modify to use the base64 string (a really hard-coded test):

from mathreader.api import *
from mathreader.config import Configuration
from mathreader.helpers.exceptions import *
import base64
import numpy as np
import cv2
import sys

configs = Configuration()


class Example:

    def __init__(self):

        expression = ""
        hme_recognizer = HME_Recognizer()
        print(sys.argv)

        # if sys.argv and len(sys.argv) > 1:
        #     images = [configs.package_path + '/images/' + sys.argv[1]]
        # else:
        #     images = [configs.package_path + '/images/validation/21.png']

        images = ["iVBORw0KGgoAAAANSUhEUgAABBkAAAJYCAYAAAAnqz4BAAAAAXNSR0IArs4c6QAAIABJREFUeF7t3U9spddZP/BjqEAs2MAEJm3V2EhI6YakqkqJNFHsBeCoi0wXEUKaYFszUpEQkC5Qy8q2YBFWbdVKgDQj202lSrDozKYe/kh2NCOlFAkm3VB140QCMtBU7YpF1eLf77lwzTseX/te+7x/z+eVqklm7j3veT7PUTrznfOed+7w8PAwuQgQIECAAAECBAgQIECAAAECFxSYEzJcUNDXCRAgQIAAAQIECBAgQIAAgZGAkMFCIECAAAECBAgQIECAAAECBLIICBmyMBqEAAECBAgQIECAAAECBAgQEDJYAwQIECBAgAABAgQIECBAgEAWASFDFkaDECBAgAABAgQIECBAgAABAkIGa4AAAQIECBAgQIAAAQIECBDIIiBkyMJoEAIECBAgQIAAAQIECBAgQEDIYA0QIECAAAECBAgQIECAAAECWQSEDFkYDUKAAAECBAgQIECAAAECBAgIGawBAgQIECBAgAABAgQIECBAIIuAkCELo0EIECBAgAABAgQIECBAgAABIYM1QIAAAQIECBAgQIAAAQIECGQREDJkYTQIAQIECBAgQIAAAQIECBAgIGSwBggQIECAAAECBAgQIECAAIEsAkKGLIwGIUCAAAECBAgQIECAAAECBIQM1gABAgQIECBAgAABAgQIECCQRUDIkIXRIAQIECBAgAABAgQIECBAgICQwRogQIAAAQIECBAgQIAAAQIEsggIGbIwGoQAAQIECBAgQIAAAQIECBAQMlgDBAgQIECAAAECBAgQIECAQBYBIUMWRoMQIECAAAECBAgQIECAAAECQgZrgAABAgQIECBAgAABAgQIEMgiIGTIwmgQAgQIECBAgAABAgQIECBAQMhgDRAgQIAAAQIECBAgQIAAAQJZBIQMWRgNQoAAAQIECBAgQIAAAQIECAgZrAECBAgQIECAAAECBAgQIEAgi4CQIQujQQgQIECAAAECBAgQIECAAAEhgzVAgAABAgQIECBAgAABAgQIZBEQMmRhNAgBAgQIECBAgAABAgQIECAgZLAGCBAgQIAAAQIECBAgQIAAgSwCQoYsjAYhQIAAAQIECBAgQIAAAQIEhAzWAAECBAgQIECAAAECBAgQIJBFQMiQhdEgBAgQIECAAAECBAgQIECAgJDBGiBAgAABAgQIECBAgAABAgSyCAgZsjAahAABAgQIECBAgAABAgQIEBAyWAMECBAgQIAAAQIECBAgQIBAFgEhQxZGgxAgQIAAAQIECBAgQIAAAQJCBmuAAAECBAgQIECAAAECBAgQyCIgZMjCaBACBAgQIECAAAECBAgQIEBAyGANECBAgAABAgQIECBAgAABAlkEhAxZGA1CgAABAgQIECBAgAABAgQICBmsAQIECBAgQIAAAQIECBAgQCCLgJAhC6NBCBAgQIAAAQIECBAgQIAAASGDNUCAAAECBAgQIECAAAECBAhkERAyZGE0CAECBAgQIECAAAECBAgQICBksAYIECBAgAABAgQIECBAgACBLAJChiyMBiFAgAABAgQIECBAgAABAgSEDNYAAQIECBAgQIAAAQIECBAgkEVAyJCF0SAECBAgQIAAAQIECBAgQICAkMEaIECAAAECBAgQIECAAAECBLIICBmyMBqEAAECBAgQIECAAAECBAgQEDJYAwQIECBAgAABAgQIECBAgEAWASFDFkaDECBAgAABAgQIECBAgAABAkIGa4AAAQIECBAgQIAAAQIECBDIIiBkyMJoEAIECBAgQIAAAQIECBAgQEDIYA0QIECAAAECBAgQIECAAAECWQSEDFkYDUKAAAECBAgQIECAAAECBAgIGawBAgQIECBAgAABAgQIECBAIIuAkCELo0EIECBAgAABAgQIECBAgAABIYM1QIAAAQIECBAgQIAAAQIECGQREDJkYTQIAQIECBAgQIAAAQIECBAgIGSwBggQIECAAAECBAgQIECAAIEsAkKGLIwGIUCAAAECBAgQIECAAAECBIQM1gABAgQIECBAgAABAgQIECCQRUDIkIXRIAQIECBAgAABAgQIECBAgICQwRogQIAAAQIECBAgQIAAAQIEsggIGbIwGoQAAQIECBAgQIAAAQIECBAQMlgDBAgQIECAAAECBAgQIECAQBYBIUMWRoMQIECAAAECBAgQIECAAAECQgZrgAABAgQIECBAgAABAgQIEMgiIGTIwmgQAgQIECBAgAABAgQIECBAQMhgDRAgQIAAAQIECBAgQIAAAQJZBIQMWRgNQoAAAQIECBAgQIAAAQIECAgZrAECBAgQIECAAAECBAgQIEAgi4CQIQujQQgQIECAAAECBAgQIECAAAEhgzVAgAABAgQIECBAgAABAgQIZBEQMmRhNAgBAgQIECBAgAABAgQIECAgZLAGCBAgQIAAAQIECBAgQIAAgSwCQoYsjAYhQIAAAQIECBAgQIAAAQIEhAzWAAECBAgQIECAAAECBAgQIJBFQMiQhdEgBAgQIECAAAECBAgQIECAgJDBGiBAgAABAgQIECBAgAABAgSyCAgZsjAahAABAgQIECBAgAABAgQIEBAyWAMECBAgQIAAAQIECBAgQIBAFgEhQxZGgxAgQIAAAQIECBAgQIAAAQJCBmuAAAECBAgQIECAAAECBAgQyCIgZMjCaBACBAgQIECAAAECBAgQIEBAyGANECBAgAABAgQIECBAgAABAlkEhAxZGA1CgAABAgQIECBAgAABAgQICBmsAQIECBAgQIAAAQIECBAgQCCLgJAhC6NBCBAgQIAAAQIECBAgQIAAASGDNUCAAAECBAgQIECAAAECBAhkERAyZGE0CAECBAgQIECAAAECBAgQICBksAYIECBAgAABAgQIECBAgACBLAJChiyMBiFAgAABAgQIECBAgAABAgSEDNYAAQIECBAgQIAAAQIECBAgkEVAyJCF0SAECBAgQIAAAQIECBAgQICAkMEaIECAAAECBAhkEHj77bcnjjLp1876+X/8x39MP/VTP5WeffbZx8a+dOlS+r3f+70MMzcEAQIECBDIJyBkyGdpJAIECBAgQOAcAnX84fykabzzzjuP/fSs9z7t8+co/cJf+dKXviRouLCiAQgQIEAgp4CQIaemsQgQIECgNoHxH+6qP/71X//1xL/lrW0ixwb+5je/OfqZX/3VX816y7rGPWuSP/jBD9J3vvOd9LGPfezoo0P8w/lZDn35dSFDXzplngQIEChHQMhQTq9VSoAAgU4JVMOC+Ofxv4//QDv+ua79zXGnEE2mUwLz8/MT5zPp1yb9/FNPPTUay+MSnWqxyRAgQIDAFAJChimQfIQAAQIETheYFBjEtyI0OP7rPAlUBer4w/lJwifdZ9Z7n/Z5XSVAgAABAgRSEjJYBQQIEKhB4KMf/Wh6991308/93M+NRo+/lTy+nf6s7fBn/fos077oWBES/Od//mf6hV/4hdYCg/Ef7qo/xpwmHYo3i89FPntR20n3rmvcs2p98OBB+uEPf/jI4xL+cH6Wml8nQIAAAQIE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gZwCQoacmsYiQIAAAQIECBAgQIAAAQIFCwgZCm6+0gkQIECAAAECBAgQIECAQE4BIUNOTWMRIECAAAECBAgQIECAAIGCBYQMBTdf6QQIECBAgAABAgQIECBAIKeAkCGnprEIECBAgAABAgQIECBAgEDBAkKGgpuvdAIECBAgQIAAAQIECBAgkFNAyJBT01gECBAgQIAAAQIECBAgQKBgASFDwc1XOgECBAgQIECAAAECBAgQyCkgZMipaSwCBAgQIECAAAECBAgQIFCwgJCh4OYrnQABAgQIECBAgAABAgQI5BQQMuTUNBYBAgQIECBAgAABAgQIEChYQMhQcPOVToAAAQIECBAgQIAAAQIEcgoIGXJqGosAAQIECBAgQIAAAQIECBQsIGQouPlKJ0CAAAECBAgQIECAAAECOQWEDDk1jUWAAAECBAgQIECAAAECBAoWEDIU3HylEyBAgAABAgQIECBAgACBnAJChpyaxiJAgAABAgQIECBAgAABAgULCBkKbr7SCRAgQIAAAQIECBAgQIBATgEhQ05NYxEgQIAAAQIECBAgQIAAgYIFhAwFN1/pBAgQIECAAAECBAgQIEAgp4CQIaemsQgQIECAAAECBAgQIECAQMECQoaCm690AgQIECBAgAABAgQIECCQU0DIkFPTWAQIECBAgAABAgQIECBAoGABIUPBzVc6AQIECBAgQIAAAQIECBDIKSBkyKlpLAIECBAgQIAAAQIECBAgULCAkKHg5iudAAECBAgQIECAAAECBAjkFBAy5NQ0FgECBAgQIECAAAECBAgQKFhAyFBw85VOgAABAgQIECBAgAABAgRyCggZcmoaiwABAgQIECBAgAABAgQIFCwgZCi4+UonQIAAAQIECBAgQIAAAQI5BYQMOTWNRYAAAQIECBAgQIAAAQIEChYQMhTcfKUTIECAAAECBAgQIECAAIGcAkKGnJrGIkCAAAECBAgQIECAAAECBQsIGQpuvtIJECBAgAABAgQIECBAgEBOASFDTk1jESBAgAABAgQIECBAgACBggWEDAU3X+kECBAgQIAAAQIECBAgQCCngJAhp6axCBAgQIAAAQIECBAgQIBAwQJChoKbr3QCBAgQIECAAAECBAgQIJBTQMiQU9NYBAgQIECAAAECBAgQIECgYAEhQ8HNVzoBAgQIECBAgAABAgQIEMgpIGTIqWksAgQIECBAgAABAgQIECBQsICQoeDmK50AAQIECBAgQIAAAQIECOQUEDLk1DQWAQIECBAgQIAAAQIECBAoWEDIUHDzlU6AAAECBAgQIECAAAECBHIKCBlyahqLAAECBAgQIECAAAECBAgULCBkKLj5SidAgAABAgQIECBAgAABAjkFhAw5NY1FgAABAgQIECBAgAABAgQKFhAyFNx8pRMgQIAAAQIECBAgQIAAgZwCQoacmsYiQIAAAQIECBAgQIAAAQIFCwgZCm6+0gkQIECAAAECBAgQIECAQE4BIUNOTWMRIECAAAECBAgQIECAAIGCBYQMBTdf6QQIECBAgAABAgQIECBAIKeAkCGnprEIECBAgAABAgQIECBAgEDBAkKGgpuvdAIECBAgQIAAAQIECBAgkFNAyJBT01gECBAgQIAAAQIECBAgQKBgASFDwc1XOgECBAgQIECAAAECBAgQyCkgZMipaSwCBAgQIECAAAECBAgQIFCwgJCh4OYrnQABAgQIECBAgAABAgQI5BQQMuTUNBYBAgQIECBAgAABAgQIEChYQMhQcPOVToAAAQIECBAgQIAAAQIEcgoIGXJqGosAAQIECBAgQIAAAQIECBQsIGQouPlKJ0CAAAECBAgQIECAAAECOQWEDDk1jUWAAAECBAgQIECAAAECBAoWEDIU3HylEyBAgAABAgQIECBAgACBnAJChpyaxiJAgAABAgQIECBAgAABAgULCBkKbr7SCRAgQIAAAQIECBAgQIBATgEhQ05NYxEgQIAAAQIECBAgQIAAgYIFhAwFN1/pBAgQIECAAAECBAgQIEAgp4CQIaemsQgQIECAAAECBAgQIECAQMECQoaCm690AgQIECBAgAABAgQIECCQU0DIkFPTWAQIECBAgAABAgQIECBAoGABIUPBzVc6AQIECBAgQIAAAQIECBDIKSBkyKlpLAIECBAgQIAAAQIECBAgULCAkKHg5iudAAECBAgQIECAAAECBAjkFBAy5NQ0FgECBAgQIECAAAECBAgQKFhAyFBw85VOgAABAgQIECBAgAABAgRyCggZcmoaiwABAgQIECBAgAABAgQIFCwgZCi4+UonQIAAAQIECBAgQIAAAQI5BYQMOTWNRYAAAQIECBAgQIAAAQIEChYQMhTcfKUTIECAAAECBAgQIECAAIGcAkKGnJrGIkCAAAECBAgQIECAAAECBQsIGQpuvtIJECBAgAABAgQIECBAgEBOASFDTk1jESBAgAABAgQIECBAgACBggWEDAU3X+kECBAgQIAAAQIECBAgQCCngJAhp6axCBAgQIAAAQIECBAgQIBAwQJChoKbr3QCBAgQIECAAAECBAgQIJBTQMiQU9NYBAgQIECAAAECBAgQIECgYAEhQ8HNVzoBAgQIECBAgAABAgQIEMgpIGTIqWksAgQIECBAgAABAgQIECBQsICQoeDmK50AAQIECBAgQIAAAQIECOQUEDLk1DQWAQIECBAgQIAAAQIECBAoWEDIUHDzlU6AAAECBAgQIECAAAECBHIKCBlyahqLAAECBAgQIECAAAECBAgULCBkKLj5SidAgAABAgQIECBAgAABAjkFhAw5NY1FgAABAgQIECBAgAABAgQKFhAyFNx8pRMgQIAAAQIECBAgQIAAgZwCQoacmsYiQIAAAQIECBAgQIAAAQIFCwgZCm6+0gkQIECAAAECBAgQIECAQE4BIUNOTWMRIECAAAECBAgQIECAAIGCBYQMBTdf6QQIECBAgAABAgQIECBAIKeAkCGnprEIECBAgAABAgQIECBAgEDBAkKGgpuvdAIECBAgQIAAAQIECBAgkFNAyJBT01gECBAgQIAAAQIECBAgQKBgASFDwc1XOgECBAgQIECAAAECBAgQyCkgZMipaSwCBAgQIECAAAECBAgQIFCwgJCh4OYrnQABAgQIECBAgAABAgQI5BQQMuTUNBYBAgQIECBAgAABAgQIEChYQMhQcPOVToAAAQIECBAgQIAAAQIEcgoIGXJqGosAAQIECBAgQIAAAQIECBQsIGQouPlKJ0CAAAECBAgQIECAAAECOQWEDDk1jUWAAAECBAgQIECAAAECBAoWEDIU3HylEyBAgAABAgQIECBAgACBnAJChpyaxiJAgAABAgQIECBAgAABAgULCBkKbr7SCRAgQIAAAQIECBAgQIBATgEhQ05NYxEgQIAAAQIECBAgQIAAgYIFhAwFN1/pBAgQIECAAAECBAgQIEAgp4CQIaemsQgQIECAAAECBAgQIECAQMECQoaCm690AgQIECBAgAABAgQIECCQU0DIkFPTWAQIECBAgAABAgQIECBAoGABIUPBzVc6AQIECBAgQIAAAQIECBDIKSBkyKlpLAIECBAgQIAAAQIECBAgULCAkKHg5iudAAECBAgQIECAAAECBAjkFBAy5NQ0FgECBAgQIECAAAECBAgQKFhAyFBw85VOgAABAgQIECBAgAABAgRyCggZcmoaiwABAgQIECBAgAABAgQIFCwgZCi4+UonQIAAAQIECBAgQIAAAQI5BYQMOTWNRYAAAQIECBAgQIAAAQIEChYQMhTcfKUTIECAAAECBAgQIECAAIGcAkKGnJrGIkCAAAECBAgQIECAAAECBQsIGQpuvtIJECBAgAABAgQIECBAgEBOASFDTk1jESBAgAABAgQIECBAgACBggWEDAU3X+kECBAgQIAAAQIECBAgQCCngJAhp6axCBAgQIAAAQIECBAgQIBAwQJChoKbr3QCBAgQIECAAAECBAgQIJBTQMiQU9NYBAgQIECAAAECBAgQIECgYAEhQ8HNVzoBAgQIECBAgAABAgQIEMgpIGTIqWksAgQIECBAgAABAgQIECBQsICQoeDmK50AAQIECBAgQIAAAQIECOQUEDLk1DQWAQIECBAgQIAAAQIECBAoWOD/ATkYgHA8bb8+AAAAAElFTkSuQmCC"]

        for image in images:

            try:
                hme_recognizer.load_image(image, data_type='base64')
                expression, img = hme_recognizer.recognize()

                lex_errors = hme_recognizer.get_lex_errors()
                yacc_errors = hme_recognizer.get_yacc_errors()
                pure_lex_errors = hme_recognizer.get_lex_pure_errors()
                pure_yacc_errors = hme_recognizer.get_yacc_pure_errors()
                latex_string_original = hme_recognizer.get_latex_string_original()

                print('\n\nLex errors: ', lex_errors)
                print('\n\nYacc errors: ', yacc_errors)
                print('\n\nPure Lex Errors:', pure_lex_errors)
                print('\n\nPure Yacc Errors: ', pure_yacc_errors)
                print('\n\nOriginal Expression: ', latex_string_original)

            except (GrammarError, SintaticError, LexicalError) as e:

                if 'latex_string_original' in e.data:
                    expression = e.data['latex_string_original']

                print('[example.py] Exception: ', e.data)
                print('[example.py] Exception: ', e.valor)

            print("\nExpression: ", expression)


Example()

Important:

Notice that, for a base64 string, I had to put the string in a list:

images = ["YOUR_BASE64_STRING"]

Since in the example, it iterates over the "images" variable.

And I had to change the parameter to data=type=base64 as well
hme_recognizer.load_image(image, data_type='base64')

@carolreis
Copy link
Owner

Let me see yout installed version of these libraries:

pip3 list | grep -e "idx2numpy" -e "imageio" -e "imutils" -e "matplotlib" -e "numpy" -e "tensorflow" -e "opencv-python" -e "h5py" -e "Pillow"

h5py                          2.10.0               
idx2numpy                     1.2.3                
imageio                       2.34.0               
imutils                       0.5.4                
matplotlib                    3.1.2                
numpy                         1.21.0               
opencv-python                 4.9.0.80             
Pillow                        7.0.0                
tensorflow                    2.2.0                
tensorflow-estimator          2.2.0                
tensorflow-io-gcs-filesystem  0.34.0  

@carolreis
Copy link
Owner

@mustafa-senyuz @32-git Hi! Could you try to do the things I mentioned in my previous comments? I really wanna help you

@mustafa-senyuz
Copy link

@mustafa-senyuz @32-git Hi! Could you try to do the things I mentioned in my previous comments? I really wanna help you

First of all, thank you very much for your interest, Caroline. Actually, I haven't developed a new project, I'm just trying to get yours to work. I have made the latest updates and the relevant new library list is as follows. I also ran example.py exactly according to the base64 code you sent. But unfortunately I'm getting the same error. And let me show you the relevant lib. and output:

idx2numpy
imageio
imutils
matplotlib
numpy
tensorflow>=2.2.0 # updated for new version
bison
ply
opencv-python
h5py
Markdown
Pillow
tensorflow-estimator==2.2.0
twine
protobuf>=3.20,<4 # compatible with Protobuf 3.20.x
requests==2.28.2
urllib3==1.26.16
chardet==4.0.0

PS I:\ML\MATH\mathoku> & "C:/Program Files/Python311/python.exe" i:/ML/MATH/mathoku/mathreader/example2.py
2024-11-11 00:38:44.773387: I tensorflow/core/util/port.cc:153] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable TF_ENABLE_ONEDNN_OPTS=0.
2024-11-11 00:38:45.888924: I tensorflow/core/util/port.cc:153] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable TF_ENABLE_ONEDNN_OPTS=0.

['i:/ML/MATH/mathoku/mathreader/example2.py']
[recognize.py] to_recognize | Showing the image of the expression...

[recognize.py] to_recognize | Starting image preprocessing...

[preprocessing.py] treatment()
[preprocessing.py] resize_full_image()
[preprocessing.py] normalize()
[preprocessing.py] to_gray_denoise()
[preprocessing.py] invert()
[preprocessing.py] segment()
[preprocessing.py] segment() | contours founded:
1
[preprocessing.py] resize()
[preprocessing.py] segment() | before line and sqrt processing
[preprocessing.py] segment() | after line and sqrt processing
[preprocessing.py] segment() | before resize
[preprocessing.py] segment() | after resize
[preprocessing.py] segment() | before border
[preprocessing.py] segment() | after border
[preprocessing.py] binarization()
[preprocessing.py] invert()
[preprocessing.py] invert()
[preprocessing.py] _255_to_1()
[recognize.py] to_recognize | Showing preprocessed image

[recognize.py] to_recognize | Image preprocessing finished.

[recognize.py] to_recognize | Starting symbol classification...

... segmentation ...
... recognize ...
C:\Users\Mustafa\AppData\Roaming\Python\Python311\site-packages\keras\src\layers\convolutional\base_conv.py:107: UserWarning: Do not pass an input_shape/input_dim argument to a layer. When using Sequential models, prefer using an Input(shape) object as the first layer in the model instead.
super().init(activity_regularizer=activity_regularizer, **kwargs)
[recognize.py] to_recognize | Exception:
[api.py] recognize | Exception: Kernel shape must have the same length as input, but received kernel of shape (3, 3, 1, 32) and input of shape (None, None, 28, 28, 1).
Traceback (most recent call last):
File "i:\ML\MATH\mathoku\mathreader\example2.py", line 56, in
Example()
File "i:\ML\MATH\mathoku\mathreader\example2.py", line 31, in init
expression, img = hme_recognizer.recognize()
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Mustafa\AppData\Roaming\Python\Python311\site-packages\mathreader\api.py", line 109, in recognize
raise e
File "C:\Users\Mustafa\AppData\Roaming\Python\Python311\site-packages\mathreader\api.py", line 91, in recognize
expression, image = hme.to_recognize()
^^^^^^^^^^^^^^^^^^
File "C:\Users\Mustafa\AppData\Roaming\Python\Python311\site-packages\mathreader\recognize.py", line 85, in to_recognize
raise e
File "C:\Users\Mustafa\AppData\Roaming\Python\Python311\site-packages\mathreader\recognize.py", line 64, in to_recognize
reconhecer = self.__recognize(s['image'])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Mustafa\AppData\Roaming\Python\Python311\site-packages\mathreader\recognize.py", line 35, in __recognize
return classification.fit(img)
^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Mustafa\AppData\Roaming\Python\Python311\site-packages\mathreader\classification\classification.py", line 35, in fit
raise e
File "C:\Users\Mustafa\AppData\Roaming\Python\Python311\site-packages\mathreader\classification\classification.py", line 21, in fit
model = load_model(config.package_path + '/ann_models/model/model_11-07-2020_23-54-57.h5')
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Mustafa\AppData\Roaming\Python\Python311\site-packages\keras\src\saving\saving_api.py", line 196, in load_model
return legacy_h5_format.load_model_from_hdf5(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Mustafa\AppData\Roaming\Python\Python311\site-packages\keras\src\legacy\saving\legacy_h5_format.py", line 133, in load_model_from_hdf5
model = saving_utils.model_from_config(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Mustafa\AppData\Roaming\Python\Python311\site-packages\keras\src\legacy\saving\saving_utils.py", line 85, in model_from_config
return serialization.deserialize_keras_object(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Mustafa\AppData\Roaming\Python\Python311\site-packages\keras\src\legacy\saving\serialization.py", line 495, in deserialize_keras_object
deserialized_obj = cls.from_config(
^^^^^^^^^^^^^^^^
File "C:\Users\Mustafa\AppData\Roaming\Python\Python311\site-packages\keras\src\models\sequential.py", line 359, in from_config
model.add(layer)
File "C:\Users\Mustafa\AppData\Roaming\Python\Python311\site-packages\keras\src\models\sequential.py", line 141, in _maybe_rebuild
self.build(input_shape)
File "C:\Users\Mustafa\AppData\Roaming\Python\Python311\site-packages\keras\src\layers\layer.py", line 226, in build_wrapper
original_build_method(*args, **kwargs)
File "C:\Users\Mustafa\AppData\Roaming\Python\Python311\site-packages\keras\src\models\sequential.py", line 187, in build
x = layer(x)
^^^^^^^^
File "C:\Users\Mustafa\AppData\Roaming\Python\Python311\site-packages\keras\src\utils\traceback_utils.py", line 122, in error_handler
raise e.with_traceback(filtered_tb) from None
File "C:\Users\Mustafa\AppData\Roaming\Python\Python311\site-packages\keras\src\ops\operation_utils.py", line 184, in compute_conv_output_shape
raise ValueError(
ValueError: Kernel shape must have the same length as input, but received kernel of shape (3, 3, 1, 32) and input of shape (None, None, 28, 28, 1).
example2 py

@carolreis
Copy link
Owner

@mustafa-senyuz I asked a friend of mine to test it. And it worked for him as well. However he said he had to update the python version to 3.7 - he was using 3.1

@mustafa-senyuz
Copy link

@mustafa-senyuz I asked a friend of mine to test it. And it worked for him as well. However he said he had to update the python version to 3.7 - he was using 3.1

Ok I will test with other versions too.
Thanks for reply :)

@carolreis
Copy link
Owner

@mustafa-senyuz
I noticed you are using windows, I am worried abuot something related to installation.
Would mind trying to use a docker with a linux image, such as ubuntu?

@mustafa-senyuz
Copy link

mustafa-senyuz commented Nov 14, 2024 via email

@carolreis
Copy link
Owner

Unfortunately I don't have it. But I believe it might work with that

@mustafa-senyuz
Copy link

mustafa-senyuz commented Nov 14, 2024 via email

@carolreis
Copy link
Owner

@mustafa-senyuz hi, did you try it?

@32-git
Copy link
Author

32-git commented Nov 21, 2024

@mustafa-senyuz I noticed you are using windows, I am worried abuot something related to installation. Would mind trying to use a docker with a linux image, such as ubuntu?

@carolreis
Hi. Apologies for my late reply, but does this mean that it isn't possible to get this to work on Windows?
I could give it a try on a Linux system but I'd prefer if it worked on Windows that's why.

@carolreis
Copy link
Owner

@mustafa-senyuz @32-git
A friend of mine had the same issue due to the keras version.
He changed to the same I have and it worked:

keras==2.13.1
tensorflow==2.13.1
tensorflow-estimator==2.13.0
tensorflow-io-gcs-filesystem==0.34.0
Python 3.8.10

@mustafa-senyuz
Copy link

mustafa-senyuz commented Nov 26, 2024 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants