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

2018-11-01  本文已影响0人  王剑_a9e1

血常规检验报告的图像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))
  1. 预测
上一篇 下一篇

猜你喜欢

热点阅读