当前位置:   article > 正文

[OCR]Python 3 下的文字识别CnOCR_下载cnocr

下载cnocr

目录

1  CnOCR

2 安装

3 实践


1  CnOCR

CnOCR 是 Python 3 下的文字识别Optical Character Recognition,简称OCR工具包

工具包支持简体中文繁体中文(部分模型)、英文数字的常见字符识别,支持竖排文字的识别。同时,自带了20+个训练好的识别模型,适用于不同应用场景,安装后即可直接使用。

同时,CnOCR也提供简单的训练命令供使用者训练自己的模型。

 2 安装

安装cnocr的命令如下:

pip --default-timeout=100 install cnocr -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

下述的字体文件用于实践中的中文识别结果的展示。

①字体文件

    SimSun:宋体

    Microsoft YaHei:微软雅黑

    FangSong:仿宋

    KaiTi:楷体

    STXihei:华文细黑

    STSong:华文宋体

    STKaiti:华文楷体

    STFangsong:华文仿宋

    SimHei:黑体

②下载地址

部分中文字体文件下载

链接: https://pan.baidu.com/s/1pCEreBBHPJKLmWPJmh4OPg 提取码: hope

 3 实践

  • ①代码
  1. from cnocr import CnOcr
  2. import matplotlib.pyplot as plt
  3. from PIL import Image, ImageDraw, ImageFont
  4. import cv2
  5. import numpy as np
  6. def get_bbox(array):
  7. "将结果中的position信息的四个点的坐标信息转换"
  8. x1 = array[0][0]
  9. y1 = array[0][1]
  10. pt1 = (int(x1), int(y1))
  11. x2 = array[2][0]
  12. y2 = array[2][1]
  13. pt2 = (int(x2), int(y2))
  14. return pt1, pt2
  15. def dealImg(img):
  16. b, g, r = cv2.split(img)
  17. img_rgb = cv2.merge([r, g, b])
  18. return img_rgb
  19. def create_blank_img(img_w, img_h):
  20. blank_img = np.ones(shape=[img_h, img_w], dtype=np.int8) * 255
  21. # blank_img[:, img_w - 1:] = 0
  22. blank_img = Image.fromarray(blank_img).convert("RGB")
  23. blank_img = blank_img.__array__()
  24. return blank_img
  25. def Draw_OCRResult(blank_img, pt1, pt2, text):
  26. cv2.rectangle(blank_img, pt1, pt2, color=[255, 255, 0], thickness=3)
  27. data = Image.fromarray(blank_img)
  28. draw = ImageDraw.Draw(data)
  29. fontStyle = ImageFont.truetype("ChineseFonts/simsun.ttc", size=30, encoding="utf-8")
  30. (x, y) = pt1
  31. draw.text((x+5, y+5), text=text, fill=(0, 0, 0), font=fontStyle)
  32. blank_img = np.asarray(data)
  33. # cv2.putText(img, temp["text"], pt1, cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 0, 0), 2)
  34. return blank_img
  35. def _main(img_path):
  36. im = cv2.imread(img_path)
  37. img_h, img_w, _ = im.shape
  38. blank_img = create_blank_img(img_w, img_h)
  39. # 所有参数都使用默认值
  40. ocr = CnOcr()
  41. result = ocr.ocr(img_path)
  42. # print(result)
  43. for temp in result:
  44. print(temp["text"])
  45. # print(temp["score"])
  46. pt1, pt2 = get_bbox(temp["position"])
  47. blank_img = Draw_OCRResult(blank_img, pt1, pt2, temp["text"])
  48. fig = plt.figure(figsize=(10, 10))
  49. im = dealImg(im)
  50. img = dealImg(blank_img)
  51. titles = ["img", "result"]
  52. images = [im, img]
  53. for i in range(2):
  54. plt.subplot(1, 2, i + 1), plt.imshow(images[i], "gray")
  55. plt.title("{}".format(titles[i]), fontsize=20, ha='center')
  56. plt.xticks([]), plt.yticks([])
  57. # plt.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=0.3, hspace=0)
  58. # plt.tight_layout()
  59. plt.show()
  60. fig.savefig('test_results.jpg', bbox_inches='tight')
  61. if __name__ == '__main__':
  62. _main("test.png")
  63. pass
  • ①结果图

  • ②代码
  1. from cnocr import CnOcr
  2. from PIL import Image, ImageDraw, ImageFont
  3. import cv2
  4. import numpy as np
  5. def get_bbox(array):
  6. "将结果中的position信息的四个点的坐标信息转换"
  7. x1 = array[0][0]
  8. y1 = array[0][1]
  9. pt1 = (int(x1), int(y1))
  10. x2 = array[2][0]
  11. y2 = array[2][1]
  12. pt2 = (int(x2), int(y2))
  13. return pt1, pt2
  14. def dealImg(img):
  15. b, g, r = cv2.split(img)
  16. img_rgb = cv2.merge([r, g, b])
  17. return img_rgb
  18. def create_blank_img(img_w, img_h):
  19. blank_img = np.ones(shape=[img_h, img_w], dtype=np.int8) * 255
  20. # blank_img[:, img_w - 1:] = 0
  21. blank_img = Image.fromarray(blank_img).convert("RGB")
  22. blank_img = blank_img.__array__()
  23. return blank_img
  24. def Draw_OCRResult(blank_img, pt1, pt2, text):
  25. cv2.rectangle(blank_img, pt1, pt2, color=[255, 255, 0], thickness=3)
  26. data = Image.fromarray(blank_img)
  27. draw = ImageDraw.Draw(data)
  28. fontStyle = ImageFont.truetype("ChineseFonts/simsun.ttc", size=30, encoding="utf-8")
  29. (x, y) = pt1
  30. draw.text((x+5, y+5), text=text, fill=(0, 0, 0), font=fontStyle)
  31. blank_img = np.asarray(data)
  32. # cv2.putText(img, temp["text"], pt1, cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 0, 0), 2)
  33. return blank_img
  34. def _main(img_path):
  35. im = cv2.imread(img_path)
  36. img_h, img_w, _ = im.shape
  37. blank_img = create_blank_img(img_w, img_h)
  38. # 所有参数都使用默认值
  39. ocr = CnOcr()
  40. result = ocr.ocr(img_path)
  41. # print(result)
  42. for temp in result:
  43. print(temp["text"])
  44. # print(temp["score"])
  45. pt1, pt2 = get_bbox(temp["position"])
  46. blank_img = Draw_OCRResult(blank_img, pt1, pt2, temp["text"])
  47. images = np.concatenate((im, blank_img), axis=1)
  48. cv2.imwrite('OCR_result.jpg', images)
  49. if __name__ == '__main__':
  50. _main("test.png")
  51. pass
  • ②结果图

茫茫人海,遇见便是缘,愿君事事顺心,一切都好。 感恩遇见!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/593626
推荐阅读
相关标签
  

闽ICP备14008679号