9 steps to build PaddleOCR image text recognition WebAPI under Windows

Table of Contents

This article relies on existing resources to build a WebAPI for image text recognition on the Windows platform, so that other projects can Base64 encode the image and pass it to the API through the Post method, so that the text information in the image can be obtained.

Step 1: Install the Python environment

Step 2: Install opencv-python

Step 3: Install paddledocr

Step 4: Install paddlepaddle

Step 5: Install Flask

Step 6: Install DateTime

Step 7: Write the PaddleOCR.py file and place it in the root directory of drive D. The content of the file is as follows:

Step 8: Start the API service


This article relies on existing resources to build a WebAPI for image text recognition on the Windows platform, so that other projects can Base64 encode the image and pass it to the API through the Post method, so that the text information in the image can be obtained

Step 1: Install Python environment

I installed the python-3.8.8-amd64.exe version. Do not use the latest version. The 3.11 version environment cannot be set up.

Double-click to install, check Add environment variables during installation

Next, open cmd and install the dependent packages. Domestic mirrors are used during the installation process, which will be much faster.

Step 2: Install opencv-python
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python
Step 3: Install paddleocr
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple paddleocr
Step 4: Install paddlepaddle
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple paddlepaddle
Step 5: Install Flask
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple Flask
Step 6: Install DateTime
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple DateTime
Step 7: Write the PaddleOCR.py file and place it in the root directory of drive D. , the file content is as follows:
import io
from pickle import DICT
import paddleocr
import json
import base64
import DateTime
from flask import Flask, request,jsonify
import numpy as np
from PIL import Image
app=Flask(__name__)

@app.route("/WebAPI/PaddleOCR",methods=["POST"])
def PaddleOCR():
    if(request.data == "" or request.data.decode('utf-8') == ""):
        return "request data is empty"
    data=json.loads(request.data)
    imgbase64=data["image"]
    imgbyte=base64.b64decode(imgbase64)
    image=io.BytesIO(imgbyte)
    temp= Image.open(image)
    img=np.array(temp)[:,:,:3]
    info= ppocr.ocr(img)
    if(info[0] == None):
        return "ocr failed"
    result={"TextBlocks":[]}
    for textblocks in info[0]:
        textBlock={"Points":[],"Text":""}
        for tk in textblocks[0]:
            point={"x":str(tk[0]),"y":str(tk[1])}
            textBlock["Points"].append(point)
        textBlock["Text"]=textblocks[1][0]
        result["TextBlocks"].append(textBlock)
    return jsonify(result)

def main():
    global ppocr
    ppocr=paddleocr.PaddleOCR(use_gpu=False)
    app.run(debug=True,host="127.0.0.1",port=5000)
if __name__=="__main__":
    main()

Among them, app.run(debug=True,host=”127.0.0.1″,port=5000) specifies the address and port of the api

This interface uses the POST method to receive a parameter named image. This parameter stores the Base64 encoding of the image that needs to be recognized, and returns the recognition result in JSON format.

Step 8: Start API service

Open cmd, locate the D drive, and execute the command

python PaddleOCR.py

If the above environments have been installed, the service can be started smoothly at this time!

Step 9: Write a client program to test whether the image text recognition service is useful!

The test program is written in c#, and the project references the Newtonsoft package.

The httphelper code provides a post method as follows:

 public static class HttpHelper
    {
        /// <summary>
        /// post
        /// </summary>
        /// <param name="url"></param>
        /// <param name="joReq"></param>
        /// <param name="timeout"></param>
        /// <returns></returns>
        public static JObject Post(string url, JObject joReq, int timeout = 5)
        {
            JObject joAck;

            string result;
            try
            {
                result = Post(url, joReq.ToString(), timeout);
            }
            catch(Exception err)
            {
                joAck = new JObject();
                joAck["Code"] = -1;
                joAck["Msg"] = "Unable to connect to the server, please contact the developer " + err;
                return joAck;
            }
            try
            {
                joAck = JObject.Parse(result);
                return joAck;
            }
            catch(Exception err)
            {
                joAck = new JObject();
                joAck["Code"] = -1;
                joAck["Msg"] = "Error in json data parsing, please contact the developer" + err;
                return joAck;
            }
        }

        private static string Post(string url, string data, int timeout = 5)
        {
            byte[] byteArray = Encoding.UTF8.GetBytes(data);
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
            req.Method = "POST";
            req.ContentLength = byteArray.Length;
            //The connection timeout is sometimes uncontrollable. Even if the set time is not reached, once the entire route has been traversed, an exception will be thrown directly.
            req.Timeout = timeout * 1000;
            req.ReadWriteTimeout = timeout * 1000;
            using (Stream newStream = req.GetRequestStream())
            {
                newStream.Write(byteArray, 0, byteArray.Length);
            }
            HttpWebResponse response = (HttpWebResponse)req.GetResponse();
            using (StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
            {
                return sr.ReadToEnd(); // Returned data
            }
        }
    }

The following test recognizes Text in:

First get the Base64 of the image:

/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAjAKUDASIAAhEBAxEB/8QAGwABAAMBAQEBAAAAAAAAAAAAAAUGCQgHBAr/xAArEAABAwMDBAMAAQBAAAAAAGBAUHAAMIAQIWU1ST1AkRpCESEzV0tCP/xAAaAQEBAQEBAQ EAAAAAAAAAAAAAAAwQFAQYC/8QALREAAwEAAQIEBQIHAQAAAAAAAQIDBAAREgUTFFQVkZPR0iEjIiQxMjRBUXH/2gAMAwEAAhEDEQA/AP3lkBAqalVlMmsp9 + m9Ptv799/bc3a/e65dt6bdulu7a + vr + 1rrrrrru + /6tNNNNPr + YH mTp0EHiUe1Qy/ylj/Qtf8AQqrO1VcAW6xeuOoXBTi5uxjMzg4OJ + BQ0 + kK68nnuVGWxduuR3OcXPd9LYQNCRCl26MLgis7Eutmw + X99u83NfcIy5sWWr5Eu9QQxLlD1 /U9Se1uv/P6Dpzhg6tO3VJNbwSRBUBA46HoAAO5en/vU9eaJcydOgg8Sj2qcydOgg8Sj2qz + hBCnHJbv2A5yH0scn7RNJEmDh5uErFlldRk4ixybdVrgByjIoetUNzRLKgbQatTcEOOxiaGlO8tLijSjq hJxj8rvyOkWFLzD4cGSJiNH74T7bspPC3IjKRHET69isYP7cQkUUN8ZJMc56J3VuncHZpACRGUkqkFahOQWxC17SFQVLhYPNrzbwwxz2rmEl0aUzfpOtxLqWatmEUaryhBK6HWUqaarIwx59WymfNfO 48TGi0JajQxgdBZnnFewBegLUYTQs7JMM9BJCwpWk4rSibn8ydOgg8Sj2qcydOgg8Sj2qwPg/5eEE6SZwm4d/HnG99idRVsTRkPZ3gM85H5GFxFEAOco4vx4j5wa8dI53NpQWyHZF47n9RMJyN laser eh7UnTJ6nLbXOGXbhvpyz0eI2fy53dqCr5vKLCdjsQ7P5JIVCWtqouHQ2ecJ1XW06wyvbTn1QhtDzJ06CDxKPapzJ06CDxKParLN0 + QFOlQY43C2KzDGR7nknOX7YKZMr4h3lLZj5DkQuM1StLu5uhK b5OZ2puSMVhlE0tt + Jkj8LkxIkVlwbZQprKV087xS + UFpyKm15i0ghvIWNrq6NsfiUYY3zDPNZqUCxfJ6STFpqyylJhTBQ7HoyMs + wWHEoocEdkHCiRZqT6DZUYp0O + + 2W + H4/OrmOea6pWlB 8p/yA1lPlHyQxf + O09WMoQKy24dmW052j2tD4jsMY6V00fLeL3lqQhszpJ6rXtsB2N5SJLRRlJmMuzBpDmWyDPshzJ06CDxKPapzJ06CDxKParOvNPN0RxFSAjQrcYPQHMkb39YwrMkshGTFuC x4ZELjFZJiSRJqdw + RlQ9buOBONi4ixjccmxEVmRI0INrW1DKUqMBexTlmrEWKWNgbkbk6VxyCMhMoixhvaCcpDBCHOBhJqxpRbEMbyDIO2H0khjDKmWupjvI97GLui + NBh/NdBNHbb1LXZkM3hhla/lwEc + mGO tWPai6dDMkZBmIFC9UeJM + 5UurQdlspQW9T4n5kJClzTTCumCKO5qQg3banRQSqz/ubv7SJkV6eWQ57y5k6dBB4lHtU5k6dBB4lHtVyZdy5xSsgrpKF3JvHvZGrI9IBt5kLdNEb7QdqI3UWbzhqH3Is3EujAhfHMKd movbmlU4WVy0Xc25/TWLjStTK7nw4mZaQhmtCY1PUAmDSWBJFrdSqbCIgEX56En5NbsX1okaWgskK2lhLW9KsQLF7DceL6xIkcW9Re27bauzu3UXBhalZLnm1ITlW6AEtGd1k8XoAeqJVLRebN0DpaLL1Wsy0 zv3BEodFAlWZJuSAtHU1DKhI6OymNgwXqVMqA9CjdOweZOnQQeJR7VOZOnQQeJR7VVKle/D8Xt5/I/fnnxDb7inzH25beZOnQQeJR7VOZOnQQeJR7VVKlPh + L28/kfvx8Q2 + 4p8x9uW3mTp 0EHiUe1TmTp0EHiUe1VSpT4fi9vP5H78fENvuKfMfblt5k6dBB4lHtU5k6dBB4lHtVUqU + H4vbz + R + /HxDb7inzH25beZOnQQeJR7VKqVKfD8Xt5/I/fj4ht9xT5j7ctpl/lLH + ha/6F VZm3ZVE2eysZ7spDQ + vaTyc0ruz3pbahFY3rbuQ0tr7OxxZbmWkF306lQ1LG1dauqQ9ZdUN6pFd2EC1NusIWzUYmZnBwW2VCOzpe2bUu2zu/9bNvdt37Lt7f/Ol3fb + 9NdLun1rt11/nTX7 00/j7rnGHzsf0o/Yrl9mfVhyTbZGDSBJDMhbr + o6FTRCpH9edQvpy7tVUyWstCACq0Ckfo3UMqOG /50/1 + v8AvnBUTn4yYzIAIWU8HzNyaozyEVudloPm07WtSJxKcWbLVcX3kU3TvfbUzhfb3fa32lJS12lN1A4707BY3WlLi5cvfJXh1JeVBjDSEaJsuUowpd49Glm3G7IO9AIREe9rnqMpFNJ + lv7yDAnCQywaARNwZ8fm8Jh2SnUKN1D6RkKNxvKwVxAtluMPnY/pR + xTjD52P6UfsVpzTwwGIU15rnFvjvmGpJUo8X7vKqhox8qqF40abzui0Nc1s + lI3nmrXe1rWnkvJrRWR6xehXs ZKToC0wpadpSr2OrxsEMNUtGWt4Vxxxkxmm2Dl8YSSXBpKYFaVJlcZyQ0JTpsJC5U9v7JBYDDo3bf5TmAqcHw0No5hFhuPLqXTIcJEBqodtxvL7xtvbjJ1p0q4v5o5FnjjMjQwxxjvGRSnY1ExYQnUmX n67m + iYEaS0DtWUEuRYDlzPikQguxJZYDRHj0qy2Fp6BEzXF0sERbGbK3DVvb/jD52P6UfsU4w + dj + lH7FaTfO1YXPiKmuTPhhjJtlZMx8NyQw47eUyGOto5s0EGfxGezCzxlobI2mU7J mSOqa3WeGkxq0bdGnsjoR7Hftp4jdEqrC2MjbRrx0eH0ybYMe2WpU/h5lJJ8FlmWRJDBuX4/GmPJkPEUqxXIhOQuOMcmEDFF7tAEyDCErjhI4O06RoUABDIx62WmZnkOM7JKQaJmxylaFmpoZkiJvh YXwtyTBswZilYozeyyKAF1FccLTctJB7ALYkmi6DL5fUlQCdIAjDwbJR8bGLJAz2EjkD7ItJXOyYu + toxe1LagvjWuvGHzsf0o/Ypxh87H9KP2KounElJ0TRnUyCds/UhodwpS9KHM9Gzl9Om1tOr9sJe 1qd6mfbNYnJrZGRs127ySX9N0t2 + SmaaC6yWwXPmlHPn6UDRlGYRgQzNnlkxBMxOU6w1lJj2GQPJMnxrG8wwm6guQJoYRgNqwCYVgGRrSMYkoJimcHZgJ2IjjJiblo/fjJwbTQTJSBEoJBlU1o NzlzaqwkymZ8NLOHbAT4 + EIpHkUY1q4rdF + + RQVe7zlFc5ay1IgqR3UTOftoFAKlmGQQLiK4OD5oXhiHV63PjMQJGtnRKtn + MPnY/pR + xTjD52P6UfsVENiWTRXZJU72eIF49Mxe/iO1hFT1RgfE vFdniZGhL/ zrqSfToM/L9mzuVzioX/YNHOe3fdszYFi9Kf3hkx + HZvDP2Wkp8PDxK + YRVccEuGmSr9nQFZ4FW2Cx16bbLPFxLj2PyGfFsb7I5uAry1vGRTaZOMOhat7y + HXgldo7E3NfHTGxLMc9F8aqi5i VEyl0ZescE4glfHzGkDguXEUebHaJ9i4LGn2ODQkMG4zCW9TuvD5e + pyaOY7UhRS77FKjR5BW/nDSwbk9nRFIJJop37kvb3GHzsf0o/Ypxh87H9KP2KpK2CP6TvnC9twqnQpCto0Lsq4JoW7m2Pu0gFi iv4nrmEEJeHRwTpDdUlnhpZyuZGb07AsmSVs8EIEwoC56QiSqq7LizOzGr7Ka4GlT3GHzsf0o/Ypxh87H9KP2Kp6vJ7nP9af5c/HpNfttH0afjyBpU9xh87H9KP2KcYfOx/Sj9inq8nuc/1p/l x6TX7bR9Gn48gaVPcYfOx/Sj9inGHzsf0o/Yp6vJ7nP9af5cek1 + 20fRp + PIGlT3GHzsf0o/Ypxh87H9KP2Kerye5z/Wn + XHpNfttH0afjyBpU9xh87H9KP2KU9Xk9zn + tP8uPSa/baPo0/H nrVKUr4fn3HFKUpxxSlKccUpSnHFKUpxxSlKccUpSnHFKUpxxSlKccUpSnHFKUpxz/2Q= =

Then submit it to the API via POST to obtain the recognition result:

JObject joReq = new JObject
            {
                ["image"] = "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBA QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAjAKUDASIAAhEBAxEB/8QAGwABAAMBAQEBAAAAAAAAAAAAAAUGCQgHBAr/xAArEAABAwMDBAMAAQUBAAAAAAGBAUHAAMIAQIWU1ST1AkRpCESEzV0tCP/xAAaA QEBAQEBAQEAAAAAAAAAAAAAAwQFAQYC/8QALREAAwEAAQIEBQIHAQAAAAAAAQIDBAAREgUTFFQVkZPR0iEjIiQxMjRBUXH/2gAMAwEAAhEDEQA/AP3lkBAqalVlMmsp9 + m9Ptv799/bc3a/e65dt6bdulu7a + vr + 1rrrrrru + /6t NNNNPr + YHmTp0EHiUe1Qy/ylj/ Qtf8AQqrO1VcAW6xeuOoXBTi5uxjMzg4OJ + BQ0 + kK68nnuVGWxduuR3OcXPd9LYQNCRCl26MLgis7Eutmw + X99u83NfcIy5sWWr5Eu9QQxLlD1/U9Se1uv/P6Dpzhg6tO3VJNbwSRBUBA4 6HoAAO5en/vU9eaJcydOgg8Sj2qcydOgg8Sj2qz + hBCnHJbv2A5yH0scn7RNJEmDh5uErFlldRk4ixybdVrgByjIoetUNzRLKgbQatTcEOOxiaGlO8tLijSjqhJxj8rvyOkWFLzD4cGSJiNH74T7bspPC3Ij KRHET69isYP7cQkUUN8ZJMc56J3VuncHZpACRGukqkFahOQWxC17SFQVLhYPNrzbwwxz2rmEl0aUzfpOtxLqWatmEUaryhBK6HWUqaarIwx59WymfNfO48TGi0JajQxgdBZnnFewBegLUYTQs7JMM9B JCwpWk4rSibn8ydOgg8Sj2qcydOgg8Sj2qwPg/5eEE6SZwm4d/HnG99idRVsTRkPZ3gM85H5GFxFEAOco4vx4j5wa8dI53NpQWyHZF47n9RMJyNlasIXN + 6K29KZ8pj/ANPIfkUyVvO28lB vjWymuRZEhQdjOUdo4Ofj6HCsKTDwOnL078HO1n5DFTapVj + 1SxrXUcfBzYymIWYWS8ekVk3DKRlPNdM3h0kFKRkJHN67zl/cgPDumIN4hTRJnhHJOniGSeh7UnTJ6nLbXOGXbhvpyz0eI2fy53dqCr 5vKLCdjsQ7P5JIVCWtqouHQ2ecJ1XW06wyvbTn1QhtDzJ06CDxKPapzJ06CDxKParLN0 + QFOlQY43C2KzDGR7nknOX7YKZMr4h3lLZj5DkQuM1StLu5uhKb5OZ2puSMVhlE0tt + Jkj8LkxIkVlwbZ QprKV087xS + UFpyKm15i0ghvIWNrq6NsfiUYY3zDPNZqUCxfJ6STFpqyylJhTBQ7HoyMs + wWHEoocEdkHCiRZqT6DZUYp0O + + 2W + H4/OrmOea6pWlB8p/yA1lPlHyQxf + O09WMoQKy24dmW 052j2tD4jsMY6V00fLeL3lqQhszpJ6rXtsB2N5SJLRRlJmMuzBpDmWyDPshzJ06CDxKPapzJ06CDxKParOvNPN0RxFSAjQrcYPQHMkb39YwrMkshGTFuCx4ZELjFZJiSRJqdw + RlQ9buOBONi4ixjccm xEVmRI0INrW1DKUqMBexTlmrEWKWNgbkbk6VxyCMhMoixhvaCcpDBCHOBhJqxpRbEMbyDIO2H0khjDKmWupjvI97GLui + NBh /NdBNHbb1LXZkM3hhla/lwEc + mGOtWPai6dDMkZBmIFC9UeJM + 5UurQdlspQW9T4n5kJClzTTCumCKO5qQg3banRQSqz/ubv7SJkV6eWQ57y5k6dBB4lHtU5k6dBB4lHtVyZdy5xSsgrpKF3 JvHvZGrI9IBt5kLdNEb7QdqI3UWbzhqH3Is3EujAhfHMKdmovbmlU4WVy0Xc25/TWLjStTK7nw4mZaQhmtCY1PUAmDSWBJFrdSqbCIgEX56En5NbsX1okaWgskK2lhLW9KsQLF7DceL6xIkcW9Re2 7bauzu3UXBhalZLnm1ITlW6AEtGd1k8XoAeqJVLRebN0DpaLL1Wsy0zv3BEodFAlWZJuSAtHU1DKhI6OymNgwXqVMqA9CjdOweZOnQQeJR7VOZOnQQeJR7VVKle/D8Xt5/I/fnnxDb7inzH25beZOnQQe JR7VOZOnQQeJR7VVKlPh + L28/kfvx8Q2 + 4p8x9uW3mTp0EHiUe1TmTp0EHiUe1VSpT4fi9vP5H78fENvuKfMfblt5k6dBB4lHtU5k6dBB4lHtVUqU + H4vbz + R + /HxDb7inzH25beZOn QQeJR7VKqVKfD8Xt5/I/fj4ht9xT5j7ctpl/lLH + ha/6FVZm3ZVE2eysZ7spDQ + vaTyc0ruz3pbahFY3rbuQ0tr7OxxZbmWkF306lQ1LG1dauqQ9ZdUN6pFd2EC1NusIWzUYmZnBwW2VCO zpe2bUu2zu/9bNvdt37Lt7f/Ol3fb + 9NdLun1rt11/ nTX700/j7rnGHzsf0o/Yrl9mfVhyTbZGDSBJDMhbr + o6FTRCpH9edQvpy7tVUyWstCACq0Ckfo3UMqOG/50/1 + v8AvnBUTn4yYzIAIWU8HzNyaozyEVudloPm07WtSJxKcWbLVcX3kU3TvfbUzhfb3fa 32lJS12lN1A4707BY3WlLi5cvfJXh1JeVBjDSEaJsuUowpd49Glm3G7IO9AIREe9rnqMpFNJ + lv7yDAnCQywaARNwZ8fm8Jh2SnUKN1D6RkKNxvKwVxAtluMPnY/pR + xTjD52P6UfsVpzT wwGIU15rnFvjvmGpJUo8X7vKqhox8qqF40abzui0Nc1s + lI3nmrXe1rWnkvJrRWR6xehXsZKToC0wpadpSr2OrxsEMNUtGWt4Vxxxkxmm2Dl8YSSXBpKYFaVJlcZyQ0JTpsJC5U9v7JBYDDo3bf5Tm AqcHw0No5hFhuPLqXTIcJEBqodtxvL7xtvbjJ1p0q4v5o5FnjjMjQwxxjvGRSnY1ExYQnUmXn67m + iYEaS0DtWUEuRYDlzPikQguxJZYDRHj0qy2Fp6BEzXF0sERbGbK3DVvb/jD52P6Uf sU4w + dj + lH7FaTfO1YXPiKmuTPhhjJtlZMx8NyQw47eUyGOto5s0EGfxGezCzxlobI2mU7JmSOqa3WeGkxq0bdGnsjoR7Hftp4jdEqrC2MjbRrx0eH0ybYMe2WpU/h5lJJ8FlmWRJDBuX4/ GmPJkPEUqxXIhOQuOMcmEDFF7tAEyDCErjhI4O06RoUABDIx62WmZnkOM7JKQaJmxylaFmpoZkiJvhYXwtyTBswZilYozeyyKAF1FccLTctJB7ALYkmi6DL5fUlQCdIAjDwbJR8bGLJAz2EjkD7ItJXOyYu + toxe1LagvjWuvGHzsf0o/Ypxh87H9KP2KounElJ0TRnUyCds/UhodwpS9KHM9Gzl9Om1tOr9sJe1qd6mfbNYnJrZGRs127ySX9N0t2 + SmaaC6yWwXPmlHPn6UDRlGYRgQzNnlkxBMxOU6w1lJj2 GQPJMnxrG8wwm6guQJoYRgNqwCYVgGRrSMYkoJimcHZgJ2IjjJiblo/fjJwbTQTJSBEoJBlU1oNzlzaqwkymZ8NLOHbAT4 + EIpHkUY1q4rdF + + RQVe7zlFc5ay1IgqR3UTOftoFAKlmGQQLiK4OD5oX hiHV63PjMQJGtnRKtn+MPnY /pR + xTjD52P6UfsVENiWTRXZJU72eIF49Mxe/iO1hFT1RgfEvFdniZGhL/zrqSfToM/L9mzuVzioX/YNHOe3fdszYFi9Kf3hkx + HZvDP2Wkp8PDxK + YRVccEuGmSr9nQFZ4FW2Cx16bbLP FxLj2PyGfFsb7I5uAry1vGRTaZOMOhat7y + HXgldo7E3NfHTGxLMc9F8aqi5iVEyl0ZescE4glfHzGkDguXEUebHaJ9i4LGn2ODQkMG4zCW9TuvD5e + pyaOY7UhRS77FKjR5BW/nDSwbk9nRFIJJop37kv b3GHzsf0o/Ypxh87H9KP2KpK2CP6TvnC9twqnQpCto0Lsq4JoW7m2Pu0gFiiv4nrmEEJeHRwTpDdUlnhpZyuZGb07AsmSVs8EIEwoC56QiSqq7LizOzGr7Ka4GlT3GHzsf0o/Ypxh87H9KP2Kp6v J7nP9af5c/HpNfttH0afjyBpU9xh87H9KP2KcYfOx/Sj9inq8nuc/1p/lx6TX7bR9Gn48gaVPcYfOx/Sj9inGHzsf0o/Yp6vJ7nP9af5cek1 + 20fRp + PIGlT3GHzsf0o/Ypxh87H9KP2Kery e5z/Wn + XHpNfttH0afjyBpU9xh87H9KP2KU9Xk9zn + tP8uPSa /baPo0/HnrVKUr4fn3HFKUpxxSlKccUpSnHFKUpxxSlKccUpSnHFKUpxxSlKccUpSnHFKUpxz/2Q==",
            };
            var result = HttpHelper.Post("http://127.0.0.1:5000/WebAPI/PaddleOCR", joReq, 10 * 1000);

Run the code and successfully obtain the text content of the image: