前情提要
经过上一篇的数据收集,我们已经有了足够做简历解析的数据,在开始解析简历内容前,您还需要OCR识别。
什么是OCR识别,以及为什么简历解析需要OCR识别呢?下面来做介绍。
OCR介绍
将图片翻译成文字一般被称为光学文字识别(Optical Character Recognition,OCR)。可以实现OCR 的底层库并不多,目前很多库都是使用共同的几个底层OCR 库,或者是在上面进行定制。
如何体现
简历解析时我们一般上传HTML,pdf,doc,docx,图片等格式的文档进行解析,HTML,pdf,doc,docx我们可以凭借第三方工具直接拿到文本,图片我们往往不能直接拿到文本,这时就需要OCR识别去识别图片中的文本。下面介绍我们如果不调用第三方OCR接口,自己实现OCR如何去做。主要围绕Tesseract,easyOCR,PaddleOcr等工具来说明。
Tesseract介绍
Tesseract 是一个OCR 库,目前由Google 赞助(Google 也是一家以OCR 和机器学习技术闻名于世的公司)。Tesseract 是目前公认最优秀、最精确的开源OCR 系统。
除了极高的精确度,Tesseract 也具有很高的灵活性。它可以通过训练识别出任何字体(只要这些字体的风格保持不变就可以),也可以识别出任何Unicode 字符。
Tesseract的安装与使用
1、安装pytesseract库
tesseract底层由c++开发,pytesseract是Tesseract关于Python的接口,可以使用pip install pytesseract安装。安装完后,就可以使用Python调用Tesseract了,不过,你还需要一个Python的图片处理模块,可以安装pillow。
pip install pytesseract,pillow 即可。
2、安装pytesseract-ocr工具
pytesseract库是python的函数库,其依赖于tesseract-ocr工具的运行,因此需要下载安装tesseract-ocr(tesseract),并将其与pytesseract库进行关联设置。注意:安装时应该选中中文包!
Windows 用户
Tesseract的Windows安装包下载地址为:Home · UB-Mannheim/tesseract Wiki · GitHub
分为32位,64位下载对应版本即可。下载后双击直接安装即可。安装完后,需要将Tesseract添加到系统变量中。在CMD中输入tesseract -v, 如显示以下界面,则表示Tesseract安装完成且添加到系统变量中。
Linux 用户
Linux 用户可以通过apt-get 安装:sudo apt-get tesseract-ocr
Tesseract注意事项
用Tesseract可以识别格式规范的文字,主要具有以下特点:
• 使用一个标准字体(不包含手写体、草书,或者十分“花哨的”字体)
• 虽然被复印或拍照,字体还是很清晰,没有多余的痕迹或污点
• 排列整齐,没有歪歪斜斜的字
• 没有超出图片范围,也没有残缺不全,或紧紧贴在图片的边缘
• 彩色图片的识别效果没有黑白图片的效果好
Tesseract关联设置
在pytesseract安装路径下(路径一般为:....../lib/site-packages\pytesseract\pytesseract.py”)找到pytesseract.py文件,打开文件修改如下语句:
上面的路径是pytesseract-ocr工具的安装路径。
Tesseract语言包安装
安装不同语言语言包。
官方提供GitHub - tesseract-ocr/tessdata: Trained models with support for legacy and LSTM OCR engine,下载zip包后放入tesseract-ocr工具包目录。
Tesseract本身也可以训练自己的语言包,进而扩展语言库。
https://pypi.tuna.tsinghua.edu.cn/simple
pip install paddlepaddle==2.0.1 -i https://mirror.baidu.com/pypi/simple
示例代码
import cv2
try:
from PIL import Image
except ImportError:
import Image
import pytesseract
def recognizeCode():
im = Image.open("kll.png")
im = cv2.imread("kll.png")
text = pytesseract.image_to_string(im, lang='chi_sim')
print(text)
需要安装opencv或者pillow
EasyOcr介绍
EasyOCR是一款用python语言编写的OCR第三方库,同时支持GPU和CPU,还提供了可直接运行的命令行工具,目前已经支持超过70种语言,当然,中文也是支持的,项目地址是: GitHub - JaidedAI/EasyOCR: Ready-to-use OCR with 80+ supported languages and all popular writing scripts including Latin, Chinese, Arabic, Devanagari, Cyrillic and etc.
示例代码:
if __name__ == '__main__':
# recognizeCode()
import easyocr
reader = easyocr.Reader(['ch_sim', 'en'])
text = reader.readtext('3.jpg', detail=0)
print(text)
对比
经实际操作后发现,对于汉字较多的图片,未经过训练的tesseract识别精准度远远没有easyocr精准度高,然而,tesseract对于英文的识别精准度高于easyocr。
PaddleOcr介绍
PaddleOCR 是基于飞桨的 OCR 工具库,包含总模型仅8.6M的超轻量级中文 OCR,单模型支持中英文数字组合识别、竖排文本识别、长文本识别。同时支持多种文本检测、文本识别的训练算法。
项目地址:OCR
示例代码:
# encoding: utf-8
import cv2 as cv
from paddleocr import PaddleOCR
def ocr_img(ocr, img):
img_rest = None
if img.shape[0] > 2000:
img_rest = img[2000:, :]
img = img[0:2000, :]
text = ocr.ocr(img, cls=True) # 打开图片文件
# 打印所有文本信息
for t in text:
print(t[1][0])
if img_rest is not None:
ocr_img(ocr, img_rest)
if __name__ == '__main__':
ocr = PaddleOCR(use_angle_cls=True, use_gpu=False) # 使用CPU预加载,不用GPU
img = cv.imread("2.png")
ocr_img(ocr, img)
经实际验证发现,paddleOcr只能识别高度2000px以内的图片,超过2000px就需要剪切图片,并循环读取,每次读取2000px,直到最后一次读取小于2000px为止。
识别的图片:
运行结果:
[2022/07/05 18:56:13] ppocr DEBUG: Namespace(alpha=1.0, benchmark=False, beta=1.0, cls_batch_num=6, cls_image_shape='3, 48, 192', cls_model_dir='C:\\Users\\admin/.paddleocr/whl\\cls\\ch_ppocr_mobile_v2.0_cls_infer', cls_thresh=0.9, cpu_threads=10, crop_res_save_dir='./output', det=True, det_algorithm='DB', det_db_box_thresh=0.6, det_db_score_mode='fast', det_db_thresh=0.3, det_db_unclip_ratio=1.5, det_east_cover_thresh=0.1, det_east_nms_thresh=0.2, det_east_score_thresh=0.8, det_fce_box_type='poly', det_limit_side_len=960, det_limit_type='max', det_model_dir='C:\\Users\\admin/.paddleocr/whl\\det\\ch\\ch_PP-OCRv2_det_infer', det_pse_box_thresh=0.85, det_pse_box_type='quad', det_pse_min_area=16, det_pse_scale=1, det_pse_thresh=0, det_sast_nms_thresh=0.2, det_sast_polygon=False, det_sast_score_thresh=0.5, draw_img_save_dir='./inference_results', drop_score=0.5, e2e_algorithm='PGNet', e2e_char_dict_path='./ppocr/utils/ic15_dict.txt', e2e_limit_side_len=768, e2e_limit_type='max', e2e_model_dir=None, e2e_pgnet_mode='fast', e2e_pgnet_score_thresh=0.5, e2e_pgnet_valid_set='totaltext', enable_mkldnn=False, fourier_degree=5, gpu_mem=500, help='==SUPPRESS==', image_dir=None, ir_optim=True, label_list=['0', '180'], lang='ch', layout_label_map=None, layout_path_model='lp://PubLayNet/ppyolov2_r50vd_dcn_365e_publaynet/config', max_batch_size=10, max_text_length=25, min_subgraph_size=15, mode='structure', ocr_version='PP-OCRv2', output='./output', precision='fp32', process_id=0, rec=True, rec_algorithm='CRNN', rec_batch_num=6, rec_char_dict_path='E:\\Python38\\lib\\site-packages\\paddleocr\\ppocr\\utils\\ppocr_keys_v1.txt', rec_image_shape='3, 32, 320', rec_model_dir='C:\\Users\\admin/.paddleocr/whl\\rec\\ch\\ch_PP-OCRv2_rec_infer', save_crop_res=False, save_log_path='./log_output/', scales=[8, 16, 32], show_log=True, structure_version='STRUCTURE', table_char_dict_path=None, table_char_type='en', table_max_len=488, table_model_dir=None, total_process_num=1, type='ocr', use_angle_cls=True, use_dilation=False, use_gpu=False, use_mp=False, use_onnx=False, use_pdserving=False, use_space_char=True, use_tensorrt=False, vis_font_path='./doc/fonts/simfang.ttf', warmup=False)
[2022/07/05 18:56:14] ppocr DEBUG: dt_boxes num : 37, elapse : 0.4443471431732178
[2022/07/05 18:56:15] ppocr DEBUG: cls num : 37, elapse : 0.4598731994628906
[2022/07/05 18:56:17] ppocr DEBUG: rec_res num : 37, elapse : 2.8309073448181152
14:21
X
简历预览
园基本信息
姓名已隐藏(保险勿扰)
女|23岁(1996/08/09)
未婚|3年工作经验
手机号码:
手机已隐藏
户口/国籍:
大连
求职状态:
目前正在找工作
邮箱:
邮箱已隐藏
居住地:
大连
年收入:
8万元
邑工作经验
2018/2一至今[1年6个月
人事主管后勤部
大连宝瑞轩拍卖有限公司
信托/担保/拍卖/典当|民营公司|50-150人
工作描述:
人事主管兼行政主管
1.考勤。统计员工出勤率,制作出勤表,协助计算薪资、
福利。
2.招聘。发布招聘启事、收集汇总应聘资料、安排面试人
员、跟踪落实面试人员情况,面试
3.培训。给新员工培训。
4.管理员工信息资料及编辑各类人事资料。
5.办理员工的入职,离职,签劳动合同。
6.员工保险的缴纳
[2022/07/05 18:56:18] ppocr DEBUG: dt_boxes num : 30, elapse : 0.3231930732727051
[2022/07/05 18:56:18] ppocr DEBUG: cls num : 30, elapse : 0.3384261131286621
[2022/07/05 18:56:21] ppocr DEBUG: rec_res num : 30, elapse : 3.2104573249816895
7.参加各个天小型招聘会。
8.公司的各种办公用品和其他东西的采买。
9.公司的水电费和其他费用的缴纳等等。
下属:5人「汇报人:总经理
离职原因:
个人原因。
2016/11-2018/2[1年3个月]
人事主管人事
大连共享股份
美容/保健|民营公司|50-150人
工作描述:
1.考勤。统计员工出勤率,制作出勤表,协助计算薪资、
福利。
2.招聘。发布招聘启事、收集汇总应聘资料、安排面试人
员、跟踪落实面试人员情况,初试。
3.培训。给新员工培训
4.管理员工信息资料及各类人事资料。
5.办理员工的入职,离职,签劳动合同
6.参加各个大小型招聘会。
2016/7-2016/9[2个月
人事专员|人事
北京携程
信托/担保/拍卖/典当|合资|150-500人
工作描述:
1.考勤。统计员工出勤率,制作出勤表,协助计算薪资、
福利。
2.招聘。发布招聘启事、收集汇总应聘资料、安排面试人
员、跟踪落实面试人员情况。
3.协助人事主管社保公积金缴纳工作。
4.管理员工信息资料及各类人事资料。
[2022/07/05 18:56:22] ppocr DEBUG: dt_boxes num : 28, elapse : 0.3017082214355469
[2022/07/05 18:56:22] ppocr DEBUG: cls num : 28, elapse : 0.31179308891296387
[2022/07/05 18:56:23] ppocr DEBUG: rec_res num : 28, elapse : 1.3785622119903564
教育经历
2014/9-2017/7
铁岭师范高等专科学校
大专|文秘
@求职意向
职能:
人事专员
,人事主管
,招聘经理/主管
,行政/后勤
职位:
人事专员
工作地点:
大连
期望薪资:
4000-6000元/月
到岗时间:
随时
工作类型:
全职
自我评价:
沟通交流能力较强,有上进心,好相处。
平安保险公司,什么保险都勿扰!!!
项目经验
2016/8一至今
招聘人才
所属公司:
大连共享股份
[2022/07/05 18:56:24] ppocr DEBUG: dt_boxes num : 17, elapse : 0.4566915035247803
[2022/07/05 18:56:24] ppocr DEBUG: cls num : 17, elapse : 0.1980576515197754
[2022/07/05 18:56:26] ppocr DEBUG: rec_res num : 17, elapse : 2.3873770236968994
项目描述:
1.考勤。统计员工出勤率,制作出勤表,协助计算薪资、
福利。
2.招聘。发布招聘启事、收集汇总应聘资料、安排面试人
员、跟踪落实面试人员情况
3.员工入职离职的办理。
4.参加各人大小型招聘会
5.协助人事主管社保公积金缴纳工作。
6.管理员工信息资料及各类人事资料。
7.打电话邀约客户。
金在校情况
校内职务
2014/10-2017/7
校学生会干部,院学生会干部,班级生活委员
职务描述:
学校和院里的公寓管理,班级的卫生和班费。
经过对别发现,未训练的paddleOcr明显效果好于前两者,同时对于长图的识别精确度也较高。
同样的长图,经过tesseract以及easyOcr识别已经乱码。