您好,登錄后才能下訂單哦!
怎么在python中利用pytesseract 對(duì)本地的圖片文字進(jìn)行識(shí)別?針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡(jiǎn)單易行的方法。
具有方法如下:
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import glob from os import path import os import pytesseract from PIL import Image from queue import Queue import threading import datetime import cv2 def convertimg(picfile, outdir): '''調(diào)整圖片大小,對(duì)于過大的圖片進(jìn)行壓縮 picfile: 圖片路徑 outdir: 圖片輸出路徑 ''' img = Image.open(picfile) width, height = img.size while (width * height > 4000000): # 該數(shù)值壓縮后的圖片大約 兩百多k width = width // 2 height = height // 2 new_img = img.resize((width, height), Image.BILINEAR) new_img.save(path.join(outdir, os.path.basename(picfile))) def baiduOCR(ts_queue): while not ts_queue.empty(): picfile = ts_queue.get() filename = path.basename(picfile) outfile = 'D:\Study\pythonProject\scrapy\IpProxy\port_zidian.txt' img = cv2.imread(picfile, cv2.IMREAD_COLOR) print("正在識(shí)別圖片:\t" + filename) message = pytesseract.image_to_string(img,lang = 'eng') message = message.replace('', '') message = message.replace('\n', '') # message = client.basicAccurate(img) # 通用文字高精度識(shí)別,每天 800 次免費(fèi) #print("識(shí)別成功!")) try: filename1 = filename.split('.')[0] filename1 = ''.join(filename1) with open(outfile, 'a+') as fo: fo.writelines('\'' + filename1 + '\'' + ':' + message + ',') fo.writelines('\n') # fo.writelines("+" * 60 + '\n') # fo.writelines("識(shí)別圖片:\t" + filename + "\n" * 2) # fo.writelines("文本內(nèi)容:\n") # # 輸出文本內(nèi)容 # for text in message.get('words_result'): # fo.writelines(text.get('words') + '\n') # fo.writelines('\n' * 2) os.remove(filename) print("識(shí)別成功!") except: print('識(shí)別失敗') print("文本導(dǎo)出成功!") print() def duqu_tupian(dir): ts_queue = Queue(10000) outdir = dir # if path.exists(outfile): # os.remove(outfile) if not path.exists(outdir): os.mkdir(outdir) print("壓縮過大的圖片...") # 首先對(duì)過大的圖片進(jìn)行壓縮,以提高識(shí)別速度,將壓縮的圖片保存與臨時(shí)文件夾中 try: for picfile in glob.glob(r"D:\Study\pythonProject\scrapy\IpProxy\tmp\*"): convertimg(picfile, outdir) print("圖片識(shí)別...") for picfile in glob.glob("tmp1/*"): ts_queue.put(picfile) #baiduOCR(picfile, outfile) #os.remove(picfile) print('圖片文本提取結(jié)束!文本輸出結(jié)果位于文件中。' ) #os.removedirs(outdir) return ts_queue except: print('失敗') if __name__ == "__main__": start = datetime.datetime.now().replace(microsecond=0) t = 'tmp1' s = duqu_tupian(t) threads = [] try: for i in range(100): t = threading.Thread(target=baiduOCR, name='th-' + str(i), kwargs={'ts_queue': s}) threads.append(t) for t in threads: t.start() for t in threads: t.join() end = datetime.datetime.now().replace(microsecond=0) print('刪除耗時(shí):' + str(end - start)) except: print('識(shí)別失敗')
實(shí)測(cè)速度慢,但用了多線程明顯提高了速度,但準(zhǔn)確度稍低,同樣高清圖片,90百分識(shí)別率。還時(shí)不時(shí)出現(xiàn)亂碼文字,亂空格,這里展現(xiàn)不了,自己實(shí)踐吧,重點(diǎn)免費(fèi)的,隨便識(shí)別,通向100張圖片,用時(shí)快6分鐘了,速度慢了一倍,但是是免費(fèi)的,挺不錯(cuò)的了。
關(guān)于怎么在python中利用pytesseract 對(duì)本地的圖片文字進(jìn)行識(shí)別問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。