1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/duolabmeng666-paddlehub_ppocr

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

На основе Serverless архитектуры развёртывание универсального распознавания текста PaddleOCR

Проектный фон В повседневной практике проектов, мы полагаем, что все хотят, чтобы их Restful API-сервисы были надёжными и работали стабильно, а также обладали высокой степенью параллелизма и доступности. Сервисами Serverless от облачных провайдеров является оптимальным выбором. Они не требуют администраторов, не нужно создавать k8s, и можно не беспокоиться о недоступности сервиса из-за сбоев.

PaddleOCR стремится создать богатую, передовую и практичную библиотеку инструментов для распознавания текста, помогая пользователям обучать более совершенные модели и применять их на практике. Адрес проекта PaddleOCR: https://github.com/PaddlePaddle/PaddleOCR.

Мы упаковываем PaddleOCR в образ Docker, чтобы его можно было быстро развернуть в среде Docker или k8s для использования в сети.

Эта статья предоставит стандартизированный код для достижения этой цели.

С помощью образа Docker, предоставленного этим проектом, вы можете быстро развернуть PaddleOCR как вызываемый Restful API сервис.

После прочтения этой статьи вы узнаете:

  • Как создать образ Docker для развёртывания моделей глубокого обучения в Serverless архитектуре с учётом сложных сценариев.
  • Как эффективно использовать Serverless сервисы, предоставляемые различными облачными провайдерами, для развёртывания.
  • Как создавать компактные и элегантные образы Docker.

Готовое к использованию решение Здесь предоставляется готовый к использованию образ Docker, который позволяет легко развернуть PaddleOCR на локальном сервере, в Alibaba Cloud Function Compute и Tencent Cloud Function, обеспечивая универсальные API распознавания текста.

Опыт работы с PaddleOCR одним щелчком мыши в центре приложений Alibaba Cloud Serverless

1. Развёртывание PaddleOCR на локальной машине Адрес образа Docker на сайте PaddleOCR: https://hub.docker.com/repository/docker/duolabmeng666/paddlehub_ppocr

# Адрес репозитория образов Docker на Alibaba Cloud
docker run -itd --name ppocr -p 9000:9000 registry.cn-hongkong.aliyuncs.com/llapi/ppocr:1.8 /bin/bash -c "sh /PaddleOCR/start.sh"

# Адрес сервера модели на Alibaba Cloud
docker run -itd --name ppocr -p 9000:9000 registry.cn-hongkong.aliyuncs.com/llapi/ppocr:1.6.server /bin/bash -c "sh /PaddleOCR/start.sh"

Вызов OCR

  1. Вычислите Base64-кодировку изображения, которое нужно распознать.
  2. Отправьте запрос на обслуживание (используя параметры запроса, указанные ниже).
curl -H "Content-Type:application/json" -X POST --data "{\"images\": [\"iVBORw0KGgoAAAANSUhEUgAAAHkAAAAnCAYAAAArfufOAAAEvElEQVR4nO1bMWsbSRT+clyv4sAWGAS5wpUN8UGuSmlQEBHpsp0LgZy4cOkuwhHqrDKFkERcpMqWQZcgkRQurrJBNifjwo3BYEcSpNAv2Huzu5JWu7Pe2dWubDLzNV7P7r5987733rx5Yz8yCFD4pfHbfSugkDwUyRJAkSwBFMkSQJEsARTJEkCRLAEUyRJAkSwBFMkSQJEsAbwkn+nQdqo4PBN4W+jZATrlKrTydww5d4dfGyRDx7mgwg8Vsc+D2bbZE/tuwHO/x6WTL/o9/NsHVvPrWIoqg024fj2XGtnXeyg8mf7OjLPbGoWWs5rfQiW3LPSs8DfSG3i/vzljn/MTmm/3mhznAqWahjXee2QXS/4FOdc6/xmMSe5/R6l8ikvHjU69io7QVJzPplDY30Y27VC2xeRmUGKGsclyGzwQTzToNb+bLFN8xCG8hgpGxt+AHvRwuNPGVSj5wd84b1ZRufWOrxX3oNv2quw0PHY19WGOz3EQNyyS05uo1DatkTBEBD1LzqN3WRSJGtImrM+uvQ4jHZhzvyYbfwZWZm4wO7UpsMiBBBw7wXRNitQpisnTdn2dpYd/zHQzIm+twiJ2D++7LM0lp9kU1/Z3xbHquPam49FUHs279DS8Rn4pvlLm6cnR/6/n0IvrM0O+JIdJ11ycHVkRyYnEqewMCvkU0ErNpDSrQEthJfEoni9dL+W2oeesazPtdmflMcLCwinTg4jLnS/JYdK1B2yNd4671nyn7CiGeHjo4bjrd08gWyTszAmkaztNU9oooW0VFeM1P4YqOV7Ml64nOLuYZL1jiujjp84AiVZ4xYn40zXbMrFKl9aFYbMdXbOFIJ7qmm13VtMpXPavcXVLP+sNrFDRuBGvspERf7pmUbtvXfKaH8EY4PSECo/0n9H31YuEuYPI4Fl+hMtWBtq+BrDoLOtUb4QR5NxZ3I3AAHRtq5JvhojCs26H3fNGwfzpmvUBkN+iqP08GVsrbqHQPAJuwkheRpZ2Flnf+1MnCNOQYXg4JDv36gvDnOmaMplZURfJ4F+dN4iwomYVld2YCi97t5LNb+CqdYTznKjeNsm8vVm0jhe4+7RIsCP7cdju2AIxvB1Rxtk2je2/NMVReE27Wy9ymxje0DvNnrCdTZLv3JvdF/o/zdT9OFaZ7vbtKHS6RusjNLNRY3XkConv5b3drSW2HFDq1poQIvrOdG15mbs3OkevOP0HrWmzhZqfg7EoYVHwd5xRfC9LwjwYr8PMoZzZgK3fz3FDy4cI0dzzZOvYjAgGpV4OkRuUQvWXP7FLz2g7DXQEKkIT6WUzMjsnQUdodruTnGIRFTZzZt6R6Xjc75g0UZjHuHYw1Xg9/HUUahTRt+1ADh5N/xfKUcKHWVcnKZBzAsXLBKINEXsbgIhHgjxMq1KriOq4xof9AZbSnKrVpTNve2nVNSlPWzP0UaPjW8Lty8k7Poc6jOTBl7rx6s2B8eHUiI4f34y3JOPtl/5kqNc4MF69+2YM5hAbL/pG+92BOVennqFgz9M9L8uGn4xewJgbUxv9Z3xgct/UjfaPaKqNeXR/0xHJCr8q1N94SQBFsgRQJEsARbIEUCRLAEWyBFAkSwBFsgT4HxQ8/CE4B3ErAAAAAElFTkSuQmCC\"]}" http://127.0.0.1:9000/predict/ocr_system
  1. Получите ответ (если вызов успешен, будет возвращён следующий результат):
{"msg":"","results":[[{"confidence":0.9853195548057556,"text":"测试图像路径,可以是单张图片路径,也可以是图像集合目录路径","text_region":[[5,10],[466,10],[466,24],[5,24]]}]],"status":"000"}

Пример вызова OCR-кода Посмотреть пример вызова кода

import requests
import base64

def ocr(файл_адрес):
    с открытым(файл_адрес, 'rb') как f:
        данные = f.read(-1)
    изображение = str(base64.b64encode(данные), кодировка='utf-8')
    данные = '{"images":["' + изображение + '"]}'
    txt = requests.post("http://127.0.0.1:9000/predict/ocr_system", данные=данные,
``` **Перевод текста на русский язык:**

## 2. Развёртывание в функции вычислений Али Облако

Очень просто!

[Serverless приложение центр один ключ опыт PaddleOCR](https://fcnext.console.aliyun.com/applications/create?template=PaddleOCR)

## 3. Развёртывание в функциях Тсенгюн (Tencent) Облако

Немного сложнее, пожалуйста, посмотрите следующее руководство:

# Проект разработки

Используйте [PaddleHub Serving для развёртывания сервиса PaddleOCR](https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.2/deploy/hubserving/readme.md)

Шаги следующие:

1. Построить среду выполнения paddle;
2. Использовать PaddleHub Serving сервис для развёртывания;
3. Скачать проект PaddleOCR обратно и написать файл Dockerfile;
4. Сред развёртывания Serverless архитектуры.

# Построение среды выполнения paddle в docker

## 1. Построение python3.7 среды выполнения

Создать следующие файлы и каталоги:

/test_ppocr -- PaddleOCR (https://github.com/PaddlePaddle/PaddleOCR проект файлов) -- Dockerfile (файл построения docker)


```shell
# Создание базовой среды выполнения python
docker run -itd --name testppocr -p 9000:9000 -v /test_ppocr:/test_ppocr python:3.7.10-slim /bin/bash #
# Ввод в контейнер для установки среды выполнения paddle
docker exec -it testppocr /bin/bash 

При развёртывании модели глубокого обучения, не рекомендуется использовать версию alpine в среде выполнения python, например python:3.7-alpine. Причина использования версии alpine заключается в том, что требуется много времени для установки системных зависимостей, а выгода невелика, и конечный размер образа примерно такой же, как у версии slim. Если среда установки сложна, вы также можете выбрать python:3.7-buster образ. Конечный размер сборки обычно больше на 100 МБ–300 МБ, но сложность установки значительно снижается, и это также приемлемо. Рекомендуется новичкам использовать buster версию для создания образов. Если требуется небольшой размер образа, используйте slim версию для создания образа. В среде Serverless требуется небольшой размер образа для повышения скорости запуска функций, поэтому выберите slim версию для создания образа.

2. Установка зависимостей

Определите, какие зависимости нужны системе, путём запуска кода. docker exec -it testppocr /bin/bash введите работающую базовую среду, затем войдите в терминал запущенной системы и запустите свой код, чтобы определить необходимые зависимости.

requirements.txt, обратите внимание на версию пакета зависимостей, иначе версия будет слишком высокой и установка завершится неудачно. Рекомендуется зафиксировать версию, чтобы предотвратить невозможность восстановления образа в будущем.

shapely==1.8.1.post1
scikit-image==0.17.2
imgaug==0.4.0
pyclipper==1.3.0.post2
lmdb==1.3.0
tqdm==4.64.0
numpy==1.21.6
visualdl==2.2.3
python-Levenshtein==0.12.2
opencv-contrib-python==4.2.0.32
paddlenlp==2.0.0
paddle2onnx==0.5.1
paddlepaddle==2.0.2
paddlehub==2.1.0

Начните установку системных зависимостей и зависимостей Python:

apt install g++
apt install libglib2.0-dev
apt install libgl1-mesa-glx
apt install libsm6
apt install libxrender1

# Загрузка пакетов Python в автономном режиме. Поскольку сборка часто повторяется, загрузка пакетов в автономном режиме может ускорить отладку.
pip download -r requirements.txt -d ./pg
pip download paddlepaddle==2.0.2 -i https://mirror.baidu.com/pypi/simple -d ./pg
pip download paddlehub -d ./pg

# Установка пакетов Python
pip install -r requirements.txt --find-links ./pg
pip install paddlepaddle --find-links ./pg
pip install paddlehub -U --no-index --find-links ./pg

3. Использование PaddleHub Serving для развёртывания

hub install deploy/hubserving/ocr_system/
hub install deploy/hubserving/ocr_cls/
hub install deploy/hubserving/ocr_det/
hub install deploy/hubserving/ocr_rec/

Здесь среда выполнения PaddleHub Serving установлена, запустите её и проверьте эффект:

hub serving start --modules ocr_system ocr_cls ocr_det ocr_rec -p 9000

Адрес распознавания — http://127.0.0.1:9000/predict/ocr_system.

Если проблем нет, то здесь образ готов к запуску.

Наконец, удалите ненужные файлы из контейнера, уменьшите размер контейнера:

rm -rf /root/.cache/* \
&& rm -rf /var/lib/apt/lists/* \
&& rm -rf /app/test/pg/*

Сохраните и отправьте в соответствующий репозиторий контейнеров облачного провайдера.

В качестве примера здесь используется репозиторий образов контейнеров Alibaba Cloud.

Пожалуйста, измените параметры отправки самостоятельно, здесь приведена моя команда учётной записи:

docker commit testppocr paddlehub_ppocr:1.0
docker tag paddlehub_ppocr:1.0 registry.cn-hongkong.aliyuncs.com/llapi/ppocr:1.0
docker push registry.cn-hongkong.aliyuncs.com/llapi/ppocr:1.0

4. Написание файла Dockerfile

Предыдущий процесс представляет собой создание базовой среды выполнения для paddle. Таким образом, можно использовать этот базовый образ для развёртывания любой модели paddle в будущем.

FROM registry.cn-hongkong.aliyuncs.com/llapi/pphub:base

COPY PaddleOCR /PaddleOCR

WORKDIR /PaddleOCR

RUN mkdir -p /PaddleOCR/inference/
ADD https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_infer.tar /PaddleOCR/inference/
RUN tar xf /PaddleOCR/inference/ch_ppocr_mobile_v2.0_det_infer.tar -C /PaddleOCR/inference/

ADD https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_infer.tar /PaddleOCR/inference/
RUN tar xf /PaddleOCR/inference/ch_ppocr_mobile_v2.0_cls_infer.tar -C /PaddleOCR/inference/

ADD https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_infer.tar /PaddleOCR/inference/
RUN tar xf /PaddleOCR/inference/ch_ppocr_mobile_v2.0_rec_infer.tar -C /PaddleOCR/inference/

RUN hub install deploy/hubserving/ocr_system/
RUN hub install deploy/hubserving/ocr_cls/
RUN hub install deploy/hubserving/ocr_det/
RUN hub install deploy/hubserving/ocr_rec/

EXPOSE 9000

CMD ["/bin/bash","-c","hub serving start --modules ocr_system ocr_cls ocr_det ocr_rec -p 9000"]

Обратите внимание, что данный текст является переводом исходного текста и может содержать неточности или ошибки. Необходимо отправить образ Docker в репозиторий образов соответствующей платформы.

Здесь в качестве примера рассматривается репозиторий образов контейнеров Alibaba Cloud.

Пожалуйста, самостоятельно измените параметры отправки. Здесь представлена команда моего аккаунта:

docker commit testppocr paddlehub_ppocr:1.0
docker tag paddlehub_ppocr:1.0 registry.cn-hongkong.aliyuncs.com/llapi/ppocr:1.0
docker push registry.cn-hongkong.aliyuncs.com/llapi/ppocr:1.0

Развёртывание на платформе Alibaba Cloud Function Compute

В консоли управления Alibaba Cloud Function Compute создайте новую службу, создайте функцию и заполните информацию, как показано ниже. После создания функции свяжите её с доменом, чтобы предоставить API для распознавания интерфейса.

Адрес образа контейнера: registry.cn-hongkong.aliyuncs.com/llapi/ppocr:1.0

Команда запуска: ["sh","/PaddleOCR/start.sh"]

Необходимо связать домен.

Распознаваемый адрес: http://связанный домен/predict/ocr_system

Рисунок 2

Рисунок 3

Развертывание на платформе Tencent Cloud Function

Здесь уже подготовлен доступный образ.

На платформе Tencent Cloud Function Console необходимо отправить образ в собственный репозиторий изображений, а затем создать облачную функцию, чтобы обеспечить API распознавания интерфейса.

  1. Необходимо отправить изображение в репозиторий изображений Tencent Cloud.
  2. Создайте облачную функцию.
docker pull duolabmeng666/paddlehub_ppocr:1.2
docker tag duolabmeng666/paddlehub_ppocr:1.2 ccr.ccs.tencentyun.com/llapixxx/ppocr:1.2
docker push ccr.ccs.tencent.com/llapixxx/ppocr:1.2

После отправки изображения в Tencent Cloud можно создать облачную функцию. Распознаваемый адрес будет выглядеть следующим образом: https://созданная облачная функция.gz.apigw.tencentcs.com/release/predict/ocr_system.

Поскольку файлы в контейнере облачной функции Tencent ограничены и разрешают доступ только к /tmp, необходимо изменить код для поддержки развёртывания облачных функций.

Решение проблемы

  • Понимание процесса создания и отправки образов Docker.
  • Решение проблем с ошибками в облачных функциях.

Анализ файлов, записанных в образе Docker

Запустите подготовленный образ на своём компьютере.

docker run -itd --name ppocr -p 9000:9000 ccr.ccs.tencent.com/llapi/pphubocr:1.0

Просмотрите информацию о различиях файлов и обнаружите, что после запуска в каталоге, отличном от /tmp, были выполнены операции записи файлов. Поэтому контейнер не может быть запущен в облачной функции. Теперь необходимо переместить пути обработки в каталог /tmp.

docker diff ppocr
C /root
C /root/.paddlehub
C /root/.paddlehub/conf
A /root/.paddlehub/conf/serving_9000.json
C /root/.paddlehub/log
A /root/.paddlehub/log/HubServing-2021_08_12.log

Изучив исходный код, вы обнаружите, что файл ./tx/env.py контролирует каталог, в который записываются эти файлы. Скопируйте файл и поместите его в ./tx/env.py, а затем добавьте следующий код в конец файла.

CONF_HOME = "/tmp"
LOG_HOME = "/tmp"
TMP_HOME = "/tmp"

Создание файла Dockerfile

Создайте файл Dockerfile_TX в корневом каталоге проекта.

FROM ccr.ccs.tencentyun.com/llapi/pphubocr:1.0

WORKDIR /PaddleOCR

COPY ./tx/env.py /usr/local/lib/python3.7/site-packages/paddlehub/env.py

CMD ["/bin/bash","-c","hub serving start --modules ocr_system ocr_cls ocr_det ocr_rec -p 9000"]

Сборка образа и тестирование

docker build -f ./Dockerfile_TX -t paddlehub_ppocr:1.0 .
docker rm -f ppocr
docker run -itd --name ppocr -p 9000:9000 paddlehub_ppocr:1.0
docker logs ppocr
docker diff ppocr

Вы увидите, что в образе всё ещё существуют файлы, которые могут быть прочитаны и записаны вне каталога /tmp. Однако эти файлы не будут доступны для чтения и записи после сохранения образа. Поэтому достаточно сохранить и отправить образ.

docker diff ppocr
C /usr
C /usr/local
C /usr/local/lib
C /usr/local/lib/python3.7
C /usr/local/lib/python3.7/site-packages
C /usr/local/lib/python3.7/site-packages/paddlehub
C /usr/local/lib/python3.7/site-packages/paddlehub/__pycache__
C /usr/local/lib/python3.7/site-packages/paddlehub/__pycache__/env.cpython-37.pyc
C /tmp
A /tmp/HubServing-2021_08_12.log
A /tmp/cache.yaml
A /tmp/config.yaml
A /tmp/serving_9000.json

Упаковка и отправка образа

# Сохранить образ
docker commit ppocr ccr.ccs.tencent.com/llapi/pphubocr:1.2

# Проверить, есть ли проблемы с этим образом. Если нет проблем, можно отправить его.
docker rm -f ppocr
docker run -itd --name ppocr -p 9000:9000 ccr.ccs.tencent.com/llapi/pphubocr:1.2
docker logs ppocr
docker diff ppocr

# После проверки того, что образ не имеет проблем, отправьте образ.
docker push ccr.ccs.tencent.com/llapi/pphubocr:1.2

Создайте облачную функцию в Tencent

Выберите образ и разверните его напрямую, чтобы получить распознаваемый адрес.

Рисунок 4

Рисунок 5

Использование Serverless Devs для развёртывания на платформе Alibaba Cloud Function Computing

Serverless Devs — это открытая платформа для разработчиков Serverless. Вам не нужно беспокоиться о базовых ресурсах. С помощью Serverless Devs вы можете использовать услуги и фреймворки Serverless по принципу «подключи и работай», а также участвовать в разработке компонентов и плагинов для повышения эффективности эксплуатации. Кроме того, вы можете более просто, быстро и эффективно разрабатывать, создавать, тестировать и развёртывать проекты, а также управлять проектами на протяжении всего жизненного цикла.

Github Документация

Установите Serverless Devs.

npm install @serverless-devs/s -g

Настройте Serverless Devs (на примере конфигурации с использованием ключа Alibaba Cloud).

Перейдите в каталог проекта deploy\aliyun_fc.

# Перейдите в каталог
cd deploy\aliyun_fc

# Введите команду и следуйте инструкциям для добавления ключа Alibaba Cloud
s config add

# Разверните ppocr
s deploy

Рисунок 7

После успешного выполнения вы получите распознаваемый адрес, например http://ppocr.ppocr.создать.cn-shenzhen.fc.devsapp.net/predict/ocr_system. Опыт применения

Рекомендуется посмотреть видео, затем скачать проект todolist-app и внести изменения.

https://github.com/devsapp/start-web-framework/tree/master/example/todolist-app

s cli registry login # авторизоваться один раз
s cli registry publish # опубликовать пакет
s cli registry list # просмотреть опубликованные пакеты на дочерней машине

s init PaddleOCR # протестировать приложение
s deploy # развернуть проект

Использование серверной модели

Измените файл dockerfile следующим образом:

RUN mkdir -p /PaddleOCR/inference/
ADD https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_infer.tar /PaddleOCR/inference/
RUN tar xf /PaddleOCR/inference/ch_ppocr_mobile_v2.0_det_infer.tar -C /PaddleOCR/inference/

ADD https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_infer.tar /PaddleOCR/inference/
RUN tar xf /PaddleOCR/inference/ch_ppocr_mobile_v2.0_cls_infer.tar -C /PaddleOCR/inference/

ADD https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_rec_infer.tar /PaddleOCR/inference/
RUN tar xf /PaddleOCR/inference/ch_ppocr_server_v2.0_rec_infer.tar -C /PaddleOCR/inference/

\PaddleOCR\deploy\hubserving\ocr_rec\params.py

    # cfg.rec_model_dir = "./inference/ch_ppocr_mobile_v2.0_rec_infer/"
    cfg.rec_model_dir = "./inference/ch_ppocr_server_v2.0_rec_infer/"

\PaddleOCR\deploy\hubserving\ocr_system\params.py

    # cfg.rec_model_dir = "./inference/ch_ppocr_mobile_v2.0_rec_infer/"
    cfg.rec_model_dir = "./inference/ch_ppocr_server_v2.0_rec_infer/"

Заключение

Развёртывание моделей глубокого обучения в архитектуре Serverless становится очень простым и обеспечивает бесконечную параллельную поддержку. Мы можем развернуть образы в различных сервисах Serverless и предоставить стабильные, надёжные и эластичные услуги по анализу данных.

Что касается создания образов, официальные образы Docker от PaddlePaddle имеют большой размер — 4 ГБ или 8 ГБ, что делает их непригодными для использования в Serverless.

Созданный образ имеет размер всего 564 МБ, что идеально подходит для развёртывания в архитектуре Serverless.

Благодарности

Спасибо за техническую поддержку от следующих компаний:

Рекомендованные книги

«Практика Serverless: от начала до продвинутого уровня» (https://item.jd.com/13366562.html).

5

Автор статьи

Много Лабмэн (Duolabmeng6) на GitHub (https://github.com/duolabmeng6).

При перепечатке статьи укажите источник. Спасибо!

Пожертвования

Если вы считаете, что статья была вам полезна, можете поддержать автора чашкой кофе.

swskm

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/duolabmeng666-paddlehub_ppocr.git
git@api.gitlife.ru:oschina-mirror/duolabmeng666-paddlehub_ppocr.git
oschina-mirror
duolabmeng666-paddlehub_ppocr
duolabmeng666-paddlehub_ppocr
master