用python Tesseract-OCR做了一個圖片轉文字的小工具,GUI設計使用tkinter庫的控制項
介面及效果請見下圖:
#进一步优化 1. 底部添加label 2.对识别后的文本处理,去空格 from PIL import Image as PImage from PIL import ImageTk import pytesseract from tkinter import * from tkinter import filedialog from tkinter.scrolledtext import ScrolledText import re # 将图片内容翻译为文字,显示在文本框内 def trans(): contents.delete('1.0', END) transTxt = pytesseract.image_to_string(PImage.open(filePath.get()),lang='chi_sim') #对transTxt进行处理 去空格,换行符去重 transTxt = transTxt.strip('\n\r') #无参数可以删除开头结尾的空格\n\t\r print(transTxt) contents.insert( INSERT, transTxt.replace(' ','').replace('\n\n','\n').replace('\r','')) #打开图片文件,显示路径,并将图片展现 def openfile(): filename.delete('1.0', END) filePath.set(filedialog.askopenfilename()) filename.insert(1.0,filePath.get()) org_img = PImage.open(filePath.get()) #调整图片显示大小 600*800 w,h = org_img.size if w>600: h=int(h*600/w) w=600 if h>800: w=int(w*800/h) h=800 img = ImageTk.PhotoImage(org_img.resize((w,h))) showPic.config(image=img) showPic.image = img #保持一个引用才能显示图片,tkinter的BUG #设置主窗口 top = Tk() top.title("OCR图片转文字 引擎:Tesseract-OCR Made by: kaivis") #top.iconbitmap("./pic/y1.ico") top.geometry("1200x800") filePath=StringVar() bt_img1 = ImageTk.PhotoImage( file= "./pic/Outbox1.png") bt_img2 = ImageTk.PhotoImage( file= "./pic/bt_img2.png") #第一个窗体 frame1 = Frame (top, relief=RAISED, borderwidth=2) frame1.pack(side=TOP, fill=BOTH, ipady=5, expand=0) Label(frame1,height=1,text="图片路径:").pack(side=LEFT) filename = Text(frame1,height=2) filename.pack(side=LEFT,padx=1, pady=0,expand=True, fill=X) Button(frame1,text="打开文件", image=bt_img1, command=openfile).pack(side=LEFT,padx=5, pady=0) Button(frame1,text="中文识别", image=bt_img2, command=trans).pack(side=LEFT,padx=5, pady=0) #第二个窗体 frame2 = Frame (top, relief=RAISED, borderwidth=2) frame2.pack (side=LEFT, fill=BOTH, expand=1) Label(frame2,text='图片显示:',borderwidth=5).pack(side=TOP,padx=20,pady=5) showPic = Label(frame2,text='图片显示区') showPic.pack(side=BOTTOM,expand=1,fill=BOTH) #第三个窗体 frame3 = Frame (top) frame3.pack (side=RIGHT, fill=BOTH, expand=1) #contents = ScrolledText(frame3) Label(frame3,text='识别结果:',borderwidth=5).pack(side=TOP,padx=20,pady=10) contents = Text(frame3,font=('Arial',15)) contents.pack(side=TOP,expand=1,fill=BOTH) Label(frame3,text='Copyright 2021 baidu.com ALL Rights Reserved',borderwidth=5).pack(side=BOTTOM,padx=20,pady=10) top.mainloop()
存在的問題:
辨識率不高,對緊密型的漢字更是難以做到較高的準確率,有沒有更好的OCR引擎呢
識別後的文字已經做了去空格處理,文字可以進一步優化,特別是多餘的換行符需要處理
由於在網上找資料時,經常遇到文章無法複製的情況,為了能夠快速copy想要的文字,於是就想寫一個python程式去實現截圖轉文字的功能。
首先要有記錄鍵盤的功能(讓程式知道你在截圖) - keyboard庫截圖後需要接收圖像- ImageGrab庫取得影像後要進行文字辨識- 百度AI文字辨識API
#2.1 匯入相關函式庫
2.2 創建類,並編寫實現截圖保存的函數
##由於我使用的是win10自帶的截圖軟體,所以截圖熱鍵為‘win shift s’,大家可以依照截圖軟體的不同自由更改。2.3 寫圖片轉文字的函數
先到百度智慧雲端官網申請一個影像辨識的API。 將參數寫入程式: #寫轉文字函數:#2.5 運行
使用時建立類,呼叫兩個函數即可:2.6 效果
運行程序,隨意在百度文庫的一篇文章裡截一張圖: 結果如下:注意:
由2.6運行結果可知,效果還是不錯的。完美解決了我當前的需求。以上是python怎麼實現圖片轉文字的詳細內容。更多資訊請關注PHP中文網其他相關文章!