OCR

Extracting Text from Images

To extract text from images, a method called optical character recognition (OCR) is used. To process images on the Diggernaut platform, the digger needs to load the image first (digger will automatically converts all images to XML with element where you can extract binary content encoded as base64), then extract base64 encoded image contents from XML to the register. And after it you can use the ocr command.

You can use following parameters:

Parameter Description
resize An optional parameter that can contain a positive integer value, indicating the percent of change in the size of the image from the original. This parameter is used to improve the quality of recognition, if the original size is recognized badly.
do Commands that should be run in the OCR context.

The command expects image encoded as base64 in the register. After using the command, digger switches to the OCR context. In this context you can use the text command to transfer recognized text to the register.

Let's see example when page has some image that is embedded into HTML:

          <img src="data:image/png;base64,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">
          

Following image is encoded in this base64 image:

To extract text, digger code will looks like:

          # FIND ELEMENT WITH EMBEDDED IMAGE
- find:
    path: img
    do:
    # PARSE ATTR `src` AND EXTRACT ONLY BASE64 ENCODED PART
    - parse:
        attr: src
        filter: data\:image\/png\;base64\,(.+)

    # REGISTER NOW HAS IMAGE ENCODED IN BASE64
    # SWITCHING TO OCR CONTEXT
    - ocr:
        do:
        # GET RECOGNIZED TEXT TO THE REGISTER
        - text
        # REGISTER VALUE: Hello world
            

Now let's see how we would do if there is link to image file:

          ---
config:
    debug: 2
    agent: Firefox
do:
# LOAD IMAGE (SAME AS WE LOADING ANY PAGE)
- walk:
    to: https://www.diggernaut.com/sandbox/captcha_3.jpg
    do:
    # DIGGER WILL CONVERT BINARY IMAGE TO XML DOCUMENT WITH IMAGE ENCODED AS BASE64
    # IMAGE WILL BE KEPT IN THE `imgbase64` TAG
    - find:
        path: imgbase64
        do:
        - parse
        - ocr:
            resize: 40
            do:
            - text
            - variable_set: imgtext
            # AS RESULT WE WILL GET THIS EXTRACTED TEXT: W68HP
          

Captcha on source website doesnt let you scrape the data? Learn how to bypass it.