基于python/opencv/tesseract使用传统方法的,表格图片版面分析以及印刷体汉字识别(持续更新,学习备份用)
生活随笔
收集整理的這篇文章主要介紹了
基于python/opencv/tesseract使用传统方法的,表格图片版面分析以及印刷体汉字识别(持续更新,学习备份用)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
基于python/opencv/tesseract使用傳統方法的,表格圖片版面分析以及印刷體漢字識別(持續更新,學習備份用)
import cv2 import numpy as np import pytesseractimage = cv2.imread('img-625101042_1.jpeg', 1) print(image.shape) #二值化 gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) binary = cv2.adaptiveThreshold(~gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 35, -5) #ret,binary = cv2.threshold(~gray, 127, 255, cv2.THRESH_BINARY) #cv2.imshow("cell", binary) #cv2.waitKey(0)rows,cols=binary.shape scale = 40 #識別橫線 kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(cols//scale,1)) eroded = cv2.erode(binary,kernel,iterations = 1) #cv2.imshow("Eroded Image",eroded) dilatedcol = cv2.dilate(eroded,kernel,iterations = 1) #cv2.imshow("Dilated Image",dilatedcol) #cv2.waitKey(0)#識別豎線 scale = 20 kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(1,rows//scale)) eroded = cv2.erode(binary,kernel,iterations = 1) dilatedrow = cv2.dilate(eroded,kernel,iterations = 1) # cv2.imshow("Dilated Image",dilatedrow) # cv2.waitKey(0)#標識交點 bitwiseAnd = cv2.bitwise_and(dilatedcol,dilatedrow) #cv2.imshow("bitwiseAnd Image",bitwiseAnd) #cv2.waitKey(0) # cv2.imwrite("my.png",bitwiseAnd)#標識表格 merge = cv2.add(dilatedcol,dilatedrow) cv2.imshow("add Image",merge) cv2.waitKey(0)#識別黑白圖中的白色點 ys,xs = np.where(bitwiseAnd>0) mylisty=[] mylistx=[]#通過排序,獲取跳變的x和y的值,說明是交點,否則交點會有好多像素值,我只取最后一點 i = 0 #當兩點之間距離大于60時候視為跨越點,交點只留一個像素點 myxs=np.sort(xs) for i in range(len(myxs)-1):if(myxs[i+1]-myxs[i]>60):mylistx.append(myxs[i])i=i+1 mylistx.append(myxs[i]) # print(mylistx) # print(len(mylistx))i = 0 myys=np.sort(ys) #print(np.sort(ys)) #當兩點之間距離大于60時候視為跨越點,交點只留一個像素點 for i in range(len(myys)-1):if(myys[i+1]-myys[i]>60):mylisty.append(myys[i])i=i+1 mylisty.append(myys[i]) # print(mylisty) # print(len(mylisty))i=0 contours,hierarchy = cv2.findContours(merge, cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE) image2 = cv2.drawContours(image, contours, -1, (0,0, 255), 2) #print(len(contours)) #print(contours[0]) cv2.imshow("image2",image2) cv2.waitKey(0)br = [] for i in range(len(contours)):BR1= cv2.boundingRect(contours[i])br.append(BR1)#br = np.array(BR ).reshape()print(br)#print(x,y,w,h)#ROI = image[y:y + h, x:x + w]cv2.imshow("roi", ROI)cv2.waitKey(0)special_char_list = '`~!@#$%^&*()-_=+[]{}|\\;:‘’,。《》/?ˇ'pytesseract.pytesseract.tesseract_cmd = 'C://Program Files (x86)/Tesseract-OCR/tesseract.exe'text2 = pytesseract.image_to_string(ROI,'chi_sim') #讀取文字,此為默認英文text2 = ''.join([char for char in text2 if char not in special_char_list])print(text2)#cv2.rectangle(image,ROI[i][0],ROI[i][1],(0,0,255),2)#print(ROI) """ for i in range(4): #只有4行有效數字ROI = image[mylisty[i]:mylisty[i+1]-3,mylistx[1]:mylistx[2]-3] #減去3的原因是由于我縮小ROI范圍cv2.imshow("add Image",ROI)cv2.waitKey(0)i=i+1 """總結
以上是生活随笔為你收集整理的基于python/opencv/tesseract使用传统方法的,表格图片版面分析以及印刷体汉字识别(持续更新,学习备份用)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MENTOR 安装过程
- 下一篇: python刷课思路_江西干部网络学院-