使用paddle OCR对带文字的图片转正

使用python+OCR实现图片矫正

python 复制代码
import cv2
import numpy as np
from paddleocr import PaddleOCR


# 设定模型路径
paddleocr = PaddleOCR(
		      cls_model_dir='D:/paddle OCR/ch_ppocr_mobile_v2.0_cls_slim_infer',
                      det_model_dir='D:/paddle OCR/ch_PP-OCRv4_det_infer',
                      rec_model_dir='D:/paddle OCR/ch_PP-OCRv4_rec_infer') # 推理模型路径
# img = cv2.imread(r'D:\LabelAOI\source\Test\CM\6.jpg')  # 打开需要识别的图片
img = cv2.imread(r'D:\LabelAOI\source\Test\crops\26463274Q0041-W2N0CV02C922064_20260207003954_L_main_CAM_basler_UPC_CAM114.jpg')  # 打开需要识别的图片
# img = cv2.resize(image, (300,500))
#img = cv2.imread(r'.\UPC_CAM94.jpg')  # 打开需要识别的图片
result = paddleocr.ocr(img)

# 获取文字内容最长的框
max_text_length = 0
max_text_index = 0

for i, (points, (text, confidence)) in enumerate(result[0]):
    current_length = len(text.strip())
    if current_length > max_text_length and current_length > 0:
        max_text_length = current_length
        max_text_index = i
# 获取最长文本的框坐标(转换为Python原生整数)
points, (text, confidence) = result[0][max_text_index]
points = np.array(points, dtype=np.int32)  # 先转numpy整数
# 从numpy数组中提取元素,并转换为Python原生int类型
rot_center_x = int(points[0][0].item())  # .item()将numpy类型转为Python类型
rot_center_y = int(points[0][1].item())
rot_center = (rot_center_x, rot_center_y)  # 确保是纯Python整数元组
# 计算旋转角度
dx = points[1][0] - points[0][0]
dy = points[1][1] - points[0][1]
angle = np.arctan2(dy, dx) * 180 / np.pi  # 弧度转角度
# 生成旋转矩阵(此时rot_center为Python int元组,符合OpenCV要求)
M = cv2.getRotationMatrix2D(rot_center, angle, 1.0)
rotated_img = cv2.warpAffine(img, M, (img.shape[1], img.shape[0]))
# # 绘制结
# cv2.polylines(rotated_img, [points], True, (0, 255, 0), 2)
# confidence_percentage = int(confidence * 100)
# cv2.putText(
#     rotated_img, f"{text} ({confidence_percentage}%)",
#     (points[0][0], points[0][1] - 10),
#     cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 2
# )
# cv2.putText(
#     rotated_img, f"Angle: {angle:.2f}°",
#     (points[0][0], points[0][1] - 30),
#     cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 2
# )

cv2.imwrite("D:\paddle OCR\mm.png", rotated_img)
cv2.imshow('Longest Text Region', rotated_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

效果如下:

相关推荐
小陈工29 分钟前
Python安全编程实践:常见漏洞与防护措施
运维·开发语言·人工智能·python·安全·django·开源
2401_874732537 小时前
为你的Python脚本添加图形界面(GUI)
jvm·数据库·python
FreakStudio7 小时前
0 元学嵌入式 GUI!保姆级 LVGL+MicroPython 教程开更,从理论到实战全搞定
python·单片机·嵌入式·面向对象·电子diy
剑穗挂着新流苏3129 小时前
117_PyTorch 实战:利用训练好的模型进行单张图片验证
人工智能·python·深度学习
Lethehong9 小时前
Python Selenium全栈指南:从自动化入门到企业级实战
python·selenium·测试工具·自动化
智算菩萨10 小时前
MP3音频编码原理深度解析与Python全参数调优实战:从心理声学模型到LAME编码器精细控制
android·python·音视频
qq_4523962311 小时前
【模型手术室】第四篇:全流程实战 —— 使用 LLaMA-Factory 开启你的第一个微调任务
人工智能·python·ai·llama
无心水11 小时前
Java时间处理封神篇:java.time全解析
java·开发语言·python·架构·localdate·java.time·java时间处理
吴秋霖11 小时前
【某音电商】protobuf聊天协议逆向
python·算法·protobuf
深藏功yu名11 小时前
Day24:向量数据库 Chroma_FAISS 入门
数据库·人工智能·python·ai·agent·faiss·chroma