最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

小白學(xué)Python之實(shí)現(xiàn)OCR識(shí)別

 更新時(shí)間:2021年08月24日 10:46:12   作者:coderwangson  
將圖片翻譯成文字一般被稱為光學(xué)文字識(shí)別(Optical Character Recognition,OCR),這篇文章主要給大家介紹了關(guān)于Python實(shí)現(xiàn)OCR識(shí)別的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下

前期準(zhǔn)備

在這個(gè)階段主要準(zhǔn)備整個(gè)小程序的結(jié)構(gòu),既然要實(shí)現(xiàn)ocr,那么輸入就是一張圖片,而圖片這里采用屏幕截圖的方式獲得,輸出是文字,這里采用搜狗的ocr接口,我們把截好的圖片傳到搜狗ocr接口中,然后把返回的文字作為輸出即可。

由于想做一個(gè)小程序,所以要為程序做GUI,這里采用tkinter編制GUI界面。

界面編寫

界面主要就準(zhǔn)備一個(gè)窗體,里面有菜單,給出OCR功能。

之后我們點(diǎn)擊菜單,則啟動(dòng)一個(gè)截圖功能,在截圖完成后,我們就把截得的圖片傳入ocr接口并返回文字到主窗體中。

主面板的編寫則直接使用tkinter建立菜單等

	root = Tk() 
	root.title("小新的OCR")
	# 創(chuàng)建一個(gè)頂級(jí)菜單
    menubar = Menu(root)
    # 創(chuàng)建一個(gè)下拉菜單“文件”,然后將它添加到頂級(jí)菜單中
    filemenu = Menu(menubar, tearoff=False)
    filemenu.add_command(label="OCR", command=buttonCaptureClick, accelerator='Ctrl+N')
    filemenu.add_command(label="幫助",command=helpClick)
    filemenu.add_command(label="退出", command=root.quit)
    menubar.add_cascade(label="操作", menu=filemenu)
    # 顯示菜單
    root.config(menu=menubar)
    root.bind_all("<Control-d>", lambda event: buttonCaptureClick())
    #啟動(dòng)消息主循環(huán)
    root.mainloop()  

這樣變回產(chǎn)生一個(gè)窗體,用戶可以和這個(gè)窗體進(jìn)行交互,你可以點(diǎn)擊菜單,然后找到其子菜單中的OCR一項(xiàng),點(diǎn)擊它便會(huì)調(diào)用一個(gè)buttonCaptureClick的函數(shù),這個(gè)函數(shù)就來(lái)產(chǎn)生截圖,并且保存截圖。

截圖功能實(shí)現(xiàn)

截圖功能我也是參考網(wǎng)上的內(nèi)容,原理就是先把整個(gè)屏幕給捕捉到,然后監(jiān)聽鼠標(biāo)事件,當(dāng)鼠標(biāo)左邊按下則作為截圖的左頂點(diǎn),鼠標(biāo)左鍵松下則最為截圖的右底點(diǎn),這樣我們截圖區(qū)域就出來(lái)了,然后進(jìn)行保存即可。

#用來(lái)顯示全屏幕截圖并響應(yīng)二次截圖的窗口類
class MyCapture:
    def __init__(self, png):
        #變量X和Y用來(lái)記錄鼠標(biāo)左鍵按下的位置
        self.X = tkinter.IntVar(value=0)
        self.Y = tkinter.IntVar(value=0)
        #屏幕尺寸
        screenWidth = root.winfo_screenwidth()
        screenHeight = root.winfo_screenheight()
        #創(chuàng)建頂級(jí)組件容器
        self.top = tkinter.Toplevel(root, width=screenWidth, height=screenHeight)
        #不顯示最大化、最小化按鈕
        self.top.overrideredirect(True)
        self.canvas = tkinter.Canvas(self.top,bg='white', width=screenWidth, height=screenHeight)
        #顯示全屏截圖,在全屏截圖上進(jìn)行區(qū)域截圖
        self.image = tkinter.PhotoImage(file=png)
        self.text =""
        self.canvas.create_image(screenWidth//2, screenHeight//2, image=self.image)
        #鼠標(biāo)左鍵按下的位置
        def onLeftButtonDown(event):
            self.X.set(event.x)
            self.Y.set(event.y)
            #開始截圖
            self.sel = True
        self.canvas.bind('<Button-1>', onLeftButtonDown)
        #鼠標(biāo)左鍵移動(dòng),顯示選取的區(qū)域
        def onLeftButtonMove(event):
            if not self.sel:
                return
            global lastDraw
            try:
                #刪除剛畫完的圖形,要不然鼠標(biāo)移動(dòng)的時(shí)候是黑乎乎的一片矩形
                self.canvas.delete(lastDraw)
            except Exception as e:
                pass
            lastDraw = self.canvas.create_rectangle(self.X.get(), self.Y.get(), event.x, event.y, outline='black')
        self.canvas.bind('<B1-Motion>', onLeftButtonMove)
        #獲取鼠標(biāo)左鍵抬起的位置,保存區(qū)域截圖
        def onLeftButtonUp(event):
            self.sel = False
            try:
                self.canvas.delete(lastDraw)
            except Exception as e:
                pass
            sleep(0.1)
            #考慮鼠標(biāo)左鍵從右下方按下而從左上方抬起的截圖
            left, right = sorted([self.X.get(), event.x])
            top, bottom = sorted([self.Y.get(), event.y])
            pic = ImageGrab.grab((left+1, top+1, right, bottom))
            fileName ="temp.jpg"
            pic.save(fileName)
            self.text = get_text(fileName)
            #關(guān)閉當(dāng)前窗口
            self.top.destroy()
        self.canvas.bind('<ButtonRelease-1>', onLeftButtonUp)
#讓canvas充滿窗口,并隨窗口自動(dòng)適應(yīng)大小
        self.canvas.pack(fill=tkinter.BOTH, expand=tkinter.YES)
 #開始截圖
def buttonCaptureClick():
    #最小化主窗口
#     root.state('icon')
    root.withdraw()
    sleep(0.4)
    filename = 'temp.png'
    #grab()方法默認(rèn)對(duì)全屏幕進(jìn)行截圖
    im = ImageGrab.grab()
    im.save(filename)
    im.close()
    #顯示全屏幕截圖
    w = MyCapture(filename)
    root.wait_window(w.top)
    #截圖結(jié)束,恢復(fù)主窗口,并刪除臨時(shí)的全屏幕截圖文件
    root.update()
    root.deiconify()
    text1.config(state = NORMAL)
    text1.delete(0.0,END)
    text1.insert('insert',w.text)
    text1.config(state = DISABLED)
    text1.pack()
    os.remove(filename)

OCR實(shí)現(xiàn)

因?yàn)镺CR其實(shí)是采用了搜狗的接口,所以需要做的工作也不是很多,只需要把我們的圖片傳入即可。

def get_text(img_path):
    print("")
    img = img_path # 圖片路徑
    files = {"pic_path": open(img, "rb")}  # files # 類似data數(shù)據(jù)
    url = "http://pic.sogou.com/pic/upload_pic.jsp"  # post的url
    keywords = requests.post(url, files=files).text  # requests 提交圖片
    url = "http://pic.sogou.com/pic/ocr/ocrOnline.jsp?query=" + keywords  # keywords就是圖片url此方式為get請(qǐng)求
    ocrResult = requests.get(url).json()  # 直接轉(zhuǎn)換為json格式
    
    contents = ocrResult['result']  # 類似字典 把result的value值取出來(lái) 是一個(gè)list然后里面很多json就是識(shí)別的文字
    text = ""
    for content in contents:  # 遍歷所有結(jié)果
        text+=(content['content'].strip()+'\n')  # strip去除空格 他返回的結(jié)果自帶一個(gè)換行
    return text

內(nèi)容顯示

內(nèi)容顯示是在截圖結(jié)束后我們把ocr識(shí)別的內(nèi)容存儲(chǔ)起來(lái)

self.text = get_text(fileName)  

然后再顯示到主窗體上

    text1.config(state = NORMAL)
    text1.delete(0.0,END)
    text1.insert('insert',w.text)
    text1.config(state = DISABLED)
    text1.pack()  

總結(jié)

雖然是一個(gè)完整的項(xiàng)目,但是其中的很多模塊其實(shí)都是借用其他人的模塊,而我做的只是把他們結(jié)合起來(lái)做成一個(gè)小項(xiàng)目,所以是站在巨人的肩膀上開發(fā)。

到此這篇關(guān)于Python實(shí)現(xiàn)OCR識(shí)別的文章就介紹到這了,更多相關(guān)Python實(shí)現(xiàn)OCR識(shí)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

參考:

  • https://cloud.tencent.com/developer/article/1097904
  • https://morvanzhou.github.io/tutorials/python-basic/tkinter/
  • https://www.52pojie.cn/thread-708177-1-1.html

相關(guān)文章

  • python網(wǎng)絡(luò)編程之五子棋游戲

    python網(wǎng)絡(luò)編程之五子棋游戲

    這篇文章主要為大家詳細(xì)介紹了python網(wǎng)絡(luò)編程之五子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • 解決pycharm19.3.3安裝pyqt5找不到designer.exe和pyuic.exe的問(wèn)題

    解決pycharm19.3.3安裝pyqt5找不到designer.exe和pyuic.exe的問(wèn)題

    這篇文章給大家介紹了pycharm19.3.3安裝pyqt5&pyqt5-tools后找不到designer.exe和pyuic.exe以及配置QTDesigner和PyUIC的問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-04-04
  • python實(shí)現(xiàn)快速文件格式批量轉(zhuǎn)換的方法

    python實(shí)現(xiàn)快速文件格式批量轉(zhuǎn)換的方法

    這篇文章主要介紹了python實(shí)現(xiàn)快速文件格式批量轉(zhuǎn)換的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Python使用ChainMap實(shí)現(xiàn)組合數(shù)據(jù)魔法實(shí)例探究

    Python使用ChainMap實(shí)現(xiàn)組合數(shù)據(jù)魔法實(shí)例探究

    這篇文章主要為大家介紹了Python使用ChainMap實(shí)現(xiàn)組合數(shù)據(jù)魔法實(shí)例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • 使用Python實(shí)現(xiàn)視頻拼接效果

    使用Python實(shí)現(xiàn)視頻拼接效果

    這篇文章主要為大家詳細(xì)介紹了使用Python實(shí)現(xiàn)視頻拼接效果的兩種方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-02-02
  • python opencv 二值化 計(jì)算白色像素點(diǎn)的實(shí)例

    python opencv 二值化 計(jì)算白色像素點(diǎn)的實(shí)例

    今天小編就為大家分享一篇python opencv 二值化 計(jì)算白色像素點(diǎn)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-07-07
  • Python帶你從淺入深探究Tuple(基礎(chǔ)篇)

    Python帶你從淺入深探究Tuple(基礎(chǔ)篇)

    大家都知道Python中的元組容器序列(tuple)與列表容器序列(list)有很多相同之處,他們雖然都可以存儲(chǔ)任意類型的數(shù)據(jù),但是一個(gè)元組定義好之后就不能夠再進(jìn)行修改,對(duì)Python Tuple相關(guān)知識(shí)感興趣的朋友一起看看吧
    2021-05-05
  • python排序算法的簡(jiǎn)單實(shí)現(xiàn)方法

    python排序算法的簡(jiǎn)單實(shí)現(xiàn)方法

    這篇文章主要給大家介紹了關(guān)于python排序算法的簡(jiǎn)單實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • pycharm中出現(xiàn)no module named xlwt的原因及解決

    pycharm中出現(xiàn)no module named xlwt的原因及解決

    這篇文章主要介紹了pycharm中出現(xiàn)no module named xlwt的原因及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。
    2023-05-05
  • python實(shí)現(xiàn)emoji對(duì)齊特殊字符對(duì)齊高級(jí)文本對(duì)齊

    python實(shí)現(xiàn)emoji對(duì)齊特殊字符對(duì)齊高級(jí)文本對(duì)齊

    這篇文章主要為大家介紹了python實(shí)現(xiàn)emoji對(duì)齊特殊字符對(duì)齊高級(jí)文本對(duì)齊方法實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11

最新評(píng)論

新疆| 龙井市| 唐河县| 商水县| 同江市| 东光县| 长沙市| 桐乡市| 五峰| 平遥县| 浠水县| 普定县| 太仆寺旗| 乐陵市| 什邡市| 梓潼县| 江口县| 陆丰市| 封开县| 德保县| 石门县| 蒲城县| 德兴市| 田东县| 永城市| 彰武县| 科技| 怀仁县| 科尔| 慈溪市| 张北县| 嘉义市| 仲巴县| 汝阳县| 河北省| 福贡县| 萍乡市| 东明县| 镶黄旗| 玛沁县| 祁东县|