基于Tesseract的OCR识别(Python实现)

基于Tesseract的OCR识别

功能描述

通过读取摄像头采集的图像,进行OCR(光学字符识别),包括中文,英文,数字等

模块功能

import tkinter as tk # UI模块
from tkinter import ttk # UI模块
import cv2 # 图像处理模块
from PIL import ImageTk,Image # 图像处理模块
import pytesseract # OCR识别模块
import datetime # 时间模块

设计思路

字符识别
静态识别
图片路径
动态识别
打开相机
图像采集
关闭相机
OCR识别
结果输出

代码实现

class Myapp(object):
    def __init__(self):
        self.video_flag = 0
        self.shot_flag = 0
        self.re_img = None
        self.cap = cv2.VideoCapture(0)
        self.root = tk.Tk()
        self.root.title('基于Tesseract的OCR识别')
        self.func_frame = ttk.LabelFrame(self.root, text='功能选择')
        self.bt_style = ttk.Style()
        self.bt_style.configure('bt_style',font=('黑体',20))
        self.bt_test  = tk.Button(self.func_frame, text='自检',font=('仿宋', 15), command=self.video_init)
        self.bt_start = tk.Button(self.func_frame, text='打开',font=('仿宋', 15), command=self.open)
        self.bt_shot  = tk.Button(self.func_frame, text='拍照',font=('仿宋', 15), command = self.shot)
        self.bt_recog = tk.Button(self.func_frame, text='识别',font=('仿宋', 15), command=self.recog)
        self.bt_stop  = tk.Button(self.func_frame, text='关闭',font=('仿宋', 15), command=self.stop)
        self.bt_test.  grid(row=0, column=0,padx=5)
        self.bt_start .grid(row=0, column=1,padx=5)
        self.bt_shot  .grid(row=0, column=2,padx=5)
        self.bt_recog .grid(row=0, column=3,padx=5)
        self.bt_stop  .grid(row=0, column=4,padx=5)
        self.func_frame.pack(pady=4)
        self.show_frame = ttk.LabelFrame(self.root, text='视图区')
        self.lb_video = tk.Label(self.show_frame, text='视频显示', bg='gray',compound=tk.CENTER, fg='red', font=('仿宋',20))
        self.lb_image = tk.Label(self.show_frame, text='图片抓取', bg='gray',compound=tk.CENTER, fg='red', font=('仿宋',20))
        self.lb_video.grid(row=0, column=0,padx=10)
        # self.lb_image.grid(row=0, column=1,padx=2)
        self.info_frame = tk.Frame(self.root)
        self.recog_frame = ttk.LabelFrame(self.info_frame,text='识别内容')
        self.scr_recog= tk.Scrollbar(self.recog_frame)
        self.tt_recog = tk.Text(self.recog_frame,width=50,height=10)
        self.scr_recog.pack(side=tk.RIGHT, fill=tk.Y)
        self.tt_recog. pack(side=tk.LEFT,fill=tk.Y)
        self.scr_recog.config(command=self.tt_recog.yview)
        self.tt_recog.config(yscrollcommand=self.scr_recog.set)
        self.recog_frame.grid(row=0,column=1,padx=10)
        self.log_frame = ttk.LabelFrame(self.info_frame, text='运行日志')
        self.tt_log = tk.Text(self.log_frame, width=50, height=10)
        self.scr_log = tk.Scrollbar(self.log_frame)
        self.tt_log.pack(side=tk.LEFT,fill=tk.Y)
        self.scr_log.pack(side=tk.RIGHT,fill=tk.Y)
        self.scr_log.config(command=self.tt_log.yview)
        self.tt_log.config(yscrollcommand=self.scr_log.set)
        self.log_frame.grid(row=0,column=0,padx=10)
        self.info_frame.pack()
        self.root.mainloop()

    def video(self):
        ret, frame = self.cap.read()
        img = Image.fromarray(frame)
        img = ImageTk.PhotoImage(img)
        self.lb_video.imgtk = img
        self.lb_video.config(image=img)
        self.lb_video.after(1, self.video)
        if self.video_flag == 1:
            self.show_frame.pack(pady=4)
        elif self.video_flag == 0:
            self.show_frame.pack_forget()
        if self.shot_flag == 1:
            self.re_img = frame
            self.lb_image.imgtk = img
            self.lb_image.config(image=img)
            self.lb_image.grid(row=0, column=1, padx=10)
            self.shot_flag = 0

    def video_init(self):
        if self.cap.isOpened():
            self.video()
            self.bt_test.config(state=tk.DISABLED)
            self.tt_log.insert('0.0', f'相机连接成功\n')

    def open(self):
        self.video_flag = 1
        self.tt_log.insert('0.0', f'打开相机\n')

    def stop(self):
        self.video_flag = 0
        self.tt_log.insert('0.0', f'关闭相机\n')

    def shot(self):
        self.shot_flag = 1
        self.tt_log.insert('0.0', f'图片采集\n')

    def recog(self):
        self.tt_recog.delete('0.0', tk.END)
        data = pytesseract.image_to_string(self.re_img, lang='eng+chi_sim')
        self.tt_log.insert('0.0', f'内容识别{datetime.datetime.now()}\n')
        self.tt_recog.insert('0.0', data.replace(' ',''))
        # print(data.replace(' ',''))


if __name__ == '__main__':
    Myapp()

UI示例

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值