使用ModelScope社区搭建OCR应用

本文涉及的产品
NLP自然语言处理_高级版,每接口累计50万次
NLP自然语言处理_基础版,每接口每天50万次
NLP 自学习平台,3个模型定制额度 1个月
简介: 简介: 本文介绍通过ModelScope来完成光学字符识别(OCR)这一应用,该应用使用两个模型:● 文本检测(ocr_detection)● 文本识别(ocr_recognition)

操作步骤

参考快速开始

环境准备

为了更快的体验产品,这里选择了使用ModelScope提供的远程环境,即Notebook进行开发,更加便捷。

模型调试:文本检测

参考:https://www.modelscope.cn/models/damo/cv_resnet18_ocr-detection-line-level_damo/summary

  • 准备图像文件。
  • 将图像文件上传至notebook(可拖拽),或使用url。
  • 输入下列代码。

from modelscope.pipelines import pipeline

from modelscope.utils.constant import Tasks

import cv2


ocr_detection = pipeline(Tasks.ocr_detection, model='damo/cv_resnet18_ocr-detection-line-level_damo')

# ocr_detection = pipeline(Tasks.ocr_detection, model='damo/cv_resnet18_ocr-detection-word-level_damo')


# read file

img_path = 'ocr_detection.jpg'

img = cv2.imread(img_path)

result = ocr_detection(img)

print(result)


# or read url

img_url = 'https://modelscope.oss-cn-beijing.aliyuncs.com/test/images/ocr_detection.jpg'

result_url = ocr_detection(img_url)

print(result_url)

上面展示的是文本行检测模型的使用方法。

如需使用单词检测模型,请替换为第6行注释的模型,并参考https://www.modelscope.cn/models/damo/cv_resnet18_ocr-detection-word-level_damo/summary

模型调试:文本识别

参考:https://www.modelscope.cn/models/damo/cv_convnextTiny_ocr-recognition-general_damo/summary

  • 准备图像文件。
  • 将图像文件上传至notebook(可拖拽),或使用url。
  • 输入下列代码。

from modelscope.pipelines import pipeline

from modelscope.utils.constant import Tasks

import cv2


ocr_recognition = pipeline(Tasks.ocr_recognition, model='damo/cv_convnextTiny_ocr-recognition-general_damo')

# ocr_recognition = pipeline(Tasks.ocr_recognition, model='damo/cv_convnextTiny_ocr-recognition-scene_damo')

# ocr_recognition = pipeline(Tasks.ocr_recognition, model='damo/cv_convnextTiny_ocr-recognition-document_damo')

# ocr_recognition = pipeline(Tasks.ocr_recognition, model='damo/cv_convnextTiny_ocr-recognition-handwritten_damo')


# read file

img_path = 'ocr_recognition.jpg'

img = cv2.imread(img_path)

result = ocr_recognition(img)

print(result)


# or read url

img_url = 'http://duguang-labelling.oss-cn-shanghai.aliyuncs.com/mass_img_tmp_20220922/ocr_recognition.jpg'

result_url = ocr_recognition(img_url)

print(result_url)

上面展示的是通用文本识别模型的使用方法。

如需使用自然场景文本识别模型,请替换为第6行注释的模型,并参考https://www.modelscope.cn/models/damo/cv_convnextTiny_ocr-recognition-scene_damo/summary

如需使用印刷文档文本识别模型,请替换为第7行注释的模型,并参考https://www.modelscope.cn/models/damo/cv_convnextTiny_ocr-recognition-document_damo/summary

如需使用手写文本识别模型,请替换为第8行注释的模型,并参考https://www.modelscope.cn/models/damo/cv_convnextTiny_ocr-recognition-handwritten_damo/summary

模型调试:检测识别串联

有了上述的基础,我们串联文本检测和文本识别模型,以实现完整的OCR功能,输入下列代码。

from modelscope.pipelines import pipeline

from modelscope.utils.constant import Tasks

import numpy as np

import cv2

import math


# scripts for crop images

def crop_image(img, position):

   def distance(x1,y1,x2,y2):

       return math.sqrt(pow(x1 - x2, 2) + pow(y1 - y2, 2))    

   position = position.tolist()

   for i in range(4):

       for j in range(i+1, 4):

           if(position[i][0] > position[j][0]):

               tmp = position[j]

               position[j] = position[i]

               position[i] = tmp

   if position[0][1] > position[1][1]:

       tmp = position[0]

       position[0] = position[1]

       position[1] = tmp


   if position[2][1] > position[3][1]:

       tmp = position[2]

       position[2] = position[3]

       position[3] = tmp


   x1, y1 = position[0][0], position[0][1]

   x2, y2 = position[2][0], position[2][1]

   x3, y3 = position[3][0], position[3][1]

   x4, y4 = position[1][0], position[1][1]


   corners = np.zeros((4,2), np.float32)

   corners[0] = [x1, y1]

   corners[1] = [x2, y2]

   corners[2] = [x4, y4]

   corners[3] = [x3, y3]


   img_width = distance((x1+x4)/2, (y1+y4)/2, (x2+x3)/2, (y2+y3)/2)

   img_height = distance((x1+x2)/2, (y1+y2)/2, (x4+x3)/2, (y4+y3)/2)


   corners_trans = np.zeros((4,2), np.float32)

   corners_trans[0] = [0, 0]

   corners_trans[1] = [img_width - 1, 0]

   corners_trans[2] = [0, img_height - 1]

   corners_trans[3] = [img_width - 1, img_height - 1]


   transform = cv2.getPerspectiveTransform(corners, corners_trans)

   dst = cv2.warpPerspective(img, transform, (int(img_width), int(img_height)))

   return dst


def order_point(coor):

   arr = np.array(coor).reshape([4, 2])

   sum_ = np.sum(arr, 0)

   centroid = sum_ / arr.shape[0]

   theta = np.arctan2(arr[:, 1] - centroid[1], arr[:, 0] - centroid[0])

   sort_points = arr[np.argsort(theta)]

   sort_points = sort_points.reshape([4, -1])

   if sort_points[0][0] > centroid[0]:

       sort_points = np.concatenate([sort_points[3:], sort_points[:3]])

   sort_points = sort_points.reshape([4, 2]).astype('float32')

   return sort_points


ocr_detection = pipeline(Tasks.ocr_detection, model='damo/cv_resnet18_ocr-detection-line-level_damo')

ocr_recognition = pipeline(Tasks.ocr_recognition, model='damo/cv_convnextTiny_ocr-recognition-general_damo')

img_path = 'ocr_detection.jpg'

image_full = cv2.imread(img_path)

det_result = ocr_detection(image_full)

det_result = det_result['polygons']

for i in range(det_result.shape[0]):

   pts = order_point(det_result[i])

   image_crop = crop_image(image_full, pts)

   result = ocr_recognition(image_crop)

   print("box: %s" % ','.join([str(e) for e in list(pts.reshape(-1))]))

   print("text: %s" % result['text'])

至此,我们已经在代码层面完成了两个模型的调试和串联,并实现了完整的OCR功能。

相关文章
|
4月前
|
人工智能 JSON 搜索推荐
社区供稿 | GLM-4适配ModelScope-Agent最佳实践
GLM-4是由智谱 AI 发布的新一代基座大模型。
|
23天前
|
文字识别 并行计算 PyTorch
MiniCPM-V 系列模型在多模态文档 RAG 中的应用(无需OCR的多模态文档检索+生成)
现在我们以 OpenBMB 基于 MiniCPM-V-2.0 训练的端到端多模态检索模型 MiniCPM-Visual-Embedding-v0 为例,实现无需OCR的多模态文档检索与问答。
MiniCPM-V 系列模型在多模态文档 RAG 中的应用(无需OCR的多模态文档检索+生成)
|
1月前
|
人工智能 开发框架 物联网
赢万元奖金 | 第七届CCF开源创新大赛ModelScope开源模型应用挑战赛开启报名!
第七届CCF开源创新大赛(后简称“大赛”) 由中国计算机学会(CCF)主办,长沙理工大学、CCF开源发展委员会联合承办。
|
4月前
|
人工智能 自然语言处理 搜索推荐
魔搭ModelScope社区作为一个AI模型开源平台,提供了丰富的模型资源和便捷的服务
【2月更文挑战第9天】魔搭ModelScope社区作为一个AI模型开源平台,提供了丰富的模型资源和便捷的服务
386 3
|
2月前
|
机器学习/深度学习 人工智能 文字识别
文本,文字扫描01,OCR文本识别技术展示,一个安卓App,一个简单的设计,文字识别可以应用于人工智能,机器学习,车牌识别,身份证识别,银行卡识别,PaddleOCR+SpringBoot+Andr
文本,文字扫描01,OCR文本识别技术展示,一个安卓App,一个简单的设计,文字识别可以应用于人工智能,机器学习,车牌识别,身份证识别,银行卡识别,PaddleOCR+SpringBoot+Andr
|
2月前
|
存储 文字识别 算法
印刷文字识别使用问题之在企业信息化中有哪些应用解决方案
印刷文字识别产品,通常称为OCR(Optical Character Recognition)技术,是一种将图像中的印刷或手写文字转换为机器编码文本的过程。这项技术广泛应用于多个行业和场景中,显著提升文档处理、信息提取和数据录入的效率。以下是印刷文字识别产品的一些典型使用合集。
|
4月前
|
文字识别
分享:如何ocr识别身份证复印件并导出至excel表格 ? 图片批量识别导出excel表格应用,图片批量识别转excel表格的方法
该软件是一款OCR身份证识别工具,能批量处理图片,自动提取身份证信息并导出为Excel。支持百度网盘和腾讯云盘下载。用户界面直观,操作简单,适合新手。识别过程包括:打开图片、一键识别、导出结果。特别注意,此程序仅适用于身份证识别,不适用于其他类型的图片识别。
分享:如何ocr识别身份证复印件并导出至excel表格 ? 图片批量识别导出excel表格应用,图片批量识别转excel表格的方法
|
4月前
ModelScope中huggingface的创空间spaces下gradio应用能获取user id或者uuid吗?
ModelScope中huggingface的创空间spaces下gradio应用能获取user id或者uuid吗?【1月更文挑战第4天】【1月更文挑战第17篇】
90 1
|
4月前
要将ModelScope的应用检测模型转换为ONNX格式或RKNN格式
要将ModelScope的应用检测模型转换为ONNX格式或RKNN格式
272 1
|
4月前
|
人工智能 Ubuntu Linux
linux配置魔搭社区modelscope时的whl下载中断问题和解决方案
本文提供了断点续传和手动安装两个方案。
199 3

热门文章

最新文章