精华内容
下载资源
问答
  • 【扫盲】EasyOCR训练

    2022-01-19 08:15:21
    【扫盲】EasyOCR训练 欢迎关注公众号:小鸡炖技术,后台回复:easyocr,获取本视频素材~~~

    【扫盲】EasyOCR训练

    欢迎关注公众号:小鸡炖技术,后台回复:easyocr,获取本视频素材~~~

    展开全文
  • python实现ocr的库—EASYOCR

    千次阅读 2021-12-07 13:05:23
    OCR全称:Optical Character ...EasyOCR:目前支持80多种语言,包括中文、日文、韩文及泰文等等。 项目地址: https://github.com/JaidedAI/EasyOCR 文档地址: https://www.jaided.ai/easyocr/documentation/教程地址: ...

    OCR全称:Optical Character Recognition,即光学字符识别。
    在这里插入图片描述

    EasyOCR:目前支持80多种语言,包括中文、日文、韩文及泰文等等。
    在这里插入图片描述

    项目地址:
    https://github.com/JaidedAI/EasyOCR
    文档地址:
    https://www.jaided.ai/easyocr/documentation/
    教程地址:
    https://www.jaided.ai/easyocr/tutorial/
    模型下载地址:
    https://www.jaided.ai/easyocr/modelhub/

    安装方法:pip install easyocr
    在这里插入图片描述

    注意:如果在Windows下安装,先安装 torch 和 torchvision。官网地址:https://pytorch.org
    如果只在CPU模式下运行,选择 CUDA =None。
    Pytorch安装:htt

    展开全文
  • EasyOCR安装与简要效果测试

    万次阅读 2020-07-30 17:55:33
    EasyOCR是一个用python编写的OCR三方库。git地址为:https://github.com/JaidedAI/EasyOCR。 由于笔者从事的是java开发,对python并不熟悉,所以实际上是从python开发环境安装开始的。 类似于jdk,python开发也...

    EasyOCR是一个用python编写的OCR三方库。git地址为:https://github.com/JaidedAI/EasyOCR

    由于笔者从事的是java开发,对python并不熟悉,所以实际上是从python开发环境安装开始的,如果读者对python比较熟悉,可以直接右上角。

    类似于JDK,python开发也依赖于python环境,而因为python各版本之间差异很大,很多时候不同组件依赖的是不同的python版本,甚至小版本之间也存在兼容性问题,所以网上推荐使用的是Anaconda环境管理软件。Anaconda可以隔离出多个python环境,比如可以创建一个python3.6的环境同时再创建一个python3.7的环境,而在使用时进行选择。

    安装地址:https://www.anaconda.com/products/individual

    由于我们是在64位window 7下进行安装,我们选用64-Bit Graphical Installer (466 MB)。安装完成后,打开Anaconda Navigater。

    默认的root环境里有1000多个类库,我们大多用不到,如果项目使用的是这个环境,那么用PyCharm打开的时候会加载很久。所以我们还是新建一个环境,命名为easyocr,使用pyhton3.7。

    Note 1: for Windows, please install torch and torchvision first by following the official instruction here https://pytorch.org. On pytorch website, be sure to select the right CUDA version you have. If you intend to run on CPU mode only, select CUDA = None.

    在EasyOCR官网的git上我们可以看到上述说明,因为我们是windows环境,我们需要首先安装torch

    笔者一开始是用pip安装的,但是总是安装失败,后来发现可以用这个搜索找到,勾选后安装,由于资源较大,又受到墙的限制,下载时间很长(大概一个多小时),需要耐心等待

    安装完以后,点击绿色三角,选择Open Terminal打开命令行,该命令行即使用的是easyocr这个python环境

    pip install easyocr

    然后我们根据git的说明安装easyocr

    虽然用记事本也能写python,但是习惯java后,python的语法实在是难以接受,所以一个好的IDE可以避免诸如少一个空格导致程序无法运行的麻烦,这边还是推荐使用JetBrain的PyCharm,就是IDEA的Python版。

    就像配置JDK一样,python需要配置解释程序(Interperter)。

    像上图一样配置好路径,点击ok。

    这样我们就能在已有的解释程序中选择了。

    import easyocr
    reader = easyocr.Reader(['ch_sim', 'en'])
    result = reader.readtext('d:/test2.png')
    print(result)

    代码非常简单,我们一般识别中文与英文,所以是ch_sim和en。值得注意的是,等于号(=)两边要留空格,逗号(,)后面也要留空格,这对于java程序员来说有点匪夷所思,好在PyCharm有丰富的提示。

    接下去我们测试一下这个类库的效果

    笔者的硬件配置 CPU:i3 双核 ;内存 8G;独立显卡 无

    测试用图片是pdf转换为png的图片,像素为1654x2339

    结果直接死机了,可见这个类库非常吃硬件资源,相比java的Tesseract-OCR可以说是天差地别,当然python这种解释性语言性能低下可能占了很大一部分原因,据说有人测试同样的代码java性能比python高两个数量级

    我只能尝试裁切图片,减小图片的大小,这次是1255x247

    在CPU风扇呼啸2分钟以后,运行出如下结果

    [([[384.8713347040338, 53.16253799371492], [437.70896734843177, 62.502147801594866], [431.1286652959662, 94.83746200628508], [378.29103265156823, 86.49785219840513]], 'buy', 0.9799087047576904), ([[432, 54], [927, 54], [927, 94], [432, 94]], 'true love, true friendship and good health.', 0.11305739730596542), ([[52, 58], [382, 58], [382, 90], [52, 90]], '17. It is true that Ioney can', 0.03037017211318016), ([[946.9820268028815, 100.13170185094941], [1029.8601529368057, 110.95156339987997], [1023.0179731971185, 145.8682981490506], [941.1398470631945, 135.04843660012003]], 'happy.', 0.4561459720134735), ([[396.9011154884105, 100.1539042094367], [459.74278914557516, 108.58878442052084], [454.0988845115895, 142.84609579056328], [391.25721085442484, 134.41121557947915]], 'long', 0.9857617020606995), ([[615, 101], [714, 101], [714, 146], [615, 146]], 'enough', 0.9845817685127258), ([[52, 104], [398, 104], [398, 134], [52, 134]], '18. A lot ofmillionaires have', 0.23501794040203094), ([[456, 104], [616, 104], [616, 132], [456, 132]], 'lives because', 0.4965916574001312), ([[710, 104], [946, 104], [946, 137], [710, 137]], 'Ioney Iakes them', 0.24719364941120148), ([[49, 147], [1037, 147], [1037, 188], [49, 188]], 'I9. Money may bring trouble to people when they believe money means everything.', 0.011776169762015343), ([[49, 196], [1003, 196], [1003, 235], [49, 235]], '20. People need to have friends to talk with and to ask for help from time to time.', 0.008673712611198425)]

    我们根据坐标整理一下顺序

    17. It is true that Ioney can buy true love, true friendship and good health.

    18. A lot ofmillionaires have long lives because enough Ioney Iakes them happy.

    I9. Money may bring trouble to people when they believe money means everything.

    20. People need to have friends to talk with and to ask for help from time to time.

    错误的地方已经用红色标出了,整体正确率还是比较高的,只不过不知道为什么前两句拆的这么散

    然后是中文的测试

    运行结果为

    [([[44, 0], [641, 0], [641, 28], [44, 28]], '0你是不是也有过这样的经历:白天学习的数学公式和推导过程,', 0.2881079316139221), ([[654, 2], [814, 2], [814, 28], [654, 28]], '晚上出现在梦中;', 0.9775317907333374), ([[6, 32], [200, 32], [200, 58], [6, 58]], '白夭练习过英语对话,', 0.5491944551467896), ([[210, 32], [826, 32], [826, 60], [210, 60]], "梦中你就可以非常流利地和外国人交谈'通常我们会称这种现象", 0.35171982645988464), ([[778, 62], [826, 62], [826, 90], [778, 90]], '做梦', 0.9951374530792236), ([[4, 64], [250, 64], [250, 90], [4, 90]], '为^日有所思,夜有所梦"', 0.7436116337776184), ([[274, 64], [768, 64], [768, 90], [274, 90]], '最近,科学家对这种现象做了进一步研究6结果发现,', 0.6338546276092529), ([[4, 94], [390, 94], [390, 122], [4, 122]], '真的可以帮助我们学习和记忆新学的知识,', 0.9657901525497437), ([[402, 94], [648, 94], [648, 122], [402, 122]], '梦中的你的确是在学习的6', 0.47411224246025085)]

    整理后为

    0你是不是也有过这样的经历:白天学习的数学公式和推导过程,晚上出现在梦中;白夭练习过英语对话,梦中你就可以非常流利地和外国人交谈'通常我们会称这种现象为^日有所思,夜有所梦最近,科学家对这种现象做了进一步研究6结果发现,做梦真的可以帮助我们学习和记忆新学的知识,梦中的你的确是在学习的6

    文字的识别还是非常准确的,但是标点符号大部分都不对,因为官网示例的都是告示板,一般是不会有标点符号的,这方面的缺陷也可以理解

    最后我们尝试一下古文的识别

    运行结果为

    [([[67, 4], [263, 4], [263, 29], [67, 29]], '不修德礼而专权骄恣', 0.7633501887321472), ([[277, 4], [369, 4], [369, 29], [277, 29]], '危亡之祸', 0.9936830997467041), ([[384, 4], [668, 4], [668, 32], [384, 32]], '可翘足而待;愿明府一心王室,', 0.8909436464309692), ([[678, 4], [838, 4], [838, 30], [678, 30]], '勿与交通6"太守', 0.35901787877082825), ([[6, 6], [54, 6], [54, 30], [6, 30]], '之亲', 0.9937400221824646), ([[6, 32], [76, 32], [76, 58], [6, 58]], '固遣之,', 0.5406157970428467), ([[88, 32], [180, 32], [180, 58], [88, 58]], '邰不能止', 0.9094278812408447), ([[192, 32], [578, 32], [578, 58], [192, 58]], '请求自行,许之6邰遂所在迟留以观其变', 0.35050278902053833), ([[592, 32], [700, 32], [700, 58], [592, 58]], '行至扶风0,', 0.6177576780319214), ([[712, 32], [810, 32], [810, 58], [712, 58]], '而宪就国6', 0.7293225526809692), ([[5, 56], [182, 56], [182, 86], [5, 86]], '凡交通者皆坐免官,', 0.9450605511665344), ([[194, 60], [370, 60], [370, 84], [194, 84]], '汉中太守独不与焉', 0.974287748336792)]

    整理后为

    之亲不修德礼而专权骄恣危亡之祸可翘足而待;愿明府一心王室,勿与交通6"太守固遣之邰不能止请求自行,许之6邰遂所在迟留以观其变行至扶风0而宪就国6凡交通者皆坐免官,汉中太守独不与焉

    同样,文字的识别还是非常准确的,但是标点符号与特殊符号基本无法识别

    总结:

    EasyOCR对于文字(无论英文还是中文)的识别准确率很高,但是对于标点符号与特殊符号的识别准确率很低。此外,该三方库对硬件设备的要求很高,官方推荐支持CUDA的独立显卡可以提高运行效率。随着图片的增大,运行时间呈指数增长。

    展开全文
  • python easyOCR 使用案例

    千次阅读 2021-01-29 23:59:09
    import easyocr file_url = r'识别图片.jpg' # 需识别的图片 split_symbol = ' ' # 默认空格为分隔符 row_space = 15 # 默认字符高度为15px,当识别出来的字符间距超过这个数值时会换行。 def make_reader(): #...

    利用python和easyOCR做的一个 图片文字提取工具,
    先上效果图:
    在这里插入图片描述

    这是已经封装好,可直接使用的程序。

    下面是图文提取的代码

    文件命名为 character.py

    from pathlib import Path
    import easyocr
    
    
    file_url = r'识别图片.jpg'    # 需识别的图片
    split_symbol = ' '          # 默认空格为分隔符
    row_space = 15              # 默认字符高度为15px,当识别出来的字符间距超过这个数值时会换行。
    
    
    def make_reader():
        # 将模型加载到内存中。模型文件地址 C:\Users\用户\.EasyOCR\model
        reader = easyocr.Reader(['ch_sim', 'en'])
        return reader
    
    
    def change_to_character(file_url, reader, split_symbol=' ', row_space=15, save_dir='.'):
        with open(file_url, "rb") as img:
            img_b = img.read()
        result = reader.readtext(img_b)
    
        result.sort(key=lambda x: x[0][0][1])  # 按竖直方向,进行排序==>进行分行处理。
        # for i in result:
        #     print(i)
        # print('='*100)
    
        # 按行进行分组
        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__":
        change_to_character(file_url,  make_reader())
    

    下面是 UI 界面的代码

    import tkinter as tk
    from tkinter import filedialog
    from PIL import Image, ImageTk
    from pathlib import Path
    from character import change_to_character, make_reader
    from threading import Thread
    import time
    
    # class Showing(tk.Frame):
    #     def __init__(self, master=None):
    #         super().__init__(master)
    #         self.master = master
    #         self.pack()
    #         # self.img = tk.PhotoImage(file=r"C:\Users\yanhy\Desktop\捕获22.PNG")
    #         self.create_widgets()
    #
    #     def create_widgets(self):
    #         self.img = tk.PhotoImage(file=r"C:\Users\yanhy\Desktop\捕获22.PNG")
    #         self.img_wig = tk.Label(self, image=self.img)
    #         self.img_wig.pack()
    
    
    # 最外层窗口设置
    root = tk.Tk()
    root.title('图片文字识别程序                    联系:410889472@qq.com')
    window_x = root.winfo_screenwidth()
    window_y = root.winfo_screenheight()
    WIDTH = 1200
    HEIGHT = 750
    x = (window_x - WIDTH) / 2  # 水平居中
    y = (window_y - HEIGHT) / 3  # 垂直偏上
    root.geometry(f'{WIDTH}x{HEIGHT}+{int(x)}+{int(y)}')
    root.resizable(width=False, height=False)
    
    # 》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
    Row_space = 15
    File_url_list = []
    Img_type = ['.jpg', '.jpeg', '.png', '.gif']
    Split_symbol = ' '                               # 间隔符。
    Save_dir = Path.cwd().joinpath('img_to_word')
    if Save_dir.is_dir():
        pass
    else:
        Path.mkdir(Save_dir)
    
    # 》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
    
    def test():
        print(f'{Row_space=}')
    
    
    def choose_file():       # 获取导入的图片路径地址
        global show_img, img_label, text, File_url_list
        filenames = filedialog.askopenfilenames()
        if len(filenames) == 1 and len(File_url_list) == 0:       # 单张图片导入,显示图片
            if Path(filenames[0]).suffix.lower() in Img_type:     # 判断是否图片类型
                File_url_list = list(filenames)
                try:
                    if text.winfo_exists():
                        text.destroy()
                except NameError as e:
                    print(f'choose_file提示:张图片导入错误>>> {e}')
                try:
                    if img_label.winfo_exists():
                        img_label.destroy()
                except NameError as e:
                    print(f'choose_file提示:单张图片导入错误>>> {e}')
                img = Image.open(File_url_list[0]).resize((560, 660))
                # print(img.size)
                show_img = ImageTk.PhotoImage(image=img)
                img_label = tk.Label(f_left, image=show_img)
                img_label.pack()
            else:
                print('导入的是非图像格式')
        else:                                     # 多张图片导入,显示列表。
            try:
                if img_label.winfo_exists():
                    img_label.destroy()
            except NameError as e:
                print(f'提示:多张图片导入错误>>> {e}')
            try:
                if text.winfo_exists():
                    text.destroy()
            except NameError as e:
                print(f'提示:多张图片导入错误>>> {e}')
            text = tk.Text(f_left, spacing1=5, spacing3=5)
            text.pack(fill='both', expand=True)
    
    
            for i in filenames:
                if Path(i).suffix.lower() in Img_type:
                    File_url_list.append(i)
                else:
                    pass
            File_url_list = set(File_url_list)
            for i in list(File_url_list):       # 把文件写入到文本框中
                text.insert('end', str(list(File_url_list).index(i)+1) + ": " + i + "\n")
            File_url_list = list(File_url_list)
        print(f'{File_url_list=}')
    
    
    def choose_dir():
        global show_img, img_label, text, File_url_list
        directoryname = filedialog.askdirectory()
        print(f'{directoryname=}')
        try:
            if img_label.winfo_exists():
                img_label.destroy()
        except NameError as e:
            print(f'choose_dir提示:多张图片导入错误>>> {e}')
        try:
            if text.winfo_exists():
                text.destroy()
        except NameError as e:
            print(f'choose_dir提示:多张图片导入错误>>> {e}')
        text = tk.Text(f_left, spacing1=5, spacing3=5)
        text.pack(fill='both', expand=True)
    
        for i in Path(directoryname).iterdir():       # 获取文件夹下的所有文件。
            if Path(i).suffix.lower() in Img_type:
                File_url_list.append(i.as_posix())    # as_posix() 把Path型转为字符串。
            else:
                pass
        File_url_list = set(File_url_list)
        for i in list(File_url_list):  # 把文件写入到文本框中
            text.insert('end', str(list(File_url_list).index(i) + 1) + ": " + i + "\n")
        File_url_list = list(File_url_list)
        print(f'{File_url_list=}')
    
    
    def clear_file_list():
        global File_url_list
        File_url_list.clear()
        try:
            if img_label.winfo_exists():
                img_label.destroy()
        except NameError as e:
            print(f'clear_file_list提示:清空错误>>> {e}')
        try:
            if text.winfo_exists():
                text.destroy()
        except NameError as e:
            print(f'clear_file_list提示:清空错误错误>>> {e}')
    
    
    def get_entry1():       # 设置换行间距变量值
        global Row_space
        num = entry1.get()
        if num.isdigit():
            if int(num) > 0:
                Row_space = int(num)
        else:
            entry1.delete(0, "end")
            entry1.insert(0, 15)
            Row_space = 15
    
    
    def set_split_symbol():
        global Split_symbol
        Split_symbol = entry2.get()
        print(f'{Split_symbol=}')
    
    
    def do_change():
        if File_url_list:
            v.set("文字提取中,请稍后……")
            button_do.config(state='disable')        # 使按钮不可用。
            # ========================================
            def main():
                reader = make_reader()
                for i in File_url_list:
                    content = change_to_character(i, reader, row_space=Row_space, split_symbol=Split_symbol, save_dir=Save_dir)
                    read_text.delete(1.0, "end")
                    for c in content:  # i 为每一行的内容
                        c.sort(key=lambda x: x[0][0][0])  # 对每行的内容进行先后排序
                        for r in c:
                            # print(r)
                            read_text.insert('end', r[1] + Split_symbol)
                        read_text.insert('end', "\n")
                v.set("文字提取结束。")
                button_do.config(state='normal')     # 恢复按钮可用。
            # ========================================
            t = Thread(target=main, daemon=True)
            t.start()
    
        else:
            v.set("请先选择图片!")
    
    
    def join_file():
        v.set("文件开始合并。")
        filst = list(Path(Save_dir).iterdir())      # 获取文件夹中所有的文本文件。
        with open(f'{Save_dir}/合并文件.txt', 'w', encoding='utf8') as join_f:
            for f in filst:
                with open(f, 'r', encoding='utf8') as r_f:
                    read_con = r_f.read()
                join_f.write(f.name+'\n'+read_con + '\n\n')
        time.sleep(1)
        v.set("文件合并完毕。")
    
    
    # 》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
    f_top = tk.Frame(root, height=65, width=1100, bd=1, relief="flat")  # "sunken" "raised","groove" 或 "ridge"
    f_top.pack_propagate(False)  # 如果不加这个参数,当Frame框架中加入部件时,会自动变成底层窗口,自身的特性会消失。
    f_top.pack(side='top', pady=5)
    
    f_left = tk.Frame(root, height=660, width=560, bd=1, relief="groove")
    f_left.pack_propagate(False)
    f_left.pack(side='left', padx=20)
    
    f_right = tk.Frame(root, height=660, width=560, bd=1, relief="groove")
    f_right.pack_propagate(False)
    f_right.pack(side='left', padx=20)
    
    read_text = tk.Text(f_right, spacing1=5, spacing3=5)
    read_text.pack(fill='both', expand=True)
    
    
    # 》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
    button_choose_file = tk.Button(f_top, text='选择图片', command=choose_file)
    button_choose_file.pack(side='left', padx=10, ipadx=5)
    
    button_choose_file = tk.Button(f_top, text='选择文件夹', command=choose_dir)
    button_choose_file.pack(side='left', padx=10, ipadx=5)
    
    button_clear_file = tk.Button(f_top, text='清空选择', bg='#FFEF2F', command=clear_file_list)
    button_clear_file.pack(side='left', padx=5, ipadx=5)
    
    # 》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
    f_row_content = tk.Frame(f_top, height=50, width=300, bg="#D1D4D0", relief="flat")  # "sunken" "raised","groove" 或 "ridge"
    f_row_content.pack_propagate(False)
    f_row_content.pack(side='left', padx=15)
    
    button_set_row_height = tk.Button(f_row_content, text='设置行间距', command=get_entry1)
    button_set_row_height.pack(side='left', ipadx=3, padx=3)
    
    entry1 = tk.Entry(f_row_content, font=('', 18), width=3)
    entry1.insert(0, 15)
    entry1.pack(padx=5, side='left')
    
    tk.Label(f_row_content, justify='left', text='填入像素值,设置换行间距。\n默认15个像素。').pack(side='left')
    
    # 》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
    f_split = tk.Frame(f_top, height=50, width=215, bg="#D1D4D0", relief="flat")  # "sunken" "raised","groove" 或 "ridge"
    f_split.pack_propagate(False)
    f_split.pack(side='left', padx=4)
    
    button_split = tk.Button(f_split, text='设置分隔符', command=set_split_symbol)
    button_split.pack(side='left', ipadx=3, padx=3)
    
    entry2 = tk.Entry(f_split, font=('', 18), width=3)
    entry2.insert(0, ' ')
    entry2.pack(padx=5, side='left')
    
    tk.Label(f_split, justify='left', text='默认一个空格').pack(side='left')
    
    # 《《《《《《《《《《《《《《《《《《《《《《  提取 合并文件  》》》》》》》》》》》》》》》》》》》》》》》》》
    button_do = tk.Button(f_top, text='开始提取', bg='#4AB0FF', command=do_change)
    button_do.pack(side='left', padx=10, ipadx=2)
    
    button_join = tk.Button(f_top, text='合并文件', command=join_file)
    button_join.pack(side='left', padx=5, ipadx=2)
    
    v = tk.StringVar()
    v.set('info……')
    tk.Label(f_top, bg='#2EBD1D', justify='left', textvariable=v).pack(side='left')
    
    # 《《《《《《《《《《《《《《《《《《《《《《  右键菜单  》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
    def copy_text():
        read_text.event_generate("<<Copy>>")
    
    menubar = tk.Menu(tearoff=False)
    # root['menu'] = menubar      # 没有把这个 菜单部件 加入到 root 窗口的菜单属性中,所以它不会在root窗口的顶部显示。
    menubar.add_command(label='复制', command=copy_text)
    
    def show_menu(event):
        """用 菜单部件 的 post 方法展示菜单"""
        menubar.post(event.x_root, event.y_root)
    
    read_text.bind('<Button-3>', show_menu)
    # 》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
    
    root.mainloop()
    
    
    展开全文
  • 基于python的OCR图像识别,EasyOCR图像处理文字识别
  • EasyDL OCR 基于百度丰富的算法模型训练实践,提供全流程自训练平台工具,极大提升模型训练效率,满足个性化表单、票据的 OCR 识别需求。同时还将介绍百度智能云 OCR 产品在业界的典型应用实例,为大家展现立体生动...
  • python的文字识别库easyocr所需中文识别的模型
  • OCR技术(大批量生成文字训练集)

    千次阅读 2019-02-07 22:06:07
    如果是想训练一个手写体识别的模型,用一些前人收集好的手写文字集就好了,比如中科院的这些数据集。但是如果我们只是想要训练一个专门用于识别印刷汉字的模型,那么我们就需要各种印刷字体的训练集,那怎么获取呢?...
  • 公开训练测试数据集合 网址 汇总       2.1 ICDAR(International Conference on Document Analysis and Recognition) 2011 - About Robust Reading Competition  Reading Text in ...
  • easyocr开源ocr使用心得

    千次阅读 2021-03-04 17:42:26
    reader = easyocr.Reader(['ch_sim','en'], gpu = False) reader.readtext('chi.jpg', detail = 0) 1.在图片对应目录下shift+右键打开windows PowerShell; 2.输入jupyter notebook 在浏览器打开notebook 打不开可...
  • 好用的OCR付费软件,迅捷OCR,1月1000次的百度OCR免费,好用的EasyOCR免费,首次使用的测试操作记录。
  • EasyOcr git地址 EasyOCR是一款用python语言编写的OCR第三方库,同时支持GPU和CPU,目前已经支持超过70种语言. 安装(CPU) 注意: easyocr 不支持32位的python(经历了数个小时的血泪教训:python3.8-32) 先下载...
  • 近年来,OCR 的识别能力不断突破,逐渐在更加复杂的数字化场景发挥...21年全新上线的百度 EasyDL OCR 自训练平台,提供了高精度文字识别模型生产平台,一站式满足企业多场景、高精度的 OCR 定制化需求,可广泛应用于快
  • easyocr 1.4.1 python 3.9 windows

    千次阅读 2021-11-23 09:24:53
    python easyocr
  • Text RendererGenerate text images for training deep learning OCR model (e.g. CRNN). Support both latin and non-latin text.SetupUbuntu 16.04python 3.5+Install dependencies:pip3 install -r requirements....
  • 首先我先讲下为什么要基于官方提供的训练模型进行训练: (1)基于基础算法模型库的训练模型,需要自己基于很多数据进行训练才能得到一个好的效果,如果数据量少了就会出现预测效果不好的情况。 (2)PaddleOCR...
  • 关于easyocr、paddleocr、cnocr之比较

    千次阅读 2021-01-25 10:00:00
    cnocr是用来做中文OCR的Python 3包。cnocr自带了训练好的识别模型,安装后即可直接使用。cnocr主要针对的是排版简单的印刷体文字图片,如截图图片,扫描件等。cnocr目前...
  • 〇、前情提要 有位学长给我指路了这个...【机器学习】训练好的模型的保存与恢复----joblib模块 https://blog.csdn.net/xiaohutong1991/article/details/108469763 机器学习教程Python - 5:使用Joblib和Pickle保存模型
  • 10月29日,百度智能云线上线下同期举办了 TechDay OCR 技术创新沙龙,深度分享 OCR 产品矩阵、功能、应用案例等最新进展,并重磅全新发布 EasyDL OCR 自训练平台。泰康保险集团、北京融汇金信等企业伙伴在现场...
  • 1、介绍 之前介绍过图片文本OCR识别,文章介绍了一个Python包pytesseract...今天介绍一个用于文本识别的新的Python包:EasyOCR,这个包是基于训练好的Deep Learning模型开发的,模型包含文本检测、文本识别功能; Easy
  • 这一部分主要介绍,如何使用自己的数据库去训练PaddleOCR的文本检测模型。 官方教程https://github.com/PaddlePaddle/PaddleOCR/blob/develop/doc/doc_ch/detection.md 一、准备训练数据 首先你需要有自己的数据,...
  • VGG16等keras预训练权重文件的下载:https://github.com/fchollet/deep-learning-models/releases/ 本地存放目录:  Linux下是放在“~/.keras/models/”中  Win下则放在Python的“settings/.keras/models/”中 ...
  • 3.需要修改num_workers参数,在github上看到有老哥说,将这个参数改到1就不会出问题,但是训练速度会变慢,就个人而言,我发现是,修改这个参数无明显现象,有待考证。该参数路径为 ./configs/det/的reader函数,也...
  • Hi!大家好呀!我是你们努力的喵哥!OCR(光学字符识别)是我们日常很常用的人工智能技术。我们总会有从图片中提取文字的需求...EasyOCR 并不是可以直接使用的软件(虽然它有一个演示网站),而是一个超级易于使用的 OCR...
  • 从功能完备来看: 预训练模型大小:easyOCR目前暂无超轻量模型,chineseocr_lite最新的模型是4.7M左右,而PaddleOCR提供的3.5M无疑是目前业界已知最轻量的。 PIP安装:目前仅PaddleOCR和easyOCR支持。 自定义训练:...
  • 前言 这篇文章非常全面细致地介绍了...在本文中,我们试图更好地理解批量大小对训练神经网络的影响。具体而言,我们将涵盖以下内容: 什么是Batch Size? 为什么Batch Size很重要? 小批量和大批量如何凭
  • 因为网络问题,自动下载总是失败报错,所以只好去网上手动下载训练好的模型。 以下是一些模型的下载地址: text detection model (CRAFT) chinese (traditional) model chinese (simplified) model japanese model ...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 153
精华内容 61
关键字:

easyocr训练

友情链接: fx vortex.rar