美文网首页
血常规检验报告的图像OCR识别

血常规检验报告的图像OCR识别

作者: 王剑_a9e1 | 来源:发表于2018-11-01 16:06 被阅读0次

    血常规检验报告的图像OCR识别

    用户上传一张血常规报告单的图片,提交的结果是图片存储到了mongodb数据库得到一个OID或到指定目录到一个path。图片识别得到一个json数据存储到了mongodb数据库得到一个OID,json数据。自动截取目标区域,不同旋转角度的图片自动准备截取目标区域,处理。ocr识别得出每项的数值,上部是原始图片,下部是一个显示识别数据的表格,以便对照识别结果。最后根据血常规检验的各项数据预测年龄和性别。

    代码

    https://git.coding.net/wangjjj/np2016.git

    运行环境

    # 安装numpy,
    sudo apt-get install python-numpy # http://www.numpy.org/
    # 安装opencv
    sudo apt-get install python-opencv # http://opencv.org/
    
    ##安装OCR和预处理相关依赖
    sudo apt-get install tesseract-ocr
    sudo pip install pytesseract
    sudo apt-get install python-tk
    sudo pip install pillow
    
    # 安装Flask框架、mongo
    sudo pip install Flask
    sudo apt-get install mongodb # 如果找不到可以先sudo apt-get update
    sudo service mongodb started
    sudo pip install pymongo
    
    # 安装tensorflow
    $ sudo apt-get install python-numpy
    $ sudo apt-get install python-imaging
    $ pip install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.12.0rc0-cp27-none-linux_x86_64.whl
    

    运行

    cd  BloodTestReportOCR
    python view.py # upload图像,在浏览器打开http://yourip:8080
    

    运行结果

    1. web首页,可进行血常规检验报告图片的上传


    2. 提交图片系统显示处理过的合格图片


    3. 点击生成报告得出识别结果


    4. 点击预测,得出结果


    项目模块

    1. 图片处理及orc识别
    • 对整张图片做预处理及线段检测
    #灰度化
    img_gray = cv2.cvtColor(self.img, cv2.COLOR_BGR2GRAY)
    #高斯平滑
    img_gb = cv2.GaussianBlur(img_gray, (gb_param,gb_param), 0)
    #canny算子边缘检测
    edges = cv2.Canny(opened, canny_param_lower , canny_param_upper)
    #调用CV2模块的findContours提取矩形轮廓,筛选对角线大于阀值的轮廓
    contours, hierarchy = cv2.findContours(edges, cv2.RETR_TREE,
     cv2.CHAIN_APPROX_SIMPLE)
    #求最小外接矩形
    def getbox(i):
                rect = cv2.minAreaRect(contours[i])
                box = cv2.cv.BoxPoints(rect)
                box = np.int0(box)
                return 
    

    将轮廓变成线:比较最小外接矩形相邻两条边的长短,以两条短边的中点作为线的两端;
    若线数量大于三则根据线长短继续筛选长线。根据三条线间的距离确定表格头部和内容的位置;


    • 透视变换
    #使用透视变换将表格区域转换为一个1000*760的图
    PerspectiveMatrix = cv2.getPerspectiveTransform(points,standard)
    
    self.PerspectiveImg = cv2.warpPerspective(self.img,PerspectiveMatrix, (1000, 760))
    
    • 将图片内容分割为个别的数据,返回正面图与报告单内容每项的剪切图 ,在temp_pics文件夹中生成


    • 对每份数据调用pytesserac的OCR库进行识别
    1. 预测

    相关文章

      网友评论

          本文标题:血常规检验报告的图像OCR识别

          本文链接:https://www.haomeiwen.com/subject/enbtxqtx.html