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

news2024/11/15 13:46:22

说明 

        在进行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)

结果:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2141838.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue学习记录之一(介绍及脚手架的使用)

一、背景知识介绍 1、构建工具介绍 Vite, Webpack,Rollup, Parce 构建工具优点缺点Vite- 快速启动,秒级热更新,更快的构建速度,更好的开发体验;- 支持 Vue3 和 ES modules 的原生特性,轻松实现按需加载。- 对于单页…

项目实现:云备份②(文件操作、Json等工具类的实现)

云备份 前言文件操作实用工具类设计文件属性的获取文件的读写操作文件压缩与解压缩的实现文件目录操作 Json 实用工具类设计编译优化 前言 如果有老铁不知道当前项目实现的功能是什么的话,可以先移步这篇文章内容: 云备份项目的介绍 其中介绍了云备份项…

【吊打面试官系列-MySQL面试题】简述在 MySQL 数据库中 MyISAM 和 InnoDB 的区别?

大家好,我是锋哥。今天分享关于【简述在 MySQL 数据库中 MyISAM 和 InnoDB 的区别?】面试题,希望对大家有帮助; 简述在 MySQL 数据库中 MyISAM 和 InnoDB 的区别? MyISAM: 不支持事务,但是每次查…

跳出大厂圈子——普通程序员如何开启逆袭之路

时间:2024年09月16日 作者:小蒋聊技术 邮箱:wei_wei10163.com 微信:wei_wei10 音频:喜马拉雅 大家好,欢迎来到“小蒋聊技术”!今天咱们聊点特别现实的事儿——普通程序员的出路。互联网时代…

化学实验室器具识别系统源码分享

化学实验室器具识别检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Comput…

android设置实现广告倒计时功能

文章目录 CountDownTimer基本使用增加基础BaseActivity增加固定活动 在Android中,CountDownTimer 是一个用于计时的类,它允许你在指定的时间段内执行某些操作。通常用于倒计时功能,例如显示一个倒计时进度条或者在倒计时结束后执行某个动作。…

采用qt做一个命令行终端

qt做一个类似系统命令行终端的工具,方便集成到自己的软件里使用,这样能保证软件的整体性,而且是真正的做到和系统命令行终端一样的交互方式,而不是单独搞个编辑框的方式输入命令(大部分博客都是做成这个样子&#xff0…

不善言辞的程序员适合做项目经理吗?

项目经理的角色需要承担多重任务,包括团队协调、资源调配、风险管理、沟通与汇报等。因此,很多人认为项目经理需要较强的沟通能力和外向性格。然而,不善言辞的程序员是否适合这一职位,实际上取决于多个因素。以下从不同角度进行分…

程序设计题(25-32)

第二十五题 题目 请编写函数fun,其功能是:在一个含有11个四位数的数组中,统计出这些数的奇数、偶数个数,然后计算出个数多的那些数的算数平均值并由函数返回,个数通过yy传回。 例如,若11个数据为:1101, 1202, 1303,…

AI+RPA 实战揭秘:DrissionPage 助力 CSDN 热榜数据抓取与 AI 结合

在前一篇文章《AIRPA:开启智能自动化新时代》 发布之后,今天我们将以实战的方式深入介绍数据分析中的RPA究竟是怎样抓取数据的,以及它与 AI 又是如何紧密结合的。首先,让我们来认识一个重要的工具包 ——DrissionPage。 一、Dris…

【例题】lanqiao301 实现基数排序

输入输出样例 输入 6 7 1 4 8 5 2输出 1 2 4 5 7 8解题思路 翻译:就是从个位到十位、……比较大小。 代码 nint(input()) alist(map(int,input().split())) a.sort() print( .join(map(str,a)))

Linux: network: delay and burst

最近遇到一个false-network的问题,抓到的网络包的特征是,有十几秒的延迟,然后来了一个burst。这个现象说明这个包肯定是缓存在了一个地方,但是具体是什么地方,就需要抓包确定。 这次的缓存的地方是虚拟机内部。由于一…

【刷题】Day5--数字在升序数组中出现的次数

Hi! 今日份刷题~ 数字在升序数组中出现的次数_牛客题霸_牛客网 我感觉题目简单,我的解答也很简单,二分法遗忘,有时间复习一下尝试新的解法。 /*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的…

轻松上手Cursor,体验丝滑编程

最近Cursor大火。 作为一名程序员,理应接触接触,了解了解。 好吧!这一了解,我直接用Cursor替换了用了好几年的vscode了。 下面我把体验Cursor的过程总结了一下。你看看。 Cursor是啥 Cursor是一款革命性的AI驱动代码编辑器&a…

rocky Linux 9.4系统配置zabbix监控MySQL主从复制状态与配置钉钉告警

MySQL主从复制原理: 1. 主从复制的基本概念 主服务器(Master):负责处理所有的写操作(INSERT、UPDATE、DELETE),并将这些操作记录到二进制日志(binary log)中。 从服务器…

深度揭秘:日志打印的艺术与实战技巧,让你的代码会说话!

🍑个人主页:Jupiter. 🚀 所属专栏:Linux从入门到进阶 欢迎大家点赞收藏评论😊 目录 🍁日志🍂日志分模块实现讲解🍃日志等级的实现🥥日志时间*时间的获取* 🌈文…

Nginx搭建直播服务器,并用rtmp,http-flv,hls三种模式拉流观看直播的流程

一、首先搭建直播服务器 环境widows,并且已经集成了 :nginx-http-flv-module模块 nginx.conf配置如下: worker_processes 1;#error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #error…

Vue3中集成高德地图并实现平移缩放功能

大家好,随着前端技术的不断发展,地图应用在我们的项目中越来越常见。本文将介绍如何在Vue3项目中集成高德地图,并通过简单的配置实现地图的平移和缩放功能。 实现步骤 1、申请高德地图密钥(Key)(已有key可…

Git使用详解:从安装到精通

前言 什么是Git Git是一个分布式版本控制工具,主要用于管理开发过程中的源代码文件(Java类、xml文件、html页面等),在软件开发过程中被广泛使用。 可以理解: git是一个管理源代码的工具,主要用于企业团队开…

openwrt wsdd模块介绍

wsdd简介 wsdd是一个实现Web服务发现主机守护进程的工具。这使得(如Samba)主机,像你的本地网络存储设备,能够被Windows这样的Web服务发现客户端找到。 目的 由于Windows不再支持NetBIOS发现,wsdd使用Web服务发现方法使…