OCR/GPU: PaddleServing部署流程记录(cuda10.1)

栏目:古籍资讯发布:2023-08-21浏览:1收藏

OCR/GPU: PaddleServing部署流程记录(cuda10.1),第1张

准备工作:

其中--gpus all 需要提前安装 nvidia-container-toolkit (即 nvidia-docker 的升级版)表示允许容器访问使用所有gpu(或指定gpu设备序列id,如--gpus 0或--gpus 0,1,2)

-e NVIDIA_DRIVER_CAPABILITIES=compute,utility -e NVIDIA_VISIBLE_DEVICES=all 等docker容器启动参数可能在部分场景下需要使用但本次部署未使用到

容器已经预安装python 35、37、38等常用版本,默认python3为35

// 或者获取服务端模型进行转换,(测试ch_ppocr_server_v20_rec和ch_ppocr_server_v20_det发现无效且返回错误码err_no:5)

获取用于测试的数据集(可选)

启动服务并将日志输出至logtxt(在同级目录下的/Pipelinexxxx/pipelinelog也记录有一部分启动运行的日志)

运行客户端访问服务测试

关于坐标,直接读取如下中的dt_boxes_list或dt_boxes_list[0]都可获得正常的坐标,但需要自己做格式处理(直接用str()函数处理示例结果得到的文本字符如dt_boxes_list将得到 [array([[[292, 298], [332, 298], [345, 848], [305, 848]], [[345, 298], [377, 298], [382, 660], [350, 660]]], dtype=int16)] ):

在尝试部署环境前未确认各版本对应关系就进行安装容易出问题,目前我使用PaddleOCR部署GPU的pdserving和hubserving识别环境均失败,异常为

通过各种命令查询版本未发现有误,除了我病急乱投医自己去直接pip37 install torch 的版本打印需求为cuda102(PaddleOCR环境没有这个包,且后来发现根据网文介绍还需要安装指定torch版本的基础上进行测试)

部分文章提到可能是paddle版本对不上,这个暂未尝试

2021/12/02

发现确实是paddle版本对不上,docker_hub上的镜像容器已经携带配套的paddle,但我按文档来一步步安装时,文档中安装paddle的步骤会把镜像容器中的版本卸载掉;

1 数据标注定义

数据标注是对未经处理的语音、、文本、视频等数据进行加工处理, 并转换为机器可识别信息的过程。原始数据一般通过数据采集获得, 随后的数据标注相当于对数据进行加工, 然后输送到人工智能算法和模型里完成调用。

2 为什么要做数据标注?

目前主流的机器学习方式是以有监督的深度学习方式为主,此种机器学习方式下对于标注数据有着强依赖性需求,未经过标注处理的原始数据多以非结构化数据为主,这些数据是不能被机器识别与学习的。只有经过标注处理后的数据,成为结构化数据才能被算法训练所使用的。

3 数据标注的主要类型

l 计算机视觉

包括矩形框标注、关键点标注、线段标注、语义分割、实例分割标注、ocr标注、分类、视频标注等。

l 语音工程

包括ASR语音转写、语音切割、语音清洗、情绪判定、声纹识别、音素标注、韵律标注、发音校对等。

l 自然语言理解

包括ocr转写、词性标注、命名实体标注、语句泛化、情感分析、句子编写、槽位提取、意图匹配、文本判断、文本匹配、文本信息抽取、文本清洗、机器翻译等。

l 自动驾驶点云

包括3D点云目标检测标注、3D点云语义分割标注、2D3D融合标注、点云连续帧标注等。

景联文科技提供完整的语音、图像、文本、视频的全领域数据处理能力。景联文科技官网

一般OCR套路是这样的

1先检测和提取Text region

2接着利用radon hough变换 等方法 进行文本校正。

3通过投影直方图分割出单行的文本的。

最后是对单行的OCR

对单行的OCR主要由两种思想

第一种是需要分割字符的。

分割字符的方法也比较多,用的最多的是基于投影直方图极值点作为候选分割点并使用分类器+beam search 搜索最佳分割点。

搜索到分割点之后对于单个字符,传统的就是特征工程+分类器。 一般流程是 灰度 -> 二值化->矫正图像 -> 提取特征(方法多种多样例如pca lbp 等等) ->分类器(分类器大致有SVM ANN KNN等等 )。

现在的 CNN(卷积神经网络)可以很大程度上免去特征工程。

第二种是无需分割字符的

还有一点就是端到端(end to end)的识别,但前提是你需要大量的标注好的数据集。 这种方法可以不分割图像直接以连续的输出字符序列。

对于短长度的可以使用mutli-label classification 。比如像车牌,验证码。 这里我试过一个车牌的多标签分类。 车牌识别中的不分割字符的端到端(End-to-End)识别

google做街景门牌号识别就是用的这种方法。

热门文章
    确认删除?
    回到顶部