基于paddleocr的批量图片缩放识别

说明

在进行ocr文字识别的时候,有时候我们需要使用批量测试的功能,但是有些图片会识别失败或者个别根本识别不出来,这时候我们可以通过对原图片进行缩放,提高图像的分辨率,然后再次识别,这样可以大大提高图片文字识别的精度。

示例代码

# -*- coding='utf-8' -*-
'''
功能:将要识别的目录中的图片进行缩放后,再次使用ocr模型批量识别,并统计识别不成功的数目
'''
import os
from paddleocr import PaddleOCR, draw_ocr
from PIL import Image
import cv2

def enlarge_images(input_folder, output_folder, scale_factor=2.0):
    # 检查输出文件夹是否存在,如果不存在则创建
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)
    
    # 遍历输入文件夹中的所有文件
    for filename in os.listdir(input_folder):
        # 构建完整的文件路径
        file_path = os.path.join(input_folder, filename)
        
        # 检查文件是否为图像文件(例如,jpg, png 格式)
        if file_path.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.tiff', '.gif')):
            # 读取图像
            image = cv2.imread(file_path)
            if image is None:
                print(f"无法读取图像文件: {file_path}")
                continue

            # 获取图像的原始尺寸
            height, width = image.shape[:2]
            #image = image[int(0.4*height):int(0.8*height),int(0.15*width):int(0.85*width)]
            # 计算放大后的尺寸
            new_width = int(width * scale_factor)
            new_height = int(height * scale_factor)
            dsize = (new_width, new_height)
            
            # 放大图像
            resized_image = cv2.resize(image, dsize, interpolation=cv2.INTER_LINEAR)
            
            # 构建输出文件路径
            output_file_path = os.path.join(output_folder, filename)
            
            # 保存放大的图像
            cv2.imwrite(output_file_path, resized_image)
            print(f"已保存放大的图像: {output_file_path}")

# 使用实例
input_folder = './images' # 输入文件夹路径
output_folder ='./imagesAfter'  # 输出文件夹路径
# 对图片进行缩放,可以设置缩放倍数,默认缩放倍数为2
enlarge_images(input_folder, output_folder, scale_factor=3.0)

# 初始化 PaddleOCR,使用英文和中文模型
ocr = PaddleOCR(use_angle_cls=True, lang='en') 

# 定义图片文件夹要识别的图片路径
image_folder = output_folder

# 获取文件夹中所有图片文件名
image_files = [f for f in os.listdir(image_folder) if os.path.isfile(os.path.join(image_folder, f))]
count = 0
# 遍历每张图片进行识别
for image_file in image_files:
    try:
        image_path = os.path.join(image_folder, image_file)
        print(image_path)
        # 进行OCR识别
        result = ocr.ocr(image_path, cls=True)
        print('识别结果为:',result )
        if result[0]==None:
            count = count+1
        # 打印识别结果
        for line in result:
            print(f"File: {image_file}")
            for res in line:
                print(res)

        # 可视化识别结果
        # 显示原图
        image = Image.open(image_path).convert('RGB')
        boxes = [elements[0] for elements in result[0]] 
        txts = [elements[1][0] for elements in result[0]]
        scores = [elements[1][1] for elements in result[0]]
        '''
        # 显示结果
        im_show = draw_ocr(image, boxes, txts, scores, font_path='./simfang.ttf')
        im_show = Image.fromarray(im_show)
        im_show.show()
        '''
        print(txts)
    except:
        pass
print('count的个数:',count)

结果:

相关推荐
图灵追慕者1 个月前
Error: Can not import paddle core while this file exists
bug·paddle·paddleocr
机构师2 个月前
<Python><paddle>基于python使用百度paddleocr实现车牌识别
python·opencv·paddle·paddleocr·pyqt5
TYUT_xiaoming3 个月前
PaddleOCR学习——PP-OCR系列
学习·ocr·paddleocr
QtHalcon4 个月前
PaddleOCR2.7+Qt5
开发语言·qt·paddle·paddleocr
胡斌附体6 个月前
ocr之opencv配合paddleocr提高识别率
java·opencv·webpack·ocr·dll·paddleocr
铁皮鸭子6 个月前
PaddleOCR 服务化部署(基于PaddleHub Serving)
机器学习·ocr·paddlepaddle·百度飞桨·表格识别·paddleocr
黯影行者1 年前
人工智能结合模板实现表格信息提取
人工智能·表格识别·paddleocr·关键信息提取
.NET骚操作1 年前
为.NET打开新大门:OpenVINO.NET开源项目全新发布
ai·openvino·paddleocr
发现你走远了1 年前
【Python】PaddleOCR文字识别国产之光 从安装到pycharm中测试 (保姆级图文)
python·pycharm·paddleocr·ocr文字识别