首页 > 其他分享 >使用easyocr识别图片文字(本地图片和网络图片)

使用easyocr识别图片文字(本地图片和网络图片)

时间:2023-04-27 14:01:27浏览次数:41  
标签:img url bytes easyocr content file reader 识别 图片

from PIL import Image
import requests
from io import BytesIO
import easyocr
import numpy as np
from pathlib import Path


file_url = r'./img/1.jpg'   # 需识别的图片
file_url = r"****7b00ea.jpg"
split_symbol = ' '          # 默认空格为分隔符
row_space = 15              # 默认字符高度为15px,当识别出来的字符间距超过这个数值时会换行。

def make_reader():
    # 将模型加载到内存中。模型文件地址 C:\Users\用户\.EasyOCR\model
    reader = easyocr.Reader(['ch_sim', 'en'])
    return reader

def url_img_to_bytes(url):
    img = Image.open(BytesIO(requests.get(
        "url.jpg").content))
    # 剪裁出右下角
    #img = img.crop((586, 680, 800, 800))

    img_io_stream = BytesIO()
    img.save(img_io_stream, format='PNG')
    img_bytes = img_io_stream.getvalue()
    
    return img_bytes


def change_to_character(file_url, reader, split_symbol=' ', row_space=15, save_dir='.',local_img = True):
    if local_img:  #本地图片     
        with open(file_url, "rb") as img:
            img_b = img.read()
        result = reader.readtext(img_b, detail=0)
        #result = reader.readtext(img_b, detail=0)  # 只显示文字
    else: #网络图片
        img_bytes = url_img_to_bytes(file_url)
        result = reader.readtext(img_bytes)


    result.sort(key=lambda x: x[0][0][1])  # 按竖直方向,进行排序==>进行分行处理。

    # 按行进行分组
    content = []
    item = [result[0]]  # 首先放入第一个元素
    for i in result[1:]:
        if row_space >= i[0][0][1] - item[-1][0][0][1] >= 0:
            item.append(i)
        else:
            content.append(item)
            item = [i]
    content.append(item)

    filemane = Path(file_url).name.split('.')[0]
    with open(f'{save_dir}/{filemane}.txt', "w", encoding='utf8') as t:
        for i in content:                     # i 为每一行的内容
            i.sort(key=lambda x: x[0][0][0])  # 对每行的内容进行先后排序
            for r in i:
                # print(r)
                t.write(r[1] + split_symbol)
            t.write("\n")
    return content


if __name__ == "__main__":
    content = change_to_character(file_url,  make_reader(),local_img = False)

 

 

注意本地需要先把模型保存到:

将模型加载到内存中。模型文件地址 C:\Users\你的用户\.EasyOCR\model

标签:img,url,bytes,easyocr,content,file,reader,识别,图片
From: https://www.cnblogs.com/cupleo/p/17358710.html

相关文章

  • 我用这个代码识别简单的图片为什么识别不出来?
    今日鸡汤我家襄水曲,遥隔楚云端。大家好,我是皮皮。一、前言前几天在Python黄金交流群【。】问了一个Python图像处理的问题,下图是截图:输出的结果是空白:二、实现过程这里【走进未来】给了一个可行的代码,importddddocrocr=ddddocr.DdddOcr()withopen('1.png','rb')asf:img_b......
  • 图像识别的技术难点和突破,你掌握吗?
    图像识别是人工智能的一个重要分支,它涉及到计算机视觉、机器学习、深度学习等多个领域。图像识别的目标是让计算机能够像人类一样,对输入的图像进行理解和分析,从中提取出有用的信息。图像识别的技术难点和突破,你掌握吗?图像识别的技术难点主要有以下几个方面:-图像质量:图像可能存......
  • 前端生成二维码及把页面转为图片保存到本地
    前端生成二维码及把页面转为图片保存到本地Bayi·于2021-12-2317:08:37发布847收藏3文章标签:前端javascript生成二维码页面转图片vue版权以vue项目为例,其他类型项目其实也是一样的所需components:QRCodehtml2canvasnpminstallqrcodejs2--savenpm......
  • vue 前端生成二维码,并转换为图片
    vue前端生成二维码,并转换为图片~牧马~于2021-05-2715:08:03发布2760收藏7分类专栏:vue文章标签:vue生成二维码自动生成的二维码转图片版权这篇文章主要是分享下自己的收获,也是自己遇到的问题:前端如何自己生成二维码?前端如何将生成的二维码转成图片并展示?......
  • Java自定义生成证书图片
    1、引入依赖<!--cmyk格式图片转换--><dependency><groupId>org.sejda.imageio</groupId><artifactId>webp-imageio</artifactId><version>0.1.6</version></dependen......
  • laravel框架中上传图片,并在本地显示
    1//处理文件上传2if($request->hasFile('image')&&$request->file('image')->isValid()){3//对上传文件做必要处理4$filename=date('ymdHis').rand(100000,999999).'.'.$request->f......
  • 视频逐帧转图片记录
    1.PR直接把视频导入PR,截取想要提取图片的片段,保存,然后导出为JPEG等类型的图片格式。然后就可以导出为逐帧提取的多张图片了。如果觉得帧数太多、截取的图片太多,可以通过序列设置或者视频导出设置降低帧数。2.微商视频助手微商视频助手-微商、自媒体人的视频编辑软件这是......
  • m十字路口多功能控制交通系统,包括基于遗传算法优化的红绿灯时长模糊控制器和基于BP神
    1.算法仿真效果matlab2022a仿真结果如下:        2.算法涉及理论知识概要单十字路口:           其中第一级控制为两个并行模块:绿灯交通强度控制模块与红灯交通强度控制模块。绿灯交通强度控制模块的输入为绿灯相位的排队长度与入口流量,......
  • m十字路口多功能控制交通系统,包括基于遗传算法优化的红绿灯时长模糊控制器和基于BP神
    1.算法仿真效果matlab2022a仿真结果如下:2.算法涉及理论知识概要单十字路口:其中第一级控制为两个并行模块:绿灯交通强度控制模块与红灯交通强度控制模块。绿灯交通强度控制模块的输入为绿灯相位的排队长度与入口流量,输出绿灯相位的交通强度;红灯相位模块的输入为红灯相位的......
  • layui选择多张图片上传多图上传到服务器保存
    多图上传在一些特殊的需求中我们经常会遇到,其实多图上传的原理大家都有各自的见解。对于Layui多图上传和我之前所说的通过js获取文本框中的文件数组遍历提交的原理一样,只不过是Layui中的upload.render方法已经帮我们封装好了,我们只管调用即可,也就是说你选中了几张图片,那么将会向后......