房子做水电的时候是不是要先埋网站,汉中市建设工程质量安全监督站官网,响应式网站例子,自己建设网站不会咋办呀最近开始学习opencv使用#xff0c;跟着b站一起做实战项目#xff0c;跟大家分享一下学习成果#xff0c;大佬勿喷 项目演示 pytesseract 是一个用于文字识别#xff08;OCR#xff0c;光学字符识别#xff09;的 Python 库#xff0c;它是 Tesseract OCR 引擎的 Python… 最近开始学习opencv使用跟着b站一起做实战项目跟大家分享一下学习成果大佬勿喷 项目演示 pytesseract 是一个用于文字识别OCR光学字符识别的 Python 库它是 Tesseract OCR 引擎的 Python 封装。 功能 文字识别pytesseract 可以将图像中的文字转换为文本。它支持多种语言和文字的识别。多平台支持适用于 Windows、macOS 和 Linux 操作系统。简单易用提供简单的 API方便在 Python 中集成和使用。 基于Tesseract OCR Tesseract 是一个开源的OCR引擎由 Google 开发和维护。它支持多种文件格式和语言能够进行精确的文字识别。pytesseract 则为 Python 提供了便捷的接口使开发者能够利用 Tesseract 的强大功能进行文字识别。 安装与配置 安装通常使用 pip install pytesseract 命令来安装。配置pytesseract 需要 Tesseract OCR 引擎的支持因此在使用前需要先安装 Tesseract并将其路径配置到 pytesseract 中以便程序能够找到并调用 Tesseract。 使用方法 简单的文字识别使用 pytesseract.image_to_string() 方法进行基本的图像文字识别。详细控制通过 pytesseract.image_to_boxes()、pytesseract.image_to_data() 等方法可以获取更详细的识别结果如字符的位置、置信度等信息。 适用场景 文档数字化将扫描的文档转换为可编辑的文本。图像处理处理包含文本的图像提取关键信息。自动化任务在自动化流程中从图像中提取所需的文字信息。
总体来说pytesseract 是一个强大且广泛使用的 Python 库为开发者提供了便捷的方式来实现图像中的文字识别功能。
实战教程
首先我们在Pycharm中新建一个项目然后添加pytesseract库和opencv-python库 import cv2
import pytesseract# 设置 pytesseract 使用的 Tesseract OCR 引擎路径
pytesseract.pytesseract.tesseract_cmdC:\\Program Files\\Tesseract-OCR\\tesseract.exe
img cv2.imread(2.png)
# 将图像从 BGR 格式转换为 RGB 格式pytesseract 要求输入为 RGB 格式
img cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
cv2.imshow(result,img)# 显示处理后的图像窗口窗口名为 result
cv2.waitKey(0)# 等待用户按下任意键后关闭窗口参数为0表示无限等待
写下这段代码后运行即可读取2.png并显示为‘result’ 接下来我们要给这些字母画上框框首先需要得到这些字母的坐标
因此我们使用pytesseract.image_to_boxes(img)来获取字母的坐标 Z 728 8 832 110 0 从左到右依次为字符左下角的横坐标左下角的纵坐标右上角的横坐标右上角的纵坐标OCR 引擎对该字符识别的置信度。 获取到坐标后我们将使用for b in boxes.splitlines():对每一个边界框信息进行遍历使用b b.split( )将每行的信息分割成单独的元素。 使用x, y, w, h int(b[1]), int(b[2]), int(b[3]), int(b[4]) 提取边界框的坐标信息。x为左下角的横坐标y为左下角的纵坐标w为右上角的横坐标h为右上角的纵坐标 接下来就可以使用cv2.rectangle来进行画矩形了
cv2.rectangle(img,(x,himg-h),(w,himg-y),(0,0,255),3) cv2.rectangle(img, pt1, pt2, color, thickness, lineType, shift) img: 这是要绘制矩形的图像对象通常是一个 NumPy 数组。 pt1: 这是矩形的顶点之一用元组 (x1, y1) 表示其中 (x1, y1) 是矩形左上角的坐标。 pt2: 这是矩形的对角线顶点用元组 (x2, y2) 表示其中 (x2, y2) 是矩形右下角的坐标。 color: 这是矩形的颜色。它可以是一个表示颜色的元组如 (B, G, R)其中 B、G、R 分别是蓝色、绿色和红色的强度。例如红色可以用 (0, 0, 255) 表示。如果你在灰度图像上工作可以直接传入一个灰度值。 thickness: 这是矩形边框的粗细以像素为单位。如果设置为负值例如 cv2.FILLED则函数会填充矩形内部。 lineType: 这是可选参数用于指定线条类型。默认情况下它是 cv2.LINE_8表示8连通线条。你也可以使用 cv2.LINE_AA 来获取抗锯齿线条。 shift: 这是可选参数指定坐标点的小数位数。通常情况下不需要设置使用默认值即可。 在这里我发现pytesseract库的原点坐标是在左下角而opencv库的原点是在左上角因此我画了一个示例图以便大家理解 这时我们的代码是这样的
import cv2
import pytesseractpytesseract.pytesseract.tesseract_cmdC:\\Program Files\\Tesseract-OCR\\tesseract.exe
img cv2.imread(2.png)
# 将图像从 BGR 格式转换为 RGB 格式pytesseract 要求输入为 RGB 格式
img cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
himg, wimg, _ img.shape# 获取图像的高度和宽度
# 使用 pytesseract 进行图像文本检测并返回每个检测框的坐标信息
boxes pytesseract.image_to_boxes(img)
# 遍历每个检测框
for b in boxes.splitlines():b b.split( ) #将每行的信息分割成单独的元素print(b)x,y,w,h int(b[1]),int(b[2]),int(b[3]),int(b[4])# 绘制矩形框注意 OpenCV 的坐标系统以左上角为原点cv2.rectangle(img,(x,himg-h),(w,himg-y),(0,0,255),3)
cv2.imshow(result,img)
cv2.waitKey(0) 运行后得到这个图像可以看出来我们的每一个字母都被完整的框出来了接下来我们使用cv2.putText()将他的内容显示在字母旁边 cv2.putText(img, text, org, fontFace, fontScale, color, thickness, lineType, bottomLeftOrigin) img需要绘制文本的图像必须是一个 numpy 数组。 text要绘制的文本内容通常是一个字符串。 org文本的起始坐标即文本左下角的位置以 (x, y) 形式表示其中 (0, 0) 是图像的左上角。 fontFace字体类型/字体族例如 cv2.FONT_HERSHEY_SIMPLEX、cv2.FONT_HERSHEY_PLAIN 等。这些字体类型可以通过 cv2.putText() 函数来调用。 fontScale字体大小因子指定字体大小相对于字体的基础大小的比例。 color文本颜色通常是一个元组 (B, G, R)每个颜色通道的取值范围是 0 到 255。 thickness文本线条的粗细默认值为 1。如果设置为大于 1 的整数则会增加文本的粗细。 lineType文本线条的类型默认值是 cv2.LINE_8表示 8 连通线条。可以选择 cv2.LINE_AA 来获得抗锯齿线条。 bottomLeftOrigin可选参数默认为 False。如果设置为 True则文本的起始点是左下角。通常为 False表示文本的起始点是左上角。 在这里我们附上完整代码
import cv2
import pytesseract# 设置 pytesseract 的路径根据你的安装路径修改
pytesseract.pytesseract.tesseract_cmd C:\\Program Files\\Tesseract-OCR\\tesseract.exe# 读取图像
img cv2.imread(2.png)# 将图像从 BGR 格式转换为 RGB 格式因为 pytesseract 使用 RGB 格式
img cv2.cvtColor(img, cv2.COLOR_BGR2RGB)# 获取图像的高度和宽度
himg, wimg, _ img.shape# 使用 pytesseract 库识别图像中的文本并返回文本框的信息
boxes pytesseract.image_to_boxes(img)# 遍历每个文本框的信息
for b in boxes.splitlines():b b.split( ) # 将每行文本框信息分割成列表print(b) # 打印每个文本框的信息# 提取文本框的坐标信息左下角和右上角x, y, w, h int(b[1]), int(b[2]), int(b[3]), int(b[4])# 在图像上绘制矩形框cv2.rectangle(img, (x, himg - h), (w, himg - y), (0, 0, 255), 3)# 在矩形框上方显示文本内容cv2.putText(img, b[0], (x - 20, himg - y), cv2.FONT_HERSHEY_COMPLEX, 1, (100, 100, 255))# 显示带有文本框和识别结果的图像
cv2.imshow(result, img)# 等待按键输入来关闭窗口
cv2.waitKey(0)# 关闭所有打开的窗口
cv2.destroyAllWindows()最后再看一下我们的项目结果展示
项目结果 这样就OK了感兴趣的可以点个关注最近会一直更新谢谢