資源簡介
Tensorflow文字定位、tesseract識別
代碼片段和文件信息
#?-*-?coding:?utf-8?-*-
from?__future__?import?print_function
import?tensorflow?as?tf
import?numpy?as?np
import?os?sys?cv2
import?glob
import?pytesseract
import?shutil
#?sys.path.append(os.getcwd())
from?lib.networks.factory?import?get_network
from?lib.fast_rcnn.config?import?cfgcfg_from_file
from?lib.fast_rcnn.test?import?test_ctpn
from?lib.utils.timer?import?Timer
from?lib.text_connector.detectors?import?TextDetector
from?lib.text_connector.text_connect_cfg?import?Config?as?TextLineCfg
from?PIL?import?ImageImageDrawImageFont
import?xlwt
def?resize_im(im?scale?max_scale=None):
????f=float(scale)/min(im.shape[0]?im.shape[1])
????if?max_scale!=None?and?f*max(im.shape[0]?im.shape[1])>max_scale:
????????f=float(max_scale)/max(im.shape[0]?im.shape[1])
????return?cv2.resize(im?NoneNone?fx=f?fy=finterpolation=cv2.INTER_LINEAR)?f
def?draw_boxes(imgimage_nameboxesscale):
????rects?=?[]
????base_name?=?image_name.split(‘/‘)[-1]
????with?open(‘./train/data/results/‘?+?‘res_{}.txt‘.format(base_name.split(‘.‘)[0])?‘w‘)?as?f:
????????for?box?in?boxes:
????????????if?np.linalg.norm(box[0]?-?box[1])?5?or?np.linalg.norm(box[3]?-?box[0])?5:
????????????????continue
????????????if?box[8]?>=?0.9:
????????????????color?=?(0?255?0)
????????????elif?box[8]?>=?0.8:
????????????????color?=?(255?0?0)
????????????cv2.line(img?(int(box[0])?int(box[1]))?(int(box[2])?int(box[3]))?color?2)
????????????cv2.line(img?(int(box[0])?int(box[1]))?(int(box[4])?int(box[5]))?color?2)
????????????cv2.line(img?(int(box[6])?int(box[7]))?(int(box[2])?int(box[3]))?color?2)
????????????cv2.line(img?(int(box[4])?int(box[5]))?(int(box[6])?int(box[7]))?color?2)
????????????min_x?=?min(int(box[0]/scale)int(box[2]/scale)int(box[4]/scale)int(box[6]/scale))
????????????min_y?=?min(int(box[1]/scale)int(box[3]/scale)int(box[5]/scale)int(box[7]/scale))
????????????max_x?=?max(int(box[0]/scale)int(box[2]/scale)int(box[4]/scale)int(box[6]/scale))
????????????max_y?=?max(int(box[1]/scale)int(box[3]/scale)int(box[5]/scale)int(box[7]/scale))
????????????rects.append([min_ymin_xmax_ymax_x])
????????????line?=?‘‘.join([str(min_x)str(min_y)str(max_x)str(max_y)])+‘\r\n‘
????????????f.write(line)
????#??save?img?as?result.jpg
????img=cv2.resize(img?None?None?fx=1.0/scale?fy=1.0/scale?interpolation=cv2.INTER_LINEAR)
????cv2.imwrite(‘./result.jpg‘?img)
????rects.sort()
????return?rects
def?ctpn(sess?net?image_name):
????rects?=?[]
????timer?=?Timer()
????timer.tic()
????img?=?cv2.imread(image_name)
????img?scale?=?resize_im(img?scale=TextLineCfg.SCALE?max_scale=TextLineCfg.MAX_SCALE)
????scores?boxes?=?test_ctpn(sess?net?img)
????textdetector?=?TextDetector()
????boxes?=?textdetector.detect(boxes?scores[:?np.newaxis]?img.shape[:2])
????rects?=?draw_boxes(img?image_name?boxes?scale)
????timer.toc()
????print((‘Detection?took?{:.3f}s?for?‘
???????????‘{:d}?object?proposals‘).format(timer.total_time?boxes.shape[0]
評論
共有 條評論