Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Detect text region in image using Opencv

I have an image and want to detect the text regions in it.

I tried TiRG_RAW_20110219 project but the results are not satisfactory. If the input image is http://imgur.com/yCxOvQS,GD38rCa it is producing http://imgur.com/yCxOvQS,GD38rCa#1 as output.

Can anyone suggest some alternative. I wanted this to improve the output of tesseract by sending it only the text region as input.

like image 515
Meenal Goyal Avatar asked Jun 24 '14 11:06

Meenal Goyal


People also ask

How can I identify text in an image?

Optical Character Recognition (OCR) The Vision API can detect and extract text from images. There are two annotation features that support optical character recognition (OCR): TEXT_DETECTION detects and extracts text from any image.

How do I use text to detect East?

The key highlights of EAST (Efficient and Accurate Scene Text Detector) are as follows: They propose a scene text detection method that consists of two stages: a Fully Convolutional Network and an NMS merging stage. The FCN directly produces text regions, excluding redundant and time-consuming intermediate steps.

Which algorithm is used to detect text in images?

Optical Character Recognition (OCR) is used to analyze text in images. The proposed algorithm deals with taking scanned copy of a document as an input and extract texts from the image into a text format using Otsu's algorithm for segmentation and Hough transform method for skew detection.


1 Answers

import cv2   def captch_ex(file_name):     img = cv2.imread(file_name)      img_final = cv2.imread(file_name)     img2gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)     ret, mask = cv2.threshold(img2gray, 180, 255, cv2.THRESH_BINARY)     image_final = cv2.bitwise_and(img2gray, img2gray, mask=mask)     ret, new_img = cv2.threshold(image_final, 180, 255, cv2.THRESH_BINARY)  # for black text , cv.THRESH_BINARY_INV     '''             line  8 to 12  : Remove noisy portion      '''     kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (3,                                                          3))  # to manipulate the orientation of dilution , large x means horizonatally dilating  more, large y means vertically dilating more     dilated = cv2.dilate(new_img, kernel, iterations=9)  # dilate , more the iteration more the dilation      # for cv2.x.x      _, contours, hierarchy = cv2.findContours(dilated, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)  # findContours returns 3 variables for getting contours      # for cv3.x.x comment above line and uncomment line below      #image, contours, hierarchy = cv2.findContours(dilated,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)       for contour in contours:         # get rectangle bounding contour         [x, y, w, h] = cv2.boundingRect(contour)          # Don't plot small false positives that aren't text         if w < 35 and h < 35:             continue          # draw rectangle around contour on original image         cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 255), 2)          '''         #you can crop image and send to OCR  , false detected will return no text :)         cropped = img_final[y :y +  h , x : x + w]          s = file_name + '/crop_' + str(index) + '.jpg'          cv2.imwrite(s , cropped)         index = index + 1          '''     # write original image with added contours to disk     cv2.imshow('captcha_result', img)     cv2.waitKey()   file_name = 'your_image.jpg' captch_ex(file_name) 

Click to see result

Click to see result

like image 166
yardstick17 Avatar answered Sep 21 '22 17:09

yardstick17