Python实现avif图片转jpg格式并识别图片中的文字

本文涉及的产品
Web应用防火墙 3.0,每月20元额度 3个月
简介: 在做数据分析的时候有些数据是从图片上去获取的,这就需要去识别图片上的文字。Python有很多库可以很方便的实现OCR识别图片中的文字。这里介绍用EasyOCR库进行图片文字识别。easyocr是一个比较流行的库,支持超过80种语言,识别率高,速度也比较快。

在做数据分析的时候有些数据是从图片上去获取的,这就需要去识别图片上的文字。Python有很多库可以很方便的实现OCR识别图片中的文字。这里介绍用EasyOCR库进行图片文字识别。easyocr是一个比较流行的库,支持超过80种语言,识别率高,速度也比较快。

一、图片识别文字

1、导包

pip install easyocr

2、代码实现

import easyocr
# 用easyocr识别图片并提取文字
def easyocr_pic(pic_path):
    reader = easyocr.Reader(['ch_sim', 'en'])
    results = reader.readtext(pic_path)
    ocr_result_dict = {
   
   }
    result_list = []
    for result in results:
        result_list.append(result[1])
    ocr_result_dict['orc_reslut']=result_list
    return ocr_result_dict

if __name__ == '__main__':
    orc_result = easyocr_pic(r'waf.png')
    print(orc_result)

3、运行效果

图片OCR识别效果

可以看到图片中的中文“防火墙”和"Web应用防火墙"都正确识别出来了。

注意:文件名和文件路径都不能有中文,否则会报错。如:如果将waf.png改成web应用防火墙.png就会报如下的错误。
[WARN:0@11.296] global loadsave.cpp:248 cv::findDecoder imread_('web应用防火墙.png'): can't open/read file: check file path/integrity

在进行图片识别的时候发现如果是avif格式的也会报错。如从京东商品详情页下载的图片都是avif格式的,进行识别的时候就会报错。

在OCR识别报错

但是这个图片用看图软件是可以正常显示的。

用看图软件打开图片

用画图软件另存为png或jpg格式后可以用easyocr正常识别出图片中的文字。

在这里插入图片描述

注意:直接将.avif的后缀名直接改成.jpg虽然可以用看图软件可以打开,但是用easyocr识别同样会报错,所以我们需要用程序来实现将avif格式的文件转成jpg或png文件格式。

二、avif格式图片转jpg格式

用python来实现将avif格式的文件转成jpg也很简单,但也有些注意事项。

1、导包

pip install pillow-avif-plugin Pillow

2、代码实现

import pillow_avif  #注意一定要引入pillow_avif否则会抛异常'cannot identify image file 'XXX''
from PIL import Image
import os


# 将avif文件转成jpg文件
def convert_avif_to_jpg(input_path, output_dir):
    try:
        # 打开AVIF图像
        image = Image.open(input_path)

        # 获取输入路径的文件名及其所在目录
        file_name = os.path.basename(input_path)
        # 构建输出路径
        if not os.path.exists(output_dir):
            os.makedirs(output_dir)

        output_path = os.path.join(output_dir, f"{os.path.splitext(file_name)[0]}.jpg")
        # 保存为PNG格式
        image.save(output_path, "JPEG")
    except Exception as e:
        print(e)


if __name__ == '__main__':
    # 调用函数进行转换
    convert_avif_to_jpg(r'5e595ea90b71f7ae.jpg.avif', 'avif2jpg')

3、运行效果

在这里插入图片描述

可以看到正常将avif文件转成了jpg格式的文件。

4、注意事项

import pillow_avif #注意一定要引入pillow_avif否则会抛异常'cannot identify image file 'XXX''
虽然代码没有用到pillow_avif但是一定要显示的用import pillow_avif否则在运行的时候会抛异常'cannot identify image file 'XXX''

三、Python实现avif图片转jpg格式并识别文字全部代码

所有代码用easyocrUtil.py实现

import easyocr
import pillow_avif  #注意一定要引入pillow_avif否则会抛异常'cannot identify image file 'XXX''
from PIL import Image
import os


# 将avif文件转成jpg文件
def convert_avif_to_jpg(input_path, output_dir):
    try:
        # 打开AVIF图像
        image = Image.open(input_path)

        # 获取输入路径的文件名及其所在目录
        file_name = os.path.basename(input_path)
        # 构建输出路径
        if not os.path.exists(output_dir):
            os.makedirs(output_dir)

        output_path = os.path.join(output_dir, f"{os.path.splitext(file_name)[0]}.jpg")
        # 保存为PNG格式
        image.save(output_path, "JPEG")
    except Exception as e:
        print(e)


# 用easyocr识别图片并提取文字
def easyocr_pic(pic_path):
    reader = easyocr.Reader(['ch_sim', 'en'])
    results = reader.readtext(pic_path)
    ocr_result_dict = {
   
   }
    result_list = []
    for result in results:
        result_list.append(result[1])
    ocr_result_dict['orc_reslut']=result_list
    return ocr_result_dict


if __name__ == '__main__':
    # 调用函数进行转换
    convert_avif_to_jpg(r'5e595ea90b71f7ae.jpg.avif', 'avif2jpg')

    # 调用函数识别图片并提取文字
    orc_result = easyocr_pic(r'avif2jpg\5e595ea90b71f7ae.jpg.jpg')
    print(orc_result)

博客地址:http://xiejava.ishareread.com/

目录
相关文章
|
6天前
|
数据格式 Python
【Python】已解决:Excel无法打开文件test.xIsx“,因为文件格式或文件扩展名无效。请确定文件未损坏,并且文件扩展名与文件的格式匹配。
【Python】已解决:Excel无法打开文件test.xIsx“,因为文件格式或文件扩展名无效。请确定文件未损坏,并且文件扩展名与文件的格式匹配。
34 0
|
6天前
|
机器学习/深度学习 数据采集 算法
Python基于OpenCV和卷积神经网络CNN进行车牌号码识别项目实战
Python基于OpenCV和卷积神经网络CNN进行车牌号码识别项目实战
41 19
|
6天前
|
机器学习/深度学习 数据采集 监控
Python基于BP神经网络算法实现家用热水器用户行为分析与事件识别
Python基于BP神经网络算法实现家用热水器用户行为分析与事件识别
|
6天前
|
Python
Python模拟火焰文字效果:炫酷的火焰字动效
Python模拟火焰文字效果:炫酷的火焰字动效
13 1
|
11天前
|
语音技术 Python
语音识别,python字面量,注释,变量,python变量的格式是变量名 = 变量值,加减乘除的输入方式
语音识别,python字面量,注释,变量,python变量的格式是变量名 = 变量值,加减乘除的输入方式
|
1天前
|
API 开发工具 git
`black`是一个不受约束的Python代码格式化工具。它自动将Python代码格式化为PEP 8样式,但具有一些额外的规则,旨在使代码更加一致和易读。
`black`是一个不受约束的Python代码格式化工具。它自动将Python代码格式化为PEP 8样式,但具有一些额外的规则,旨在使代码更加一致和易读。
9 0
|
1天前
|
Unix Linux Shell
Sphinx是一个Python文档生成工具,它可以解析reStructuredText或Markdown格式的源代码注释,并生成多种输出格式,如HTML、LaTeX、PDF、ePub等。
Sphinx是一个Python文档生成工具,它可以解析reStructuredText或Markdown格式的源代码注释,并生成多种输出格式,如HTML、LaTeX、PDF、ePub等。
5 0
|
5天前
|
计算机视觉 Python
Python的三种方式显示图片
Python的三种方式显示图片
|
11天前
|
语音技术 数据安全/隐私保护 Python
语音识别---数据输入(input语句),布尔类型和比较运算符,if语句的基本格式,Python通过空格缩进来判断代码块的归属关系,我要买票吗讲解?if_elif_else
语音识别---数据输入(input语句),布尔类型和比较运算符,if语句的基本格式,Python通过空格缩进来判断代码块的归属关系,我要买票吗讲解?if_elif_else
|
6天前
|
安全 Python
告别低效编程!Python线程与进程并发技术详解,让你的代码飞起来!
【7月更文挑战第9天】Python并发编程提升效率:**理解并发与并行,线程借助`threading`模块处理IO密集型任务,受限于GIL;进程用`multiprocessing`实现并行,绕过GIL限制。示例展示线程和进程创建及同步。选择合适模型,注意线程安全,利用多核,优化性能,实现高效并发编程。
20 3