当前位置: 首页 > 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格式示例数据:

三、文本格式示例数据

http://www.lryc.cn/news/268342.html

相关文章:

  • ubuntu 安装docker GPG error缺少公钥解决方法
  • Laravel的知识点
  • STM32 基础知识(探索者开发板)--103讲 通用定时器
  • mysqld_exporter使用
  • Java 解决远程调用 ssl 证书认证问题
  • kubernetes(k8s) Yaml 文件详解
  • 手拉手后端Springboot整合JWT
  • 小狐狸GPT付费2.4.9 去除授权弹窗版
  • Scrapy爬虫中合理使用time.sleep和Request
  • 在Spring Cloud中使用Ribbon完成一个简单的负载均衡demo
  • mysql-5.6.16的内存泄漏问题
  • 相机内参标定理论篇------相机模型选择
  • java设计模式学习之【状态模式】
  • 使用aspose.Words更新表格列宽
  • pycharm 工具栏不见了
  • 图灵日记之java奇妙历险记--类和对象
  • Kotlin 枚举类
  • 可运营的Leadshop开源商城小程序源码 +H5公众号+带视频教程
  • Qt底层机制之对象树总结
  • QT C++ TCP Socket 请求心知天气
  • 双向链表的实现及头尾插入删除
  • C语言—每日选择题—Day62
  • 基于 Sentry 的前端监控系统搭建(Linux)
  • 【C++入门到精通】Lock_guard与Unique_lock C++11 [ C++入门 ]
  • 电路设计(8)——计时器的multism仿真
  • Jmeter测试实践:文件下载接口
  • PyQt5实现学生管理系统第三天(下)
  • 第4章 | 安徽某高校《统计建模与R软件》期末复习
  • localforage本地存储(融合Web Storage,Web SQL Database,ndexedDB三种前端存储)
  • 【JavaWeb学习笔记】17 - ThreadLocal