• 百度飞桨(PaddlePaddle) - PaddleHub OCR 文字识别简单使用


    百度飞桨(PaddlePaddle)安装
    OCR 文字检测(Differentiable Binarization --- DB)

    百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 预测部署简介与总览
    百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 Paddle Inference 模型推理(离线部署)
    百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 基于 Paddle Serving快速使用(服务化部署 - CentOS)
    百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 基于 Paddle Serving快速使用(服务化部署 - Docker)推荐

    OCR的技术路线

    image
    PaddleHub 预训练模型的网络结构是 DB + CRNN, 可微的二值化模块(Differentiable Binarization,简称DB)
    CRNN(Convolutional Recurrent Neural Network)即卷积递归神经网络, 是DCNN和RNN的组合

    DB(Differentiable Binarization)是一种基于分割的文本检测算法。将二值化阈值加入训练中学习,可以获得更准确的检测边界,从而简化后处理流程。DB算法最终在5个数据集上达到了state-of-art的效果和性能
    image

    CRNN(Convolutional Recurrent Neural Network)即卷积递归神经网络,是DCNN和RNN的组合,专门用于识别图像中的序列式对象。与CTC loss配合使用,进行文字识别,可以直接从文本词级或行级的标注中学习,不需要详细的字符级的标注

    image

    安装库

    Building wheel for opencv-python (pyproject.toml):https://www.cnblogs.com/vipsoft/p/17386638.html

    # 安装 PaddlePaddle
    python -m pip install paddlepaddle -i https://pypi.tuna.tsinghua.edu.cn/simple
    
    # 安装 PaddleHub Mac 电脑上终端会感觉卡死的状态,(Mac 在装opencv那个依赖,装了30分钟),可以添加   --verbose,查看进度
    pip install paddlehub -i https://pypi.tuna.tsinghua.edu.cn/simple  --verbose
    
    # 该Module依赖于第三方库shapely、pyclipper,使用该Module之前,请先安装shapely、pyclipper
    pip install shapely -i https://pypi.tuna.tsinghua.edu.cn/simple
    pip install pyclipper -i https://pypi.tuna.tsinghua.edu.cn/simple
    

    定义待预测数据

    将预测图片存放在一个文件中 picture.txt

    ./images/231242.jpg
    ./images/234730.jpg
    

    测试输出

    import matplotlib.pyplot as plt
    import matplotlib.image as mpimg
    
    # 将预测图片存放在一个文件中(picture.txt)
    with open('picture.txt', 'r') as f:
        test_img_path=[]
        for line in f:
            test_img_path.append(line.strip())
            # 显示图片
            img1 = mpimg.imread(line.strip())
            plt.figure(figsize=(10, 10))
            plt.imshow(img1)
            plt.axis('off')
            plt.show()
    
    print(test_img_path) # => ['images/231242.jpg', 'images/234730.jpg']
    

    image

    加载预训练模型

    PaddleHub提供了以下文字识别模型:

    移动端的超轻量模型:仅有8.1M,chinese_ocr_db_crnn_mobile

    服务器端的精度更高模型:识别精度更高,chinese_ocr_db_crnn_server。

    识别文字算法均采用CRNN(Convolutional Recurrent Neural Network)即卷积递归神经网络。其是DCNN和RNN的组合,专门用于识别图像中的序列式对象。与CTC loss配合使用,进行文字识别,可以直接从文本词级或行级的标注中学习,不需要详细的字符级的标注。该Module支持直接预测。 移动端与服务器端主要在于骨干网络的差异性,移动端采用MobileNetV3,服务器端采用ResNet50_vd

    import paddlehub as hub
    
    # 加载移动端预训练模型
    # ocr = hub.Module(name="chinese_ocr_db_crnn_mobile")
    
    # 服务端可以加载大模型,效果更好
    ocr = hub.Module(name="chinese_ocr_db_crnn_server")
    

    image

    预测

    PaddleHub对于支持一键预测的module,可以调用module的相应预测API,完成预测功能。
    module 'numpy' has no attribute 'int'.: 解方法见:https://www.cnblogs.com/vipsoft/p/17385169.html

    import paddlehub as hub
    import cv2
    
    # 加载移动端预训练模型
    ocr = hub.Module(name="chinese_ocr_db_crnn_mobile")
    
    # 服务端可以加载大模型,效果更好 -- 【个人电脑,内存不够用】
    # ocr = hub.Module(name="chinese_ocr_db_crnn_server")
    
    # 将预测图片存放在一个文件中(picture.txt)
    test_img_path = []
    with open('picture.txt', 'r') as f:
        for line in f:
            test_img_path.append(line.strip())
    print("预测图片 => ", test_img_path)
    
    # 读取测试文件夹test.txt中的照片路径
    np_images = [cv2.imread(image_path) for image_path in test_img_path]
    
    results = ocr.recognize_text(
        images=np_images,  # 图片数据,ndarray.shape 为 [H, W, C],BGR格式;
        use_gpu=False,  # 是否使用 GPU;若使用GPU,请先设置CUDA_VISIBLE_DEVICES环境变量
        output_dir='ocr_result',  # 图片的保存路径,默认设为 ocr_result;
        visualization=True,  # 是否将识别结果保存为图片文件;
        box_thresh=0.5,  # 检测文本框置信度的阈值;
        text_thresh=0.5)  # 识别中文文本置信度的阈值;
    
    for result in results:
        data = result['data']
        save_path = result['save_path']
        for infomation in data:
            print('text: ', infomation['text'], '\nconfidence: ', infomation['confidence'], '\ntext_box_position: ', infomation['text_box_position'])
    
    

    输出

    "D:\Program Files\Python38\python.exe" D:/OpenSource/PaddlePaddle/OCR/OCRTest.py
    预测图片 =>  ['./images/123.jpg']
    text:  中华人民共和国 
    confidence:  0.9990600347518921 
    text_box_position:  [[188, 37], [472, 32], [472, 65], [188, 70]]
    text:  居民身份证 
    confidence:  0.9996429681777954 
    text_box_position:  [[171, 96], [492, 96], [492, 140], [171, 140]]
    text:  签发机关 
    confidence:  0.9993374347686768 
    text_box_position:  [[140, 242], [217, 242], [217, 263], [140, 263]]
    text:  苏州市公安局工业园区分局 
    confidence:  0.9997307658195496 
    text_box_position:  [[233, 242], [473, 242], [473, 262], [233, 262]]
    text:  有效期限 
    
    ![image](https://img2023.cnblogs.com/blog/80824/202305/80824-20230509152736239-145300739.png)

    image

    image

    image

    百度飞桨:https://aistudio.baidu.com/aistudio/projectdetail/507159

  • 相关阅读:
    go-bindata - embed结合嵌入静态文件打包可执行二进制文件
    Scala系列-2、scala函数式编程
    Java 泛型
    计算机毕业设计SSM爱行无忧旅游票务管理系统【附源码数据库】
    在unity中如何利用Xcharts插件进行绘制散点图
    绿色债券数据集2016-2021(含交易代码、债券简称、发行规模&期限等多指标数据)
    多线程------实际篇
    Python日常小技巧(持续更新中)
    Eureka注册中心
    python+django+vue高校奖学金评定管理系统
  • 原文地址:https://www.cnblogs.com/vipsoft/p/17384874.html