当前位置: 首页 > news >正文

基于飞浆OCR的文本框box及坐标中心点检测JSON格式保存文本

OCR的文本框box及JSON数据保存

需求说明

一、借助飞浆框出OCR识别的文本框

二、以圆圈形式标出每个框的中心点位置

三、以JSON及文本格式保存OCR识别的文本

四、以文本格式保存必要的文本信息

解决方法

一、文本的坐标来自飞浆的COR识别
二、借助paddleocr的draw_ocr画出文本的外框
三、中心点由坐标的左上和右下均值得出
四、借助cv2.circle画出中心点

完整代码

import os
from PIL import Image
from paddleocr import PaddleOCR, draw_ocr
import cv2
def ocr_parse(img,parsePath):ocr = PaddleOCR()result = ocr.ocr(img, det=True)img_name = img.split('/')[-1].replace(".jpg", '')image = Image.open(img).convert('RGB')boxes = [line[0] for line in result[0]]im_show = draw_ocr(image, boxes, font_path=r'C:\Windows\Fonts\simfang.ttf')im_show = Image.fromarray(im_show)im_show.save( parsePath + img_name+"_V3.jpg")midimg = cv2.imread(parsePath + img_name+"_V3.jpg", 1)fields = []for field in result:for index, value in enumerate(field):fields.append({"box": field[index][0], "text": field[index][1]})dst_path = os.path.join(parsePath, img_name+'.json')with open(dst_path, 'w', encoding='utf8') as fw:json.dump(fields, fw)with open(dst_path, 'r', encoding='utf8') as fr:data_obj = json.load(fr)val=''for item in data_obj:left_top=item['box'][0]right_bottom=item['box'][2]txt = item['text'][0]center_x=(left_top[0]+right_bottom[0])/2center_y = (left_top[1] + right_bottom[1]) / 2print(left_top,'\t', right_bottom,'\t', txt,'\t',center_x,'\t',center_y)cv2.circle(midimg, (int(center_x),int(center_y)), 8, (0, 0, 255), 2)with open(os.path.join(parsePath, img_name+'.txt'), 'w', encoding='utf-8') as f:val+=str(left_top) + '\t' + str(right_bottom) + '\t' + txt + '\t' + str(center_x) + '\t' + str(center_y)+"\t"+str(int(midimg.shape[1]/2))+"\t"+str(int(midimg.shape[0]/2)) +"\n"f.write(val)f.close()cv2.circle(midimg, (int(midimg.shape[1]/2), int(midimg.shape[0]/2)), 16, (0, 255, 0), 2)cv2.imwrite(os.path.join(parsePath, img_name+'_V3.jpg'), midimg)if __name__ == '__main__':ocr_parse(r'F:/292.jpg',r'F:/output/')

执行结果

一、中心点及文本框:

二、JSON格式示例数据:

三、文本格式示例数据

相关文章:

  • 系列十(实战)、发送 接收批量消息(Java操作RocketMQ)
  • 图像处理-周期噪声
  • 云计算:OpenStack 配置二层物理网卡为三层桥的接口
  • 文件监控-IT安全管理软件
  • 鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之线性布局容器Row组件
  • OpenHarmony城市技术论坛武汉站:探索大模型时代的终端操作系统创新
  • 二叉树的非递归遍历|前中后序遍历
  • android studio导入module
  • 解决:Vue2项目兼容IE,页面出现白屏
  • 单集群400TB,OceanBase稳定支撑快手核心业务场景
  • Django信号机制源码分析(观察者模式)
  • docker学习(二十一、network使用示例container、自定义)
  • 【自然语言处理】【大模型】 ΨPO:一个理解人类偏好学习的统一理论框架
  • Flink1.17实战教程(第二篇:DataStream API)
  • 云原生机器学习平台cube-studio开源项目及代码简要介绍
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • android图片蒙层
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • EOS是什么
  • express如何解决request entity too large问题
  • Git的一些常用操作
  • JavaScript-Array类型
  • MySQL数据库运维之数据恢复
  • node-glob通配符
  • Solarized Scheme
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • vuex 学习笔记 01
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 笨办法学C 练习34:动态数组
  • 工作手记之html2canvas使用概述
  • 基于webpack 的 vue 多页架构
  • 精彩代码 vue.js
  • 如何设计一个比特币钱包服务
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 自制字幕遮挡器
  • gunicorn工作原理
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • ​低代码平台的核心价值与优势
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #每天一道面试题# 什么是MySQL的回表查询
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • (1)SpringCloud 整合Python
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (C语言)逆序输出字符串
  • (第二周)效能测试
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (万字长文)Spring的核心知识尽揽其中
  • (一)python发送HTTP 请求的两种方式(get和post )
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .net refrector
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .NET企业级应用架构设计系列之开场白