电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

小白學Python之實現OCR識別

瀏覽:6日期:2022-08-06 15:58:04
目錄前期準備界面編寫截圖功能實現OCR實現內容顯示總結前期準備

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

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

界面編寫

界面主要就準備一個窗體,里面有菜單,給出OCR功能。

小白學Python之實現OCR識別

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

小白學Python之實現OCR識別

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

root = Tk() root.title('小新的OCR')# 創建一個頂級菜單 menubar = Menu(root) # 創建一個下拉菜單“文件”,然后將它添加到頂級菜單中 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()) #啟動消息主循環 root.mainloop()

這樣變回產生一個窗體,用戶可以和這個窗體進行交互,你可以點擊菜單,然后找到其子菜單中的OCR一項,點擊它便會調用一個buttonCaptureClick的函數,這個函數就來產生截圖,并且保存截圖。

截圖功能實現

截圖功能我也是參考網上的內容,原理就是先把整個屏幕給捕捉到,然后監聽鼠標事件,當鼠標左邊按下則作為截圖的左頂點,鼠標左鍵松下則最為截圖的右底點,這樣我們截圖區域就出來了,然后進行保存即可。

#用來顯示全屏幕截圖并響應二次截圖的窗口類class MyCapture: def __init__(self, png):#變量X和Y用來記錄鼠標左鍵按下的位置self.X = tkinter.IntVar(value=0)self.Y = tkinter.IntVar(value=0)#屏幕尺寸screenWidth = root.winfo_screenwidth()screenHeight = root.winfo_screenheight()#創建頂級組件容器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)#顯示全屏截圖,在全屏截圖上進行區域截圖self.image = tkinter.PhotoImage(file=png)self.text =''self.canvas.create_image(screenWidth//2, screenHeight//2, image=self.image)#鼠標左鍵按下的位置def onLeftButtonDown(event): self.X.set(event.x) self.Y.set(event.y) #開始截圖 self.sel = Trueself.canvas.bind(’<Button-1>’, onLeftButtonDown)#鼠標左鍵移動,顯示選取的區域def onLeftButtonMove(event): if not self.sel:return global lastDraw try:#刪除剛畫完的圖形,要不然鼠標移動的時候是黑乎乎的一片矩形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)#獲取鼠標左鍵抬起的位置,保存區域截圖def onLeftButtonUp(event): self.sel = False try:self.canvas.delete(lastDraw) except Exception as e:pass sleep(0.1) #考慮鼠標左鍵從右下方按下而從左上方抬起的截圖 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) #關閉當前窗口 self.top.destroy()self.canvas.bind(’<ButtonRelease-1>’, onLeftButtonUp)#讓canvas充滿窗口,并隨窗口自動適應大小self.canvas.pack(fill=tkinter.BOTH, expand=tkinter.YES) #開始截圖def buttonCaptureClick(): #最小化主窗口# root.state(’icon’) root.withdraw() sleep(0.4) filename = ’temp.png’ #grab()方法默認對全屏幕進行截圖 im = ImageGrab.grab() im.save(filename) im.close() #顯示全屏幕截圖 w = MyCapture(filename) root.wait_window(w.top) #截圖結束,恢復主窗口,并刪除臨時的全屏幕截圖文件 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實現

因為OCR其實是采用了搜狗的接口,所以需要做的工作也不是很多,只需要把我們的圖片傳入即可。

def get_text(img_path): print('') img = img_path # 圖片路徑 files = {'pic_path': open(img, 'rb')} # files # 類似data數據 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請求 ocrResult = requests.get(url).json() # 直接轉換為json格式contents = ocrResult[’result’] # 類似字典 把result的value值取出來 是一個list然后里面很多json就是識別的文字 text = '' for content in contents: # 遍歷所有結果text+=(content[’content’].strip()+’n’) # strip去除空格 他返回的結果自帶一個換行 return text內容顯示

內容顯示是在截圖結束后我們把ocr識別的內容存儲起來

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() 總結

雖然是一個完整的項目,但是其中的很多模塊其實都是借用其他人的模塊,而我做的只是把他們結合起來做成一個小項目,所以是站在巨人的肩膀上開發。

到此這篇關于Python實現OCR識別的文章就介紹到這了,更多相關Python實現OCR識別內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

參考:

https://cloud.tencent.com/developer/article/1097904 https://morvanzhou.github.io/tutorials/python-basic/tkinter/ https://www.52pojie.cn/thread-708177-1-1.html
標簽: Python 編程
相關文章:
主站蜘蛛池模板: 特材真空腔体_哈氏合金/镍基合金/纯镍腔体-无锡国德机械制造有限公司 | 环氧乙烷灭菌器_压力蒸汽灭菌器_低温等离子过氧化氢灭菌器 _低温蒸汽甲醛灭菌器_清洗工作站_医用干燥柜_灭菌耗材-环氧乙烷灭菌器_脉动真空压力蒸汽灭菌器_低温等离子灭菌设备_河南省三强医疗器械有限责任公司 | 数控车床-立式加工中心-多功能机床-小型车床-山东临沂金星机床有限公司 | hdpe土工膜-防渗膜-复合土工膜-长丝土工布价格-厂家直销「恒阳新材料」-山东恒阳新材料有限公司 ETFE膜结构_PTFE膜结构_空间钢结构_膜结构_张拉膜_浙江萬豪空间结构集团有限公司 | 空气净化器租赁,空气净化器出租,全国直租_奥司汀净化器租赁 | 耐破强度测试仪-纸箱破裂强度试验机-济南三泉中石单品站 | ET3000双钳形接地电阻测试仪_ZSR10A直流_SXJS-IV智能_SX-9000全自动油介质损耗测试仪-上海康登 | 带式压滤机_污泥压滤机_污泥脱水机_带式过滤机_带式压滤机厂家-河南恒磊环保设备有限公司 | 高清视频编码器,4K音视频编解码器,直播编码器,流媒体服务器,深圳海威视讯技术有限公司 | 管形母线,全绝缘铜管母线厂家-山东佰特电气科技有限公司 | 托盘租赁_塑料托盘租赁_托盘出租_栈板出租_青岛托盘租赁-优胜必达 | 手持式浮游菌采样器-全排二级生物安全柜-浙江孚夏医疗科技有限公司 | 工业硝酸钠,硝酸钠厂家-淄博「文海工贸」 | 聚合甘油__盐城市飞龙油脂有限公司 | MTK核心板|MTK开发板|MTK模块|4G核心板|4G模块|5G核心板|5G模块|安卓核心板|安卓模块|高通核心板-深圳市新移科技有限公司 | 有源电力滤波装置-电力有源滤波器-低压穿排电流互感器|安科瑞 | 切铝机-数控切割机-型材切割机-铝型材切割机-【昆山邓氏精密机械有限公司】 | 德国UST优斯特氢气检漏仪-德国舒赐乙烷检测仪-北京泽钏 | 深圳市源和塑胶电子有限公司-首页| 帽子厂家_帽子工厂_帽子定做_义乌帽厂_帽厂_制帽厂_帽子厂_浙江高普制帽厂 | 空气能暖气片,暖气片厂家,山东暖气片,临沂暖气片-临沂永超暖通设备有限公司 | 微学堂-电动能源汽车评测_电动车性能分享网 | 袋式过滤器,自清洗过滤器,保安过滤器,篮式过滤器,气体过滤器,全自动过滤器,反冲洗过滤器,管道过滤器,无锡驰业环保科技有限公司 | 智慧物联网行业一站式解决方案提供商-北京东成基业 | 长沙中央空调维修,中央空调清洗维保,空气能热水工程,价格,公司就找维小保-湖南维小保环保科技有限公司 | 洁净实验室工程-成都手术室净化-无尘车间装修-四川华锐净化公司-洁净室专业厂家 | 伸缩器_伸缩接头_传力接头-巩义市润达管道设备制造有限公司 | 钢骨架轻型板_膨石轻型板_钢骨架轻型板价格_恒道新材料 | CTAB,表面活性剂1631溴型(十六烷基三甲基溴化铵)-上海升纬化工原料有限公司 | 工业CT-无锡璟能智能仪器有限公司 | 长沙广告公司|长沙广告制作设计|长沙led灯箱招牌制作找望城湖南锦蓝广告装饰工程有限公司 | 焊管生产线_焊管机组_轧辊模具_焊管设备_焊管设备厂家_石家庄翔昱机械 | 济南冷库安装-山东冷库设计|建造|冷库维修-山东齐雪制冷设备有限公司 | 比亚迪叉车-比亚迪电动叉车堆垛车托盘车仓储叉车价格多少钱报价 磁力去毛刺机_去毛刺磁力抛光机_磁力光饰机_磁力滚抛机_精密金属零件去毛刺机厂家-冠古科技 | 驾驶式洗地机/扫地机_全自动洗地机_工业洗地机_荣事达工厂官网 | 小型玉石雕刻机_家用玉雕机_小型万能雕刻机_凡刻雕刻机官网 | 精密模具制造,注塑加工,吹塑和吹瓶加工,EPS泡沫包装生产 - 济南兴田塑胶有限公司 | 猎头招聘_深圳猎头公司_知名猎头公司 | 吲哚菁绿衍生物-酶底物法大肠菌群检测试剂-北京和信同通科技发展有限公司 | 建筑资质代办_工程施工资质办理_资质代办公司_北京众聚企服 | 汽液过滤网厂家_安平县银锐丝网有限公司|