python opencv


import cv2
import numpy as np
import math
import sys
import os
from pyocr import pyocr
from PIL import Image
import matplotlib.pyplot as plt
import matplotlib

STEP = int(0)

def showWindow(img):
    pass
    # global STEP
    # STEP = STEP + 1
    # title = "step" + str(STEP)
    # cv2.namedWindow(title)
    # cv2.imshow(title, img)
    # cv2.waitKey(0)
    # cv2.destroyWindow(title)


def image_rotate_newsize(src, center , angle , scale) :
    angle2 = angle * math.acos(-1.0) / 180
    height , width = src.shape[:2]
    alpha = math.cos(angle2) * scale
    beta = math.sin(angle2) * scale
    new_width = int(width * math.fabs(alpha) + height * math.fabs(beta))
    new_height = int(width * math.fabs(beta) + height * math.fabs(alpha))
    center = (float(width / 2), float(height / 2))
    M = cv2.getRotationMatrix2D(center, angle, scale)
    M[0][2] += int((new_width - width) / 2)
    M[1][2] += int((new_height - height) / 2)
    dst = cv2.warpAffine(src , M, (new_width, new_height) , borderValue = 255)
    return dst

def chi_sim(src):
    tools = pyocr.get_available_tools()[:]
    if len(tools) == 0:
        return  "failed"
    src = cv2.cvtColor(src , cv2.COLOR_RGB2GRAY)
    img = Image.fromarray(src)
    str = tools[0].image_to_string(img, lang='chi_sim')
    if str == None :
        return  "failed"
    str = str.replace(" " , "")
    if str == None:
        return "failed"
    if (str.count("mu") > 0 ) or (str.count("MU") > 0) or (str.count("E") > 0):
        str = str.replace("O" , "0").replace("o" , "0")
        ok = True
        for d in str[2:]:
             if not ('0' <= d and d <= '9'):
                 ok = False
        if ok:
            return str
        return tools[0].image_to_string(img, lang='eng')
    return str

def recog(img_path):
    img = cv2.imread(img_path)
    split_y = 10000
    split_y1 = None
    split_y2 = None
    split_x1 = None
    split_x2 = None
    split_theta = None

    img = cv2.resize(img, (210 * 4, 297 * 4), interpolation=cv2.INTER_CUBIC)
    src = img.copy()
    showWindow(img)
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    edges = cv2.Canny(gray, 50, 180)
    lines = cv2.HoughLines(edges, 1, np.pi / 180, 350)
    lines1 = lines[:, 0, :]
    for rho, theta in lines1[:]:
        if (theta < (np.pi / 4.)) or (theta > (3. * np.pi / 4.0)):
            continue
        a = np.cos(theta)
        b = np.sin(theta)
        x0 = a * rho
        y0 = b * rho
        x1 = int(x0 + 1000 * (-b))
        y1 = int(y0 + 1000 * (a))
        x2 = int(x0 - 1000 * (-b))
        y2 = int(y0 - 1000 * (a))
        y = min(y1 ,  y2)
        if 150 <= y and y <= 300 and split_y > y:
            split_y = y
            split_y1 = y1
            split_y2 = y2
            split_x1 = x1
            split_x2 = x2
            split_theta = theta

    cv2.line(img, (split_x1, split_y1), (split_x2, split_y2), (0, 0, 255), 3)
    showWindow(img)
    src = src[:split_y+15, :]
    showWindow(src)
    img_gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)

    angleD = split_theta * 180.0 / np.pi
    #print("angleD" + str(angleD))
    if angleD <= 89 :
        nCols , nRows = src.shape[:2]
        src = image_rotate_newsize(src.copy() , (nCols // 2, nRows // 2), angleD - 90.0, 1.0)
        showWindow(src)
        img_rotated = image_rotate_newsize(img_gray.copy() , (nCols // 2, nRows // 2), angleD - 90.0, 1.0)
       # print("img_rotated")
        showWindow(img_rotated)

    img_gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
    showWindow(img_gray)
    img_blur = cv2.GaussianBlur(img_gray, (5, 5), 0)
    showWindow(img_blur)
    img_th3 = cv2.adaptiveThreshold(img_blur, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)
    showWindow(img_th3)

    kernel = np.ones((3, 3), np.uint8)
    img_closing = cv2.morphologyEx(img_th3, cv2.MORPH_OPEN, kernel)
    img_closing = cv2.morphologyEx(img_closing, cv2.MORPH_CLOSE, kernel)
    showWindow(img_closing)

    kernel = np.ones((7, 13), np.uint8)
    img_open = cv2.morphologyEx(img_closing, cv2.MORPH_OPEN, kernel)
    showWindow(img_open)

    image, contours, hierarchy = cv2.findContours(img_open, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
    src_height, src_width, c = src.shape
    src_area = src_width * src_height

    reslut_mu = None
    reslut_img = None
    img_rec = src.copy()
    for i in range(len(contours)):
        box = cv2.minAreaRect(contours[i])
        x, y = box[0]
        width, height = box[1]
        if width < height:
            t = width
            width = height
            height = t
        angle = box[2]
        rate = height / width
        if rate < 1:
            rate = width / height
        area_rate = src_area / width / height
        if 4 <= rate and rate <= 10 and 10 <= area_rate and area_rate <= 100:
            angle = box[2]
            img_now = src.copy()
            points = np.int0(cv2.boxPoints(box))
            cv2.drawContours(img_rec, [points], -1, 255, 0)
            img_now = cv2.getRectSubPix(src.copy(), (int(width) + 10, 10 + int(height)), (int(x), int(y)))
            showWindow(img_now)
            s = chi_sim(img_now)
        #    print(s)
            if s.find("mu") == 0 or s.find("MU") == 0 or s.find("E") == 0:
                reslut_mu = s
              #  reslut_img = cv2.drawContours(src.copy(), [points], -1, 255, 0)
         #   print(str(s))
           # cv2.imwrite("C:/Users/liyang/Desktop/ly/" + str(i) + ".PNG" , img_now)
    if reslut_mu is not None:
        return reslut_mu
        # showWindow(reslut_img)
        # zhfont1 = matplotlib.font_manager.FontProperties(fname='C:\Windows\Fonts\simsun.ttc')
        # plt.title(reslut_mu , fontproperties=zhfont1)
        # plt.imshow(reslut_img)
        # plt.show()
    return "failed"

if __name__ == '__main__':
    img_path = sys.argv[1]
    os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'
    mu = recog(img_path) # IMG_4651.JPG
    # reslut = {}
    # reslut["status"] = "Yes"
    # reslut["result"] = mu
    # IMG_4567,IMG_4645
    #    IMG_4653
    print(mu)




#coding:utf-8
import cv2
import numpy as np
import math
import sys
import os
from pyocr import pyocr
from PIL import Image
import matplotlib.pyplot as plt
import matplotlib
import json


STEP = int(0)

def showWindow(img):
    return
    global STEP
    STEP = STEP + 1
    title = "step" + str(STEP)
    cv2.namedWindow(title)
    cv2.imshow(title, img)
    cv2.waitKey(0)
    cv2.destroyWindow(title)

def image_rotate_newsize(src, center , angle , scale) :
    angle2 = angle * math.acos(-1.0) / 180
    height , width = src.shape[:2]
    alpha = math.cos(angle2) * scale
    beta = math.sin(angle2) * scale
    new_width = int(width * math.fabs(alpha) + height * math.fabs(beta))
    new_height = int(width * math.fabs(beta) + height * math.fabs(alpha))
    center = (float(width / 2), float(height / 2))
    M = cv2.getRotationMatrix2D(center, angle, scale)
    M[0][2] += int((new_width - width) / 2)
    M[1][2] += int((new_height - height) / 2)
    dst = cv2.warpAffine(src , M, (new_width, new_height) , borderValue = (255,255,255))
    return dst

def chi_sim(src):
    tools = pyocr.get_available_tools()[:]
    if len(tools) == 0:
        return  "failed"
    img = Image.fromarray(src)
    str = tools[0].image_to_string(img, lang='eng')
    if str == None or len(str) == 0:
        return  "failed"
    str = str.replace(" " , "")
    if str == None or len(str) == 0:
        return "failed"
    str = str.replace("%", "X").replace("x", "X")
    if len(str) >= 18:
        str = str[:18]
    return str

def isIdcode(s):
    if s == None or len(s) == 0:
        return False
    if len(s) != 18:
        return False
    for i in s:
        if i == 'X' or i == 'x':
            continue
        if i < '0' or i > '9':
            return  False
    return True

def is_chinese(s):
    rt = False
    if s >= u"\u4e00" and s <= u"\u9fa6":
        rt = True
    return rt

def s_is_chinese(s):
    for i in s:
        if not is_chinese(i):
            return  False
    return True

def cmp(x , y):
    if x < y:
        return  -1
    if x == y:
        return  0
    if x > y:
        return 1

if __name__ == '__main__':
   os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'
   img_path = sys.argv[1]
   img_src = cv2.imread(img_path)#IMG_4751
   showWindow(img_src)
   img_src = cv2.resize(img_src, (85 * 8, 54 * 8), interpolation=cv2.INTER_CUBIC)
   showWindow(img_src)
   img_gray = cv2.cvtColor(img_src , cv2.COLOR_RGB2GRAY)
   showWindow(img_gray)
   img_blur = cv2.GaussianBlur(img_gray, (9, 9), 0)
   showWindow(img_blur)
   img_th3 = cv2.adaptiveThreshold(img_blur, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 7, 7)
   showWindow(img_th3)

   kernel = np.ones((9, 21), np.uint8)
   x = cv2.morphologyEx(img_th3, cv2.MORPH_CLOSE, kernel)
   showWindow(x)

   image, contours, hierarchy = cv2.findContours(x,  cv2.RETR_EXTERNAL , cv2.CHAIN_APPROX_NONE)
   s = cv2.drawContours(img_gray.copy(), contours, -1, (0, 0, 255), 3)
   showWindow(s)
   src_height, src_width = img_gray.shape[:2]
   src_area = src_width * src_height

   idcode = "Failed"
   names = []
   img_rec = img_gray.copy()
   for i in range(len(contours)):
       # if idcode != "Failed":
       #     continue
       box = cv2.minAreaRect(contours[i])
       x, y = box[0]
       width, height = box[1]
       if width == 0 or height == 0:
           continue
       if width < height:
           t = width
           width = height
           height = t
       angle = box[2]
       rate = height / width
       if rate < 1:
           rate = width / height
       area_rate = src_area / width / height


       if rate < 10 or rate > 25  or area_rate < 10  or area_rate >= 1000:
           continue
       else:
          # print(str(rate) + " " + str(area_rate))
           angle = box[2]
           img_now = img_gray.copy()
           points = np.int0(cv2.boxPoints(box))
        #   cv2.drawContours(img_rec, [points], -1, 255, 0)
           img_now = cv2.getRectSubPix(img_gray.copy(), (int(width) +15 , 20+int(height)), (int(x), int(y)))
         #  _, img_now = cv2.threshold(img_now , 0, 255, cv2.THRESH_OTSU)
         #   showWindow(img_now)
         #   nRows, nCols = img_now.shape[:2]
         #   M = cv2.getRotationMatrix2D((nCols / 2, nRows / 2), angle, 1)
         #   img_now = cv2.warpAffine(img_now, M, (nCols, nRows))
         #   showWindow(img_now)
         #   nRows , nCols = img_now.shape[:2]
         #   img_now = image_rotate_newsize(img_now.copy(), (nCols // 2, nRows // 2), angle, 1.0)


           s = chi_sim(img_now)
           if (s == None) or (len(s) == 0) :
               continue
           showWindow(img_now)
           if isIdcode(s):
               idcode = s
               continue

   print(json.dumps({"idcode":idcode , "name":"暂未提供"}))


#coding:utf-8
import cv2
import numpy as np
import math
import sys
import os
from pyocr import pyocr
from PIL import Image
import matplotlib.pyplot as plt
import matplotlib
import json
import operator


STEP = int(0)

def showWindow(img):
    return
    global STEP
    STEP = STEP + 1
    title = "step" + str(STEP)
    cv2.namedWindow(title)
    cv2.imshow(title, img)
    cv2.waitKey(0)
    cv2.destroyWindow(title)

def image_rotate_newsize(src, center , angle , scale) :
    angle2 = angle * math.acos(-1.0) / 180
    height , width = src.shape[:2]
    alpha = math.cos(angle2) * scale
    beta = math.sin(angle2) * scale
    new_width = int(width * math.fabs(alpha) + height * math.fabs(beta))
    new_height = int(width * math.fabs(beta) + height * math.fabs(alpha))
    center = (float(width / 2), float(height / 2))
    M = cv2.getRotationMatrix2D(center, angle, scale)
    M[0][2] += int((new_width - width) / 2)
    M[1][2] += int((new_height - height) / 2)
    dst = cv2.warpAffine(src , M, (new_width, new_height) , borderValue = (255,255,255))
    return dst

def chi_sim(src):
    tools = pyocr.get_available_tools()[:]
    if len(tools) == 0:
        return  "failed"
    img = Image.fromarray(src)
    str = tools[0].image_to_string(img, lang='eng')
    if str == None or len(str) == 0:
        return "failed"
    return str

def isIdcode(s):
    if s == None or len(s) == 0:
        return False
    if len(s) != 4:
        return False
    for i in s:
        if i < '0' or i > '9':
            return  False
    return True

def is_chinese(s):
    rt = False
    if s >= u"\u4e00" and s <= u"\u9fa6":
        rt = True
    return rt

def s_is_chinese(s):
    for i in s:
        if not is_chinese(i):
            return  False
    return True

def cmp(x , y):
    if x < y:
        return  -1
    if x == y:
        return  0
    if x > y:
        return 1

if __name__ == '__main__':
   os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'
   img_path = sys.argv[1]
   img_src = cv2.imread(img_path)#IMG_4771
   # print(img_src.shape)
   r , c = img_src.shape[:2]
   img_src = img_src[int(r/2):,:]
   showWindow(img_src)
   img_src = cv2.resize(img_src, (int(600 ), int(400)), interpolation=cv2.INTER_CUBIC)
   showWindow(img_src)
   img_gray = cv2.cvtColor(img_src , cv2.COLOR_RGB2GRAY)

   img_blur = cv2.GaussianBlur(img_gray, (7, 7), 0)
  # showWindow(img_blur)
   xxx = cv2.adaptiveThreshold(img_blur, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 5, 5)
   showWindow(xxx)
  # cv2.imwrite("C:/Users/liyang/Desktop/idcs/mu110.jpg" , xxx)
 #  print(chi_sim(xxx))
  # exit(0)

   # showWindow(img_gray)
   # _simg = cv2.adaptiveThreshold(xxx, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 7, 7)
   # showWindow(_simg)
   # print(chi_sim(_simg))

   img_blur = cv2.GaussianBlur(xxx, (5, 7), 0)
   showWindow(img_blur)
   img_th3 = cv2.adaptiveThreshold(img_blur, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 7, 7)
   showWindow(img_th3)
 #  print(chi_sim(img_th3))

   kernel = np.ones((9, 15), np.uint8)
   x = cv2.morphologyEx(img_th3, cv2.MORPH_CLOSE, kernel)
   showWindow(x)

   image, contours, hierarchy = cv2.findContours(x,  cv2.RETR_EXTERNAL , cv2.CHAIN_APPROX_NONE)
   s = cv2.drawContours(img_gray.copy(), contours, -1, (0, 0, 255), 3)
   showWindow(s)
   src_height, src_width = img_gray.shape[:2]
   src_area = src_width * src_height

   names = []
   idcode = "Failed"
   name = None
   name_y = None
   img_rec = img_gray.copy()
   for i in range(len(contours)):
       # if idcode != "Failed":
       #     continue
       box = cv2.minAreaRect(contours[i])
       x, y = box[0]
       width, height = box[1]
       if width == 0 or height == 0:
           continue
       if width < height:
           t = width
           width = height
           height = t
       angle = box[2]
       rate = height / width
       if rate < 1:
           rate = width / height
       area_rate = src_area / width / height

       if rate < 1 or rate > 10  or area_rate < 50  or area_rate >= 1000:
           continue
       else:
          # print(str(rate) + " " + str(area_rate))
           angle = box[2]
           img_now = img_gray.copy()
           points = np.int0(cv2.boxPoints(box))
           img_now = cv2.getRectSubPix(img_src.copy(), (int(width) +10 , 10+int(height)), (int(x), int(y)))
           s = chi_sim(img_now)
          # print(s)
           showWindow(img_now)
           if (s == None) or (len(s) == 0) or (s == "failed") :
               continue
           if isIdcode(s):
               names.append({"name": s, "x": x, "y": y})
   #
   # print(names)
   # if len(names) == 1:
   #     name = names[0].get("name")
   # elif len(names) >= 2:
   #     names.sort(key=operator.itemgetter("y"))
   #     if len(names) == 3:
   #         name = names[1].get("name")
   #     else:
   #         name = names[0].get("name")
   names.sort(key=operator.itemgetter("x"))
   idcode = ""
   for n in names:
       idcode = idcode + n.get("name")
   print(json.dumps({"idcode":idcode , "name":""}))


#coding:utf-8
import cv2
import numpy as np
import math
import sys
import os
from pyocr import pyocr
from PIL import Image
import matplotlib.pyplot as plt
import matplotlib
import json
import operator


STEP = int(0)

def showWindow(img):
    return
    global STEP
    STEP = STEP + 1
    title = "step" + str(STEP)
    cv2.namedWindow(title)
    cv2.imshow(title, img)
    cv2.waitKey(0)
    cv2.destroyWindow(title)

def image_rotate_newsize(src, center , angle , scale) :
    angle2 = angle * math.acos(-1.0) / 180
    height , width = src.shape[:2]
    alpha = math.cos(angle2) * scale
    beta = math.sin(angle2) * scale
    new_width = int(width * math.fabs(alpha) + height * math.fabs(beta))
    new_height = int(width * math.fabs(beta) + height * math.fabs(alpha))
    center = (float(width / 2), float(height / 2))
    M = cv2.getRotationMatrix2D(center, angle, scale)
    M[0][2] += int((new_width - width) / 2)
    M[1][2] += int((new_height - height) / 2)
    dst = cv2.warpAffine(src , M, (new_width, new_height) , borderValue = (255,255,255))
    return dst

def chi_sim(src):
    tools = pyocr.get_available_tools()[:]
    if len(tools) == 0:
        return  "failed"
    img = Image.fromarray(src)
    str = tools[0].image_to_string(img, lang='eng')
    if str == None or len(str) == 0:
        return "failed"
    str = str.replace("T" , "7").replace("B" , "8").replace("O" ,"0").replace("o" ,"0").replace("l" ,"1")
    return str

def isIdcode(s):
    if s == None or len(s) == 0:
        return False
    if len(s) != 13:
        return False
    for i in s:
        if i < '0' or i > '9':
            return  False
    return True

def is_chinese(s):
    rt = False
    if s >= u"\u4e00" and s <= u"\u9fa6":
        rt = True
    return rt

def s_is_chinese(s):
    for i in s:
        if not is_chinese(i):
            return  False
    return True

def  findFirst(s):
    n = len(s)
    if n < 13:
        return  -1
    for i in range(n-13):
        if isIdcode(s[i:i+13]):
            return i
    return -1

if __name__ == '__main__':
   os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'
   img_path = sys.argv[1]
   img_src = cv2.imread(img_path)#IMG_4771

  # print(img_src.shape)
 #  showWindow(img_src)
   r , c = img_src.shape[:2]
 #  im_old = img_src.copy()[int(r*3/5):,:int(c*2/5)]
   img_src = img_src[int(r*1/2):,:int(c*2/5)]
   img_src = cv2.resize(img_src, (int(500), int(400)), interpolation=cv2.INTER_CUBIC)
 #   img_src = img_src[int(r*3/5):,:int(c*1/5)]
   showWindow(img_src)
#   print(img_src.shape)
   # img_src = cv2.resize(img_src, (int(1200 ), int(500)), interpolation=cv2.INTER_CUBIC)
   # showWindow(img_src)
   img_gray = cv2.cvtColor(img_src , cv2.COLOR_RGB2GRAY)
 #
   img_blur = cv2.GaussianBlur(img_gray, (7, 7), 0)
  # showWindow(img_blur)
   xxx = cv2.adaptiveThreshold(img_blur, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 5, 5)
   showWindow(xxx)
  # cv2.imwrite("C:/Users/liyang/Desktop/idcs/mu110.jpg" , xxx)
 #  print(chi_sim(xxx))
  # exit(0)

   # showWindow(img_gray)
   # _simg = cv2.adaptiveThreshold(xxx, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 7, 7)
   # showWindow(_simg)
   # print(chi_sim(_simg))

   img_blur = cv2.GaussianBlur(xxx, (7,7), 0)
   showWindow(img_blur)
   img_th3 = cv2.adaptiveThreshold(img_blur, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 5, 5)
   showWindow(img_th3)
 #  print(chi_sim(img_th3))

   kernel = np.ones((9, 15), np.uint8)
   x = cv2.morphologyEx(img_th3, cv2.MORPH_CLOSE, kernel)
   showWindow(x)

   image, contours, hierarchy = cv2.findContours(x,  cv2.RETR_EXTERNAL , cv2.CHAIN_APPROX_NONE)
   s = cv2.drawContours(img_gray.copy(), contours, -1, (0, 0, 255), 3)
   showWindow(s)
   src_height, src_width = img_gray.shape[:2]
   src_area = src_width * src_height

   names = []
   idcode = "Failed"
   name = None
   name_y = None
   img_rec = img_gray.copy()
 #  print(len(contours))
   for i in range(len(contours)):
       # if idcode != "Failed":
       #     continue
       box = cv2.minAreaRect(contours[i])
       x, y = box[0]
       width, height = box[1]
       if width == 0 or height == 0:
           continue
       if width < height:
           t = width
           width = height
           height = t
       angle = box[2]
       rate = height / width
       if rate < 1:
           rate = width / height
       area_rate = src_area / width / height

       if  rate < 4 or rate > 20  or area_rate < 10  or area_rate >= 1000:
           continue
       else:
        #   print(str(rate) + " " + str(area_rate))
           angle = box[2]
           img_now = img_gray.copy()
           points = np.int0(cv2.boxPoints(box))
           img_now = cv2.getRectSubPix(img_src.copy(), (int(width) +10 , 10+int(height)), (int(x), int(y)))
           s = chi_sim(img_now)
           s = s.replace(" " , "")
        #   print(s)
           fs = findFirst(s)
           if fs != -1:
               idcode = s[fs:fs+13]
           showWindow(img_now)
   #
   # print(names)
   # if len(names) == 1:
   #     name = names[0].get("name")
   # elif len(names) >= 2:
   #     names.sort(key=operator.itemgetter("y"))
   #     if len(names) == 3:
   #         name = names[1].get("name")
   #     else:
   #         name = names[0].get("name")
   print(json.dumps({"idcode":idcode , "name":""}))


#coding:utf-8
import cv2
import numpy as np
import math
import sys
import os
from pyocr import pyocr
from PIL import Image
import matplotlib.pyplot as plt
import matplotlib
import json
import operator


STEP = int(0)

def showWindow(img):
    return
    global STEP
    STEP = STEP + 1
    title = "step" + str(STEP)
    cv2.namedWindow(title)
    cv2.imshow(title, img)
    cv2.waitKey(0)
    cv2.destroyWindow(title)

def image_rotate_newsize(src, center , angle , scale) :
    angle2 = angle * math.acos(-1.0) / 180
    height , width = src.shape[:2]
    alpha = math.cos(angle2) * scale
    beta = math.sin(angle2) * scale
    new_width = int(width * math.fabs(alpha) + height * math.fabs(beta))
    new_height = int(width * math.fabs(beta) + height * math.fabs(alpha))
    center = (float(width / 2), float(height / 2))
    M = cv2.getRotationMatrix2D(center, angle, scale)
    M[0][2] += int((new_width - width) / 2)
    M[1][2] += int((new_height - height) / 2)
    dst = cv2.warpAffine(src , M, (new_width, new_height) , borderValue = (255,255,255))
    return dst

def chi_sim(src):
    tools = pyocr.get_available_tools()[:]
    if len(tools) == 0:
        return  "failed"
    img = Image.fromarray(src)
    str = tools[0].image_to_string(img, lang='eng')
    if str == None or len(str) == 0:
        return "failed"
    return str

def isIdcode(s):
    if s == None or len(s) == 0:
        return False
    if len(s) != 8:
        return False
    for i in s:
        if i < '0' or i > '9':
            return  False
    return True

def is_chinese(s):
    rt = False
    if s >= u"\u4e00" and s <= u"\u9fa6":
        rt = True
    return rt

def s_is_chinese(s):
    for i in s:
        if not is_chinese(i):
            return  False
    return True

def cmp(x , y):
    if x < y:
        return  -1
    if x == y:
        return  0
    if x > y:
        return 1

if __name__ == '__main__':
   os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'
   img_path = sys.argv[1]
   img_src = cv2.imread(img_path)#IMG_4771
 #  print(img_src.shape)
   showWindow(img_src)
   img_src = cv2.resize(img_src, (120 * 5 + 50, 100 * 5), interpolation=cv2.INTER_CUBIC)
   showWindow(img_src)
   img_gray = cv2.cvtColor(img_src , cv2.COLOR_RGB2GRAY)

   showWindow(img_gray)
   _simg = cv2.adaptiveThreshold(img_gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 5, 7)
   showWindow(_simg)

   img_blur = cv2.GaussianBlur(img_gray, (7, 7), 0)
   showWindow(img_blur)
   img_th3 = cv2.adaptiveThreshold(img_blur, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 7, 7)
   showWindow(img_th3)

   kernel = np.ones((9, 17), np.uint8)
   x = cv2.morphologyEx(img_th3, cv2.MORPH_CLOSE, kernel)
   showWindow(x)

   image, contours, hierarchy = cv2.findContours(x,  cv2.RETR_EXTERNAL , cv2.CHAIN_APPROX_NONE)
   s = cv2.drawContours(img_gray.copy(), contours, -1, (0, 0, 255), 3)
   showWindow(s)
   src_height, src_width = img_gray.shape[:2]
   src_area = src_width * src_height

   names = []
   idcode = "Failed"
   name = None
   name_y = None
   img_rec = img_gray.copy()
   for i in range(len(contours)):
       # if idcode != "Failed":
       #     continue
       box = cv2.minAreaRect(contours[i])
       x, y = box[0]
       width, height = box[1]
       if width == 0 or height == 0:
           continue
       if width < height:
           t = width
           width = height
           height = t
       angle = box[2]
       rate = height / width
       if rate < 1:
           rate = width / height
       area_rate = src_area / width / height

       if rate < 5 or rate > 20  or area_rate < 50  or area_rate >= 1000:
           continue
       else:
       #    print(str(x) + " " + str(y))
           angle = box[2]
           img_now = img_gray.copy()
           points = np.int0(cv2.boxPoints(box))
           img_now = cv2.getRectSubPix(_simg.copy(), (int(width) +10 , 10+int(height)), (int(x), int(y)))
           s = chi_sim(img_now)
           if (s == None) or (len(s) == 0) or (s == "failed") :
               continue
           showWindow(img_now)

           if isIdcode(s):
               idcode = s
           else:
               s = s.replace("1" , "I")
               names.append({"name": s, "x": x, "y": y})

  # print(names)
   if len(names) == 1:
       name = names[0].get("name")
   elif len(names) >= 2:
       names.sort(key=operator.itemgetter("y"))
       if len(names) == 3:
           name = names[1].get("name")
       else:
           name = names[0].get("name")
   print(json.dumps({"idcode":idcode , "name":name}))



#coding:utf-8
import cv2
import numpy as np
import math
import sys
import os
from pyocr import pyocr
from PIL import Image
import matplotlib.pyplot as plt
import matplotlib
import json
import operator


STEP = int(0)

def showWindow(img):
    return
    global STEP
    STEP = STEP + 1
    title = "step" + str(STEP)
    cv2.namedWindow(title)
    cv2.imshow(title, img)
    cv2.waitKey(0)
    cv2.destroyWindow(title)

def image_rotate_newsize(src, center , angle , scale) :
    angle2 = angle * math.acos(-1.0) / 180
    height , width = src.shape[:2]
    alpha = math.cos(angle2) * scale
    beta = math.sin(angle2) * scale
    new_width = int(width * math.fabs(alpha) + height * math.fabs(beta))
    new_height = int(width * math.fabs(beta) + height * math.fabs(alpha))
    center = (float(width / 2), float(height / 2))
    M = cv2.getRotationMatrix2D(center, angle, scale)
    M[0][2] += int((new_width - width) / 2)
    M[1][2] += int((new_height - height) / 2)
    dst = cv2.warpAffine(src , M, (new_width, new_height) , borderValue = (255,255,255))
    return dst

def chi_sim(src):
    tools = pyocr.get_available_tools()[:]
    if len(tools) == 0:
        return  "failed"
    img = Image.fromarray(src)
    str = tools[0].image_to_string(img, lang='eng')
    if str == None or len(str) == 0:
        return "failed"
    return str

def isIdcode(s):
    if s == None or len(s) == 0:
        return False
    if len(s) != 13:
        return False
    for i in s:
        if i < '0' or i > '9':
            return  False
    return True

def is_chinese(s):
    rt = False
    if s >= u"\u4e00" and s <= u"\u9fa6":
        rt = True
    return rt

def s_is_chinese(s):
    for i in s:
        if not is_chinese(i):
            return  False
    return True

def cmp(x , y):
    if x < y:
        return  -1
    if x == y:
        return  0
    if x > y:
        return 1

if __name__ == '__main__':
   os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'
   img_path = sys.argv[1]
   img_src = cv2.imread(img_path)#IMG_4771
  # print(img_src.shape)
 #  showWindow(img_src)
   r , c = img_src.shape[:2]
   im_old = img_src.copy()[int(r*3/5):,:int(c*2/5)]
   img_src = img_src[int(r*3/5):,:int(c*1/5)]
   showWindow(img_src)
#   print(img_src.shape)
   # img_src = cv2.resize(img_src, (int(1200 ), int(500)), interpolation=cv2.INTER_CUBIC)
   # showWindow(img_src)
   img_gray = cv2.cvtColor(img_src , cv2.COLOR_RGB2GRAY)
 #  showWindow(img_gray)

   ys = []
   gray = cv2.cvtColor(img_src, cv2.COLOR_BGR2GRAY)
   edges = cv2.Canny(gray, 50, 180)
   lines = cv2.HoughLines(edges, 1, np.pi / 180, 300)
   lines1 = lines[:, 0, :]
   for rho, theta in lines1[:]:
       if (theta < (np.pi / 4.)) or (theta > (3. * np.pi / 4.0)):
           continue
       a = np.cos(theta)
       b = np.sin(theta)
       x0 = a * rho
       y0 = b * rho
       x1 = int(x0 + 1000 * (-b))
       y1 = int(y0 + 1000 * (a))
       x2 = int(x0 - 1000 * (-b))
       y2 = int(y0 - 1000 * (a))
       cv2.line(img_src, (x1, y1), (x2, y2), (0, 0, 255), 0)
  #     print(str(x1) + "," +str(y1) + "   " +str(x1) + "," +str(y2) )
       ys.append((y1+y2)//2)
    #   showWindow(img_src)
   ys.sort()
  # print(ys)
   yod = []
   n = len(ys)
   sum_y = ys[0]
   k = 1
   for i in range(n):
       if ys[i] - ys[i-1] < 10:
           sum_y = sum_y + ys[i]
           k += 1
       else:
           yod.append(sum_y // k)
           sum_y = ys[i]
           k = 1
   yod.append(sum_y // k)
  # print(yod)
   im = im_old[yod[0]:yod[1],:]
   r , c = im.shape[:2]
   im = im[int(r*1/5):,:]
   showWindow(im)
   img_gray = cv2.cvtColor(im , cv2.COLOR_BGR2GRAY)
   showWindow(img_gray)
  # cv2.imwrite("C:/Users/liyang/Desktop/idcs/air0001ss.jpg" , im)






   img_blur = cv2.GaussianBlur(img_gray, (7, 7), 0)
  # showWindow(img_blur)
   xxx = cv2.adaptiveThreshold(img_blur, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 5, 5)
   showWindow(xxx)
  # cv2.imwrite("C:/Users/liyang/Desktop/idcs/mu110.jpg" , xxx)
 #  print(chi_sim(xxx))
  # exit(0)

   # showWindow(img_gray)
   # _simg = cv2.adaptiveThreshold(xxx, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 7, 7)
   # showWindow(_simg)
   # print(chi_sim(_simg))

   img_blur = cv2.GaussianBlur(xxx, (7,7), 0)
   showWindow(img_blur)
   img_th3 = cv2.adaptiveThreshold(img_blur, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 5, 5)
   showWindow(img_th3)
 #  print(chi_sim(img_th3))

   kernel = np.ones((9, 15), np.uint8)
   x = cv2.morphologyEx(img_th3, cv2.MORPH_CLOSE, kernel)
   showWindow(x)

   image, contours, hierarchy = cv2.findContours(x,  cv2.RETR_EXTERNAL , cv2.CHAIN_APPROX_NONE)
   s = cv2.drawContours(img_gray.copy(), contours, -1, (0, 0, 255), 3)
   showWindow(s)
   src_height, src_width = img_gray.shape[:2]
   src_area = src_width * src_height

   names = []
   idcode = "Failed"
   name = None
   name_y = None
   img_rec = img_gray.copy()
 #  print(len(contours))
   for i in range(len(contours)):
       # if idcode != "Failed":
       #     continue
       box = cv2.minAreaRect(contours[i])
       x, y = box[0]
       width, height = box[1]
       if width == 0 or height == 0:
           continue
       if width < height:
           t = width
           width = height
           height = t
       angle = box[2]
       rate = height / width
       if rate < 1:
           rate = width / height
       area_rate = src_area / width / height

       if  1>2:#rate < 1 or rate > 10  or area_rate < 50  or area_rate >= 1000:
           continue
       else:
          # print(str(rate) + " " + str(area_rate))
           angle = box[2]
           img_now = img_gray.copy()
           points = np.int0(cv2.boxPoints(box))
           img_now = cv2.getRectSubPix(im.copy(), (int(width) +10 , 10+int(height)), (int(x), int(y)))
           s = chi_sim(img_now)
         #  print(s)
           showWindow(img_now)
           if (s == None) or (len(s) == 0) or (s == "failed") :
               continue
           if isIdcode(s):
               names.append({"name": s, "x": x, "y": y})
   #
   # print(names)
   # if len(names) == 1:
   #     name = names[0].get("name")
   # elif len(names) >= 2:
   #     names.sort(key=operator.itemgetter("y"))
   #     if len(names) == 3:
   #         name = names[1].get("name")
   #     else:
   #         name = names[0].get("name")
   names.sort(key=operator.itemgetter("x"))
   idcode = ""
   for n in names:
       idcode = idcode + n.get("name")
   print(json.dumps({"idcode":idcode , "name":""}))


package com.ceair.api;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.URLConnection;
import java.nio.charset.Charset;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import com.alibaba.fastjson.JSONObject;
import com.google.common.base.Strings;
import com.google.common.collect.Maps;

@Controller
public class ApiContorller {

	@RequestMapping(value = "home")
	public String homeWeb() {
		int i = 1 ;
		return "home";
	}

	@RequestMapping(value = "upload")
	public String uploadWeb() {
		return "upload";
	}
	
	@RequestMapping(value = "operate")
	public String operateWeb() {
		return "operate";
	}

	@RequestMapping(value = "/upload.do",  produces = "text/html;charset=UTF-8" )
	@ResponseBody
	public  Map<String , String> upload(
			@RequestParam(value = "file", required = true) MultipartFile file,
			HttpServletRequest request) throws IllegalStateException, IOException {
		Map<String , String> map = Maps.newHashMap() ; 
		String path = request.getSession().getServletContext().getRealPath("upload");
		File targetFile = new File(path, file.getOriginalFilename());
		if (!targetFile.exists()) {
			targetFile.mkdirs();
		}
		file.transferTo(targetFile); 
		map.put("status", "seccessed") ;
		map.put("imgPath", targetFile.getAbsolutePath()) ;  
		map.put("imgSrc", "upload/" + file.getOriginalFilename()) ;
		return map ; 
	} 
	
	@RequestMapping(value = "/flightSeatselectionRecog.do",  produces = "text/html;charset=UTF-8" )
	@ResponseBody
	public Map<String , String> flightSeatselectionRecog(@RequestBody JSONObject param) throws IllegalStateException, IOException {
		Map<String , String> map = Maps.newHashMap() ; 
		String imgPath = param.getString("imgPath") ;  
		String json = "" ;
		try {  
            Process pr = Runtime.getRuntime().exec("python C:/iguardPy/laige_api.py " + imgPath) ;  
            BufferedReader in = new BufferedReader(new InputStreamReader(pr.getInputStream() , "utf-8"));  
            String line;  
            while ((line = in.readLine()) != null) {  
                json += line ;  
            }  
            in.close();  
            pr.waitFor();  
        } catch (Exception e) {  
            e.printStackTrace();  
	    }  
		map.put("status", "seccessed") ;
		map.put("mu_code", json) ; 
		
		return map ; 
	}
	
	@RequestMapping(value = "/idcardRecog.do",  produces = "text/html;charset=UTF-8" )
	@ResponseBody
	public Map<String , String> idcardRecog(@RequestBody JSONObject param) throws IllegalStateException, IOException {
		Map<String , String> map = Maps.newHashMap() ; 
		String imgPath = param.getString("imgPath") ;  
		String json = "" ;
		String idcode = "" ;
		String name = "" ;
		try {  
            Process pr = Runtime.getRuntime().exec("python C:/iguardPy/laige/idcard.py " + imgPath) ;  
            BufferedReader in = new BufferedReader(new InputStreamReader(pr.getInputStream() , "utf-8"));  
            String line;  
            while ((line = in.readLine()) != null) {   
                json +=  new String(line.getBytes("iso-8859-1"),"utf-8")   ;  
            }   
            JSONObject jo = JSONObject.parseObject(json) ;    
            idcode = jo.getString("idcode") ;
            name = jo.getString("name") ; 
            in.close();  
            pr.waitFor();  
        } catch (Exception e) {  
            e.printStackTrace();  
	    }  
		map.put("status", "seccessed") ;
		map.put("mu_msg", "身份证号 "+ idcode + "    ,姓名 " + name) ;  
		return map ; 
	}
	
	@RequestMapping(value = "/psscardRecog.do",  produces = "text/html;charset=UTF-8" )
	@ResponseBody
	public Map<String , String> psscardRecog(@RequestBody JSONObject param) throws IllegalStateException, IOException {
		Map<String , String> map = Maps.newHashMap() ; 
		String imgPath = param.getString("imgPath") ;  
		String json = "" ;
		String idcode = "" ;
		String name = "" ;
		try {  
            Process pr = Runtime.getRuntime().exec("python C:/iguardPy/psscard.py " + imgPath) ;  
            BufferedReader in = new BufferedReader(new InputStreamReader(pr.getInputStream() , "utf-8"));  
            String line;  
            while ((line = in.readLine()) != null) {   
                json +=  new String(line.getBytes("iso-8859-1"),"utf-8")   ;  
            }   
            JSONObject jo = JSONObject.parseObject(json) ;    
            idcode = jo.getString("idcode") ;
            name = jo.getString("name") ; 
            in.close();  
            pr.waitFor();  
        } catch (Exception e) {  
            e.printStackTrace();  
	    }  
		map.put("status", "seccessed") ;
		map.put("mu_msg", "东航信息卡号 "+ idcode + "    ,姓名 " + name) ;  
		return map ; 
	}
	
	
	@RequestMapping(value = "/muEmbershipCardecog.do",  produces = "text/html;charset=UTF-8" )
	@ResponseBody
	public Map<String , String> muEmbershipCardecog(@RequestBody JSONObject param) throws IllegalStateException, IOException {
		Map<String , String> map = Maps.newHashMap() ; 
		String imgPath = param.getString("imgPath") ;  
		String json = "" ;
		String idcode = "" ;
		String name = "" ;
		try {  
            Process pr = Runtime.getRuntime().exec("python C:/iguardPy/muEmbershipCard.py " + imgPath) ;  
            BufferedReader in = new BufferedReader(new InputStreamReader(pr.getInputStream() , "utf-8"));  
            String line;  
            while ((line = in.readLine()) != null) {   
                json +=  new String(line.getBytes("iso-8859-1"),"utf-8")   ;  
            }   
            JSONObject jo = JSONObject.parseObject(json) ;    
            idcode = jo.getString("idcode") ;
            name = jo.getString("name") ; 
            in.close();  
            pr.waitFor();  
        } catch (Exception e) {  
            e.printStackTrace();  
	    }  
		map.put("status", "seccessed") ;
		map.put("mu_msg", "东航会员卡号 "+ idcode + "    ,姓名 " + name) ;  
		return map ; 
	}
	
	@RequestMapping(value = "/airticketRecog.do",  produces = "text/html;charset=UTF-8" )
	@ResponseBody
	public Map<String , String> airticketRecog(@RequestBody JSONObject param) throws IllegalStateException, IOException {
		Map<String , String> map = Maps.newHashMap() ; 
		String imgPath = param.getString("imgPath") ;  
		String json = "" ;
		String idcode = "" ;
		String name = "" ;
		try {  
            Process pr = Runtime.getRuntime().exec("python C:/iguardPy/airticket.py " + imgPath) ;  
            BufferedReader in = new BufferedReader(new InputStreamReader(pr.getInputStream() , "utf-8"));  
            String line;  
            while ((line = in.readLine()) != null) {   
                json +=  new String(line.getBytes("iso-8859-1"),"utf-8")   ;  
            }   
            JSONObject jo = JSONObject.parseObject(json) ;    
            idcode = jo.getString("idcode") ;
       //     name = jo.getString("name") ; 
            in.close();  
            pr.waitFor();  
        } catch (Exception e) {  
            e.printStackTrace();  
	    }  
		map.put("status", "seccessed") ;
		map.put("mu_msg", "电子客票号 "+ idcode) ;  
		return map ; 
	}
	
	@RequestMapping(value = "/muetktRecog.do",  produces = "text/html;charset=UTF-8" )
	@ResponseBody
	public Map<String , String> muetktRecog(@RequestBody JSONObject param) throws IllegalStateException, IOException {
		Map<String , String> map = Maps.newHashMap() ; 
		String imgPath = param.getString("imgPath") ;  
		String json = "" ;
		String idcode = "" ;
		String name = "" ;
		try {  
            Process pr = Runtime.getRuntime().exec("python C:/iguardPy/muetkt.py " + imgPath) ;  
            BufferedReader in = new BufferedReader(new InputStreamReader(pr.getInputStream() , "utf-8"));  
            String line;  
            while ((line = in.readLine()) != null) {   
                json +=  new String(line.getBytes("iso-8859-1"),"utf-8")   ;  
            }   
            JSONObject jo = JSONObject.parseObject(json) ;    
            idcode = jo.getString("idcode") ;
       //     name = jo.getString("name") ; 
            in.close();  
            pr.waitFor();  
        } catch (Exception e) {  
            e.printStackTrace();  
	    }  
		map.put("status", "seccessed") ;
		map.put("mu_msg", "电子客票号 "+ idcode) ;  
		return map ; 
	}
	 
	
	@RequestMapping(value="/download" )
	public void downloadFile(String fileName ,  HttpServletRequest request , HttpServletResponse response) throws IOException {
		String path = request.getSession().getServletContext().getRealPath("upload") ;
		File file =  new File(path , fileName) ;
		if(!file.exists()){
			String errorMessage = "Sorry. The file you are looking for does not exist";
			OutputStream outputStream = response.getOutputStream();
			outputStream.write(errorMessage.getBytes(Charset.forName("UTF-8")));
			outputStream.close();
			return;
		}
		
		String mimeType= URLConnection.guessContentTypeFromName(file.getName());
		if(Strings.isNullOrEmpty(mimeType)){
			mimeType = "application/octet-stream";
		}
        response.setContentType(mimeType);
        response.setHeader("Content-Disposition", String.format("inline; filename=\"" + file.getName() +"\""));
        response.setContentLength((int)file.length());
		InputStream inputStream = new BufferedInputStream(new FileInputStream(file));
        FileCopyUtils.copy(inputStream, response.getOutputStream());
	}

}

var app = angular.module("home.controller" , ["ngRoute" , "flightSeatselection.controller" , "idcard.controller" , "psscard.controller" , "muEmbershipCard.controller" , "airticket.controller" , "muetkt.controller"]) ;  
  
app.config(function ($routeProvider) {  
    $routeProvider.  
        when('/home', {  
            templateUrl: './page/app/html/flightSeatselection.html',  
            controller: 'flightSeatselectionCtrl'  
        }).  
        when('/operate', {  
            templateUrl: './page/app/html/operate.html',  
        }).  
        when('/flightSeatselection', {  
            templateUrl: './page/app/html/flightSeatselection.html',  
            controller: 'flightSeatselectionCtrl'  
        }).  
        when('/idcard', {  
            templateUrl: './page/app/html/idcard.html',  
            controller: 'idcardCtrl'  
        }).  
        when('/psscard', {  
            templateUrl: './page/app/html/psscard.html',  
            controller: 'psscardCtrl'  
        }).  
        when('/muEmbershipCard', {  
            templateUrl: './page/app/html/muEmbershipCard.html',  
            controller: 'muEmbershipCardCtrl'  
        }).  
        when('/airticket', {  
            templateUrl: './page/app/html/airticket.html',  
            controller: 'airticketCtrl'  
        }).   
        when('/muetkt', {  
            templateUrl: './page/app/html/muetkt.html',  
            controller: 'muetktCtrl'  
        }).   
        otherwise({  
            redirectTo: '/home'  
        });  
});  


var app = angular.module("idcard.controller", []);

app.controller("idcardCtrl", ["$scope", '$http', '$q', function($scope, $http, $q) {
	
	$scope.canDownload = false ;
	$scope.errorMessge = false ; 

	$scope.save = function() {
		$scope.img_path = null ; 
		$scope.mu_msg = "正在上传" ;
		$scope.canDownload = false ;
	    $scope.errorMessge = false ; 
		var fd = new FormData();
		var file = document.querySelector('input[type=file]').files[0];
		fd.append('file', file);
		$http({
				method: 'POST',
				url: "upload.do",
				data: fd,
				headers: { 'Content-Type': undefined },
				transformRequest: angular.identity
			})
			.success(function(response) {
				if(response.status == "seccessed"){
					$scope.img_path = response.imgPath ;  
					$scope.imgSrc = response.imgSrc ;   
					$scope.mu_msg = "上传成功!" ;
				}
				else{
					$scope.img_path = null ; 
					$scope.mu_msg = "上传失败!" ;
				}
			});

	};
	
	$scope.idcardRecog = function() {
		if($scope.img_path == null ){
			alert("请上传!") ;
			return ;
		}
		$scope.mu_msg = "正在识别..." ;
		$scope.canDownload = false ;
	    $scope.errorMessge = false ;  
		$http({
				method: 'POST',
				url: "idcardRecog.do",
				data: {imgPath:$scope.img_path}
			})
			.success(function(response) {
				if(response.status == "seccessed"){
					$scope.mu_msg = "识别结果:" + response.mu_msg ;  
				}
				else{ 
					$scope.mu_msg = "未能识别!" ;  
				}
			}); 
	};

	$scope.downloadServerDetailList = function(fileName) {
		$http.get("download?fileName=" + $scope.fileName , { responseType: 'arraybuffer' })
			.success(function(data, status, headers) {
				var octetStreamMime = 'application/octet-stream';
				var success = false;
				headers = headers();
				var filename = headers['x-filename'] || $scope.fileName  ;
				var contentType = headers['content-type'] || octetStreamMime ;
				try {
					var blob = new Blob([data], { type: contentType });
					if(navigator.msSaveBlob)
						navigator.msSaveBlob(blob, filename);
					else {
						var saveBlob = navigator.webkitSaveBlob || navigator.mozSaveBlob || navigator.saveBlob;
						if(saveBlob === undefined) throw "Not supported";
						saveBlob(blob, filename);
					}
					success = true;
				} catch(ex) {}

				if(!success) {
					var urlCreator = window.URL || window.webkitURL || window.mozURL || window.msURL;
					if(urlCreator) {
						var link = document.createElement('a');
						if('download' in link) {
							try {
								var blob = new Blob([data], { type: contentType });
								var url = urlCreator.createObjectURL(blob);
								link.setAttribute('href', url);
								link.setAttribute("download", filename);
								var event = document.createEvent('MouseEvents');
								event.initMouseEvent('click', true, true, window, 1, 0, 0, 0, 0, false, false, false, false, 0, null);
								link.dispatchEvent(event);
								success = true;
							} catch(ex) {
								console.log(ex);
							}
						}
						if(!success) {
							try {
								var blob = new Blob([data], { type: octetStreamMime });
								var url = urlCreator.createObjectURL(blob);
								window.location = url;
								success = true;
							} catch(ex) {
								console.log(ex);
							}
						}

					}
				}

				if(!success) {
					window.open(httpPath, '_blank', '');
				}
			})
			.error(function(data, status) {
				console.log("Request failed with status: " + status);
				$scope.errorDetails = "Request failed with status: " + status;
			});
	};

}]);

<!DOCTYPE html>  
<html ng-app="home.controller">  
<head>  
  
<meta charset="utf-8">  
<title></title>  
  
<link href="page/common/css/bootstrap.min.css" rel="stylesheet">  
  
<script src="page/common/js/angular.js"></script>  
<script src="page/common/js/angular-animate.min.js"></script>  
<script src="page/common/js/angular-route.min.js"></script>  
  
<script src="page/app/js/home-controller.js"></script>  
<script src="page/app/js/flightSeatselection-controller.js"></script>  
<script src="page/app/js/idcard-controller.js"></script>  
<script src="page/app/js/psscard-controller.js"></script>  
<script src="page/app/js/muEmbershipCard-controller.js"></script>  
<script src="page/app/js/airticket-controller.js"></script>  
<script src="page/app/js/muetkt-controller.js"></script>    
  
</head>  
  
<body>  
    <div class="navbar navbar-inverse">  
       <a class="navbar-brand" href="#/home"></a>  
    </div>   
      
    <div class="panel panel-default row">  
        <div class="col-xs-2">  
                <ul class="nav nav-stacked">  
                  <li><a href="#/flightSeatselection"></a></li>  
                  <li><a href="#/idcard"></a></li>  
                   <li><a href="#/psscard"></a></li>  
                    <li><a href="#/muEmbershipCard"></a></li>  
                   <li><a href="#/airticket"></a></li>  
                   <li><a href="#/muetkt"></a></li>  
                </ul>  
        </div>          
        <div class="col-xs-8">  
              <div ng-view=""></div>  
        </div>  
    </div>  
</body>  
</html>  

<div class="panel panel-default">
	<div class="panel-heading">
		<h3 class="panel-title">选择...图像</h3>
	</div>
	<div class="panel-body">
		<input type="file" file-model="myFile">
		<div class="btn-group">  
		       <button type="button" class="btn btn-primary" ng-click="save()">上传</button>
		       <button type="button" class="btn btn-primary" ng-click="idcardRecog()">识别</button>
		</div>
		
		<div  class="alert alert-danger">
		      {{mu_msg}}  
		</div>
		<br> 
		<img alt="" src="{{imgSrc}}"  width="800" height="800">

		<div ng-show="canDownload">
		   <h2>	<a href="" ng-click="downloadServerDetailList()">{{fileName}}</a> </h2>
		</div>
		
		
		
		<br>
		<br>
		<br>
		<br>
		<br>
		<br>
		<br>
		<br>
		<br>
		<br>
		<br>
		<br>
		<br>
		<br>
		<br>
		<br>

	</div>
</div>



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值