使用Python,OpenCV,Tesseract-OCR对自己的运动数据图片进行识别及分析,并使用Matplotlib绘制配速图出来

使用Python,OpenCV,Tesseract-OCR对自己的运动数据图片进行识别及分析,并使用Matplotlib绘制配速图出来

    • 1. 效果图
    • 2. 源码
    • 3. 全量源码及运动图片资源
    • 参考

主要分为

  1. 目录下图片解析及读取;
  2. 拼九宫格图片出来,可以自由配置(m*n)取决于自己有多少张运动图片
  3. 遍历图片并进行运动数据OCR识别,并绘制识别结果在原始图
  4. 对绘制ocr识别文本之后的图片进行拼图呈现;
  5. 使用matplotlib对运动时间、耗时、最快配速、最慢配速、平均配速等数据进行绘制散点图和折线图

1. 效果图

原始图片拼图呈现:
在这里插入图片描述
原图 VS 绘制运动区域绿框图对比展示:
在这里插入图片描述

运动数据区域截图及识别数据绘制原图展示:
在原图右中绘制识别到的数据:
分别是运动时间、距离、运动时长、最快配速、最慢配速、平均配速、消耗卡卡;
可以看到也不是识别的100%准确,有俩天5.19,5.20识别的平均配速和最慢配速不太对…

<think>我们正在使用TesseractOCR进行识别,现在用户想知道如何显示识别结果。根据引用[3]中的Python示例,识别结果已经通过`pytesseract.image_to_string`函数获取打印出来。但是用户可能希望有更直观的显示方式,比如在原上标注识别结果。然而,Tesseract本身不提供可视化功能。我们可以借助其他库(如OpenCV或PIL)来绘制文本框和识别文本。以下是具体步骤:###解决方案1.**使用Tesseract获取OCR结果**:包括文本内容、位置信息(边界框)等。2.**在原绘制识别结果**:利用像处理库绘制文本框和文本。###Python示例代码(使用PIL和pytesseract)```pythonimportpytesseractfromPILimportImage,ImageDraw,ImageFontimportmatplotlib.pyplotasplt#设置Tesseract路径(根据你的安装路径修改)pytesseract.pytesseract.tesseract_cmd=r'C:\ProgramFiles\Tesseract-OCR\tesseract.exe'#Windows示例defdisplay_ocr_result(image_path):#打开图片image=Image.open(image_path)#使用Tesseract获取OCR结果,包括详细数据data=pytesseract.image_to_data(image,lang='chi_sim+eng',output_type=pytesseract.Output.DICT)#创建一个可以在像上绘制的对象draw=ImageDraw.Draw(image)#可选:设置字体(确保系统中存在该字体)try:font=ImageFont.truetype("arial.ttf",15)#Windows系统通常有Arialexcept:font=ImageFont.load_default()#遍历每个检测到的文本块n_boxes=len(data['text'])foriinrange(n_boxes):#只处理置信度大于0的文本(即有效文本)ifint(data['conf'][i])>0:#获取文本框坐标x,y,w,h=data['left'][i],data['top'][i],data['width'][i],data['height'][i]#绘制矩形框draw.rectangle([x,y,x+w,y+h],outline='red')#在框上方绘制识别文本draw.text((x,y-15),data['text'][i],fill='red',font=font)#显示像plt.figure(figsize=(12,12))plt.imshow(image)plt.axis('off')plt.show()#打印所有识别文本print("完整识别结果:")print(pytesseract.image_to_string(image,lang='chi_sim+eng'))if__name__=="__main__":image_path="your_image.png"#替换为你的图片路径display_ocr_result(image_path)```###关键点说明1.**获取详细数据**:`image_to_data`函数返回一个字典,包含文本、位置、置信度等信息[^3]。2.**绘制文本框**:使用PIL的`ImageDraw`模块在检测到的文本周围绘制红色矩形框。3.**标注识别文本**:在每个文本框上方绘制识别出的文本(红色)。4.**显示像**:使用matplotlib显示标注后的像。###输出示例运行后,程序会:-显示带标注的像(文本框和识别文本)-在控制台打印完整的识别文本###注意事项-**字体问题**:如果找不到指定字体(如arial.ttf),将使用默认字体(可能不支持中文)。对于中文,可以指定一个中文字体路径,例如:`font=ImageFont.truetype("simsun.ttc",15)`。-**Tesseract安装**:确保正确安装TesseractOCR设置路径[^3][^5]。-**语言包**:如果需要识别中文,必须安装中文语言包(chi_sim)[^5]。###相关问题1.如何提高TesseractOCR对低质量图片识别准确率?[^4]2.TesseractOCR支持哪些输出格式(如PDF、HOCR)?[^2]3.如何训练TesseractOCR识别特定字体?[^5][^1]:PHP和Tesseract实现验证码识别[^2]:Tesseract支持的语言和格式[^3]:Tesseract安装与中英文识别[^4]:像预处理提高OCR准确率[^5]:Tesseract中文环境置与训练</think>### 如何在 Tesseract OCR 中显示识别结果 以下是使用 Tesseract OCR 识别显示结果的完整方法(Python 实现): ```python import pytesseract from PIL import Image, ImageDraw, ImageFont import matplotlib.pyplot as plt # 设置 Tesseract 路径(根据实际安装路径修改) pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe' # Windows def display_ocr_results(image_path): """显示 OCR 识别结果(带标注的像)""" # 打开像 image = Image.open(image_path) # 执行 OCR 识别获取详细数据 data = pytesseract.image_to_data( image, lang='chi_sim+eng', # 中英文混合识别 output_type=pytesseract.Output.DICT ) # 创建可绘制对象 draw = ImageDraw.Draw(image) # 设置字体(确保系统中存在该字体) try: font = ImageFont.truetype("arial.ttf", 12) # Windows except: font = ImageFont.load_default() # 备用默认字体 # 遍历所有识别到的文本块 for i in range(len(data['text'])): # 只处理置信度>0的有效文本 if int(data['conf'][i]) > 0: # 提取坐标和尺寸 x = data['left'][i] y = data['top'][i] w = data['width'][i] h = data['height'][i] # 绘制边界框 draw.rectangle( [x, y, x + w, y + h], outline="red", width=2 ) # 在框上方显示识别文本 draw.text( (x, y - 15), # 文本位置 f"{data['text'][i]} ({int(float(data['conf'][i]))}%)", fill="blue", font=font ) # 显示带标注的像 plt.figure(figsize=(15, 10)) plt.imshow(image) plt.axis('off') plt.title("OCR 识别结果") plt.show() # 打印结构化识别结果 print("\n识别结果详情:") print(f"{'文本':<20} | {'置信度':<8} | {'位置'}") print("-" * 50) for i in range(len(data['text'])): if data['text'][i].strip(): print(f"{data['text'][i]:<20} | {data['conf'][i]:<8} | (x:{data['left'][i]}, y:{data['top'][i]})") # 使用示例 image_path = "your_image.png" # 替换为实际图片路径 display_ocr_results(image_path) ``` ### 关键功能说明 1. **结果可视化**: - 红色矩形框标记识别区域 - 蓝色文本显示识别内容和置信度 - 使用 Matplotlib 显示标注后的像 2. **数据结构化输出**: ```plaintext 识别结果详情: 文本 | 置信度 | 位置 -------------------------------------------------- 光学字符识别 | 95 | (x:120, y:85) OCR技术应用 | 92 | (x:150, y:150) 2023-12-01 | 89 | (x:200, y:220) ``` 3. **核心参数说明**: - `image_to_data()`:返回包含位置、文本和置信度的字典[^3] - `output_type=pytesseract.Output.DICT`:指定结构化输出格式 - `lang='chi_sim+eng'`:中英文混合识别[^5] ### 不同语言的实现 **Java 示例(简化版)**: ```java import net.sourceforge.tess4j.*; public class OCRDisplay { public static void main(String[] args) { ITesseract instance = new Tesseract(); instance.setDatapath("tessdata"); // 设置语言包路径 try { File imageFile = new File("your_image.png"); BufferedImage image = ImageIO.read(imageFile); // 获取识别结果 String result = instance.doOCR(imageFile); System.out.println("识别结果:\n" + result); } catch (TesseractException | IOException e) { System.err.println("识别错误: " + e.getMessage()); } } } ``` ### 提高显示效果的技巧 1. **字体优化**: - 使用支持中文的字体:`ImageFont.truetype("simsun.ttc", 12)`(Windows) - 调整字体大小确保可读性 2. **颜色区分**: ```python # 根据置信度使用不同颜色 confidence = int(float(data['conf'][i])) color = "green" if confidence > 90 else "orange" if confidence > 70 else "red" ``` 3. **保存结果像**: ```python image.save("ocr_result.jpg") # 保存带标注的像 with open("ocr_result.txt", "w") as f: f.write("\n".join(data['text'])) # 保存文本结果 ``` ### 相关问题 1. 如何调整 Tesseract 参数以提高特定场景的识别准确率?[^4] 2. 哪些像预处理技术能显著提升 OCR 效果?[^4] 3. 如何将 Tesseract OCR 集成到 Web 应用中实现实时识别?[^1] 4. 在不同语言环境下(中文/英文/混合)如何优化 Tesseract 置?[^5] [^1]: PHP集成Tesseract实现验证码识别 [^3]: Tesseract安装与中英文识别实现 [^4]: 像预处理提高OCR准确率 [^5]: Tesseract中文识别环境
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序媛一枚~

您的鼓励是我创作的最大动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值