超轻量级中文ocr,OcrLiteOnnx文字识别

news/2024/11/19 10:25:08/

原项目地址:https://github.com/benjaminwan/OcrLiteOnnx

本文是基于原项目编译好后的OcrLiteOnnx文字识别系统,可以实现提取图片中的文字及文字中心点坐标等功能。

相较于Tesseract这个OCR来说文字识别的准确度要高很多,识别速度也会快,而且可以在本地适配好对应api接口,整个OcrLiteOnnx项目压缩后仅有14M左右,移植起来相对简单。

OcrLiteOnnx的目录结构及使用方法:

目录结构:

image目录中ocrliteonnx.PNG文件是需要识别的图片文件,默认位置设置在这个目录下,也可以自行更改(同时需要修改run-test.bat中的图片路径)。

models目录中存放已经训练好了的模型。

win_x64目录中存放已经编译好之后的exe文件。

使用方法:

通过调用run-test.bat批处理文件,可以将/image/ocrliteonnx.PNG路径图片中的文字识别出来,并保

存到ocrliteonnx.PNG-result.txt中,以下检测文字是否存在以及获取图片中文字中心点坐标均是通过对

ocrliteonnx.PNG-result.txt文件进行解析得到的结果。

移植方法:

首先将在项目bat文件中配置好需要识别图片路径,然后再执行bat文件,确认可以正常识别图片中的文字及坐标等信息,正常解析处图片后会在图片当前目录下自动生成*result.jpg和*result.txt文件。

将本项目文件夹拷贝到需要移植的自动化工程目录下,通过调用bat文件识别指定目录下的图片文件,然后对结果进行解析获取图片中的文字及坐标信息。

以下是基于python已经做好了的检测图片/窗口中是否存在指定文字、获取指定图片/窗口中对应字段的中心的坐标。

1.check_if_text_in_image:检测图片中是否含有指定text字段

2.check_if_text_in_window:检测指定窗口中是否含有text字段

3.get_text_position_by_image:返回图片中text字段的中心位置坐标

4.get_text_position_in_window:返回指定窗口中text字段的中心位置坐标,不唯一则返回第一个位置坐标

#! /usr/bin/env python3
# coding=utf-8import os
import time
import win32gui
import pyautoguiclass OcrLiteOnnxApi:def config_runtest(self, path):# 修改run-test.bat中默认图片文件路径runtest_path = os.getcwd() + "\\run-test.bat"file_data = ""with open(runtest_path, "r", encoding="utf8") as f:for line in f.readlines():if "SET TARGET_IMG=" in line:line = line.replace(line.split("=")[1], path) + "\n"file_data += linewith open(runtest_path, "w", encoding="utf8") as f:f.write(file_data)def anayse_result(self):# 执行run-test.bat并获取其返回值[text, position, crnntime]os.chdir(os.getcwd())res = os.popen("run-test.bat", "r")result = res.buffer.readlines()TextBox, crnnTime, textLine, ocrliteonnx = [], [], [], []for line in result:trs_code = str(line, encoding="utf8").strip()if "TextBox[" in trs_code:text = trs_code.rstrip("]\n").split("),")[1] + "]"x1 = text.strip().split("x:")[1].split(",")[0]x2 = text.strip().split("x:")[2].split(",")[0]y2 = text.strip().split("y:")[2].split("],")[0]y3 = text.strip().split("y:")[3].split("],")[0]text_pos = (int(int(x1)/2 + int(x2)/2), int(int(y2)/2 + int(y3)/2))TextBox.append(text_pos)elif "crnnTime[" in trs_code:crnnTime.append(trs_code.strip(")").split("](")[1])elif "textLine[" in trs_code:textLine.append(trs_code.strip(")").split("(")[1])elif "FullDetectTime(" in trs_code:FullDetectTime = trs_code.strip(")").split("(")[1]ocrliteonnx.append(f"FullDetectTime:{FullDetectTime}")print(f"FullDetectTime:{FullDetectTime}")for i in range(len(TextBox)):ocrliteonnx.append([textLine[i], TextBox[i], crnnTime[i]])return ocrliteonnxdef check_if_text_in_image(self, text, image_path=None):# 判断图片中是否含有指定text字段if image_path is not None:OcrLiteOnnxApi().config_runtest(path=image_path)image_ocr = OcrLiteOnnxApi().anayse_result()for line in image_ocr:if text in line[0]:print(f"图片中存在{text}字段")return Trueprint(f"未在图片中找到{text}字段")return Falsedef check_if_text_in_window(self, text, title_name):# 检测title_name窗口中是否含有text字段try:image_path = os.getcwd() + "\\image\\ocrliteonnx.PNG"hwnd = win32gui.FindWindow(None, title_name)left, top, right, bottom = win32gui.GetWindowRect(hwnd)time.sleep(0.01)pyautogui.screenshot(image_path, [left, top, right - left, bottom - top])time.sleep(0.01)image_ocr = OcrLiteOnnxApi().anayse_result()for line in image_ocr:if text in line[0]:print(f"{title_name}窗口中存在{text}字段")return Trueprint(f"{title_name}窗口中不存在{text}字段")return Falseexcept Exception as e:print(e)return Falsedef get_text_position_by_image(self, text, image_path=None):# 返回图片中text字段的中心位置坐标if image_path is not None:OcrLiteOnnxApi().config_runtest(path=image_path)image_ocr = OcrLiteOnnxApi().anayse_result()for line in image_ocr:if text in line[0]:print(f"{text} 中心点坐标:{line[1]}")return line[1]print(f"未在图片中找到{text}字段")return Nonedef get_text_position_in_window(self, text, title_name=None):# 返回指定窗口(title_name=None时则在全屏窗口中匹配text字段)中text字段的中心位置坐标,不唯一则返回第一个位置坐标try:image_path = os.getcwd() + "\\image\\ocrliteonnx.PNG"left, top, right, bottom = 0, 0, 0, 0OcrLiteOnnxApi().config_runtest(image_path)if title_name is not None:hwnd = win32gui.FindWindow(None, title_name)left, top, right, bottom = win32gui.GetWindowRect(hwnd)time.sleep(0.01)pyautogui.screenshot(image_path, [left, top, right-left, bottom-top])else:pyautogui.screenshot(image_path)time.sleep(0.01)image_ocr = OcrLiteOnnxApi().anayse_result()for line in image_ocr:if text in line[0]:position = (left + line[1][0], top + line[1][1])print(f"{text} 中心点坐标:{position}")return positionprint(f"未在{title_name}窗口中找到{text}字段")return Noneexcept Exception as e:print(e)return Noneif __name__ == "__main__":time.sleep(5)OcrLiteOnnxApi().get_text_position_in_window("我的手机")

在全屏窗口中匹配"我的手机"字段,并返回该字段中心的坐标,示例如下:

D:\Python37\python.exe D:/OcrLiteOnnx/ocrliteonnx_api.py
FullDetectTime:2559.871300ms
我的手机 中心点坐标:(1091, 701)进程已结束,退出代码0

图片文字识别示例(其中有极个别文字识别错误,放大文字字体后可以正常识别出来):

项目分享链接:https://pan.baidu.com/s/11lqYr8tIyYbCF8yJKxEA0g?pwd=h6dv


http://www.ppmy.cn/news/404536.html

相关文章

c++初始化vector的几种方法

在C中,vector是一种动态数组,可以在运行时自由添加、删除元素。初始化vector是创建一个vector对象并为其分配内存空间的过程。以下是C中初始化vector的几种方法: 默认构造函数 使用默认构造函数创建一个空的vector,如下所示&…

OCR文字识别软件哪个好?7大文字识别软件

由于从各种文档中提取文本的需求非常普遍,许多办公软件或公司都提供了OCR工具。在本文中,我们为您推出了一系列功能强大且易于使用的最佳 OCR 软件。 什么是 OCR 软件? OCR 软件是一种程序或工具,可以使用光学字符识别技术识别数…

Android集成百度OCR图片文字识别——总结

近期由于工作内容的需要,我要给项目集成一个图片文字识别功能,据说百度的不错,所以今天写一个关于百度OCR的集成总结,以便以后再次使用不用去看官方文档。 首先肯定是要在百度管理平台注册账号并登录,然后照常去添加应…

超轻量级中文OCR,支持竖排文字识别、ncnn推理,总模型仅17M

整理 | AI科技大本营 光学字符识别(OCR)技术已经得到了广泛应用。比如发票上用来识别关键字样,搜题App用来识别书本上的试题。 近期,这个叫做chineseocr_lite的OCR项目开源了,这是一个超轻量级中文ocr,支持…

百度文字识别(OCR)服务-傻瓜式

1.注册百度账号 进入百度开发者中心-百度智能云,直接按图操作,领取免费资源、创建应用。少说话,开撸 百度开发者中心-汇聚、开放、助力、共赢百度开发者中心是一个面向开发者的知识分享平台,专注于为开发者打造一个有温度的技术…

百度OCR文字识别在Android的应用(一)纯图版,超详细

百度OCR文字识别在Android的应用 最近OCR越来越火,大部分项目上面都会集成图像识别的功能,于是就入坑亲测了一下,过程中也遇到过一些困难,不过都解决了,下面是集成的一些经验与大家分享一下:用步骤来描述。…

ABBYY最新15版同时可用OCR文字识别和PDF编辑

ABBYY FineReader是一款超强大的OCR识别软件,ABBYY 轻松将任意文档转换成您需要的可编辑、引用、归档、搜索或分享的信息!ABBYY FineReader 通过将纸质文档、PDF文件和数码照片中的文字转换成可编辑、可搜索的文件,让您的电脑处理更具效率&am…

Android NCNN识别文字(OCR)

效果 动态识别: 触发识别 资源 文章依赖开源库 GitHub - cmdbug/YOLOv5_NCNN: 🍅 Deploy ncnn on mobile phones. Support Android and iOS. 移动端ncnn部署,支持Android与iOS。🍅 Deploy ncnn on mobile phones. Support Andr…