图像文字提取

R语言
python
文本处理
作者

不止BI

发布于

2024年5月19日

Python

PaddleOCR 是由百度研究开发的开源光学字符识别(OCR)工具包,支持超过 80 种语言,包括中文、英语、日语、韩语、法语、德语、西班牙语和葡萄牙语等

安装环境

代码
# !conda create -n pyocr python=3.10
# !conda activate pyocr
# !pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple
# 
# !pip install "paddleocr>=2.0.1"

单张识别

代码
from paddleocr import PaddleOCR
from paddleocr import draw_ocr
ocr = PaddleOCR(use_angle_cls=True, lang="ch")
img_path = "./images/ocr/车牌2.jpg"
result = ocr.ocr(img_path, cls=True)
for idx in range(len(result)):
    res = result[idx]
    for line in res:
        print(line)
[[[37.0, 78.0], [252.0, 33.0], [263.0, 99.0], [48.0, 145.0]], ('京N·HIN10', 0.9273297190666199)]

批量识别

代码
import os
import pandas as pd
from PIL import Image
from paddleocr import PaddleOCR

# 指定要扫描的文件夹路径
folder_path = './images/ocr/'

# 初始化 OCR 模型
ocr = PaddleOCR(use_angle_cls=True, lang="ch")

# 遍历文件夹中的所有图片文件
file_list = os.listdir(folder_path)
data = []
for file in file_list:
    if file.endswith('.jpg') or file.endswith('.png'):
        # 对图片进行 OCR 识别
        img_path = os.path.join(folder_path, file)
        result = ocr.ocr(img_path, cls=True)
        result = result[0]
        # 保存 OCR 识别结果
        for line in result:
            boxes = line[0]
            txts = line[1][0]
            scores = line[1][1]
            data.append({'filename': file, 'txts': txts, 'scores': scores})

# 将 OCR 识别结果保存在数据框中
df = pd.DataFrame(data)

# 打印数据框
print(df)
  filename      txts    scores
0  车牌1.jpg  晋L·90388  0.995783
1  车牌2.jpg  京N·HIN10  0.927330
2  车牌3.png  鲁A·66666  0.995258

R

esseract是开源的OCR引擎,支持多种语言识别。需要先下载对应的语言数据,然后指定语言进行识别,对于复杂背景的情况下,识别较差。

单张识别

代码
# install.packages('tesseract')
library(tesseract)
# tesseract_info()

# 下载中文训练数据
# tesseract_download("chi_sim") # 下载简体中文数据
# tesseract_download("chi_tra") # 下载繁体中文数据

# 定义引擎及图片文件路径
cn <- tesseract(language = "chi_sim")
file <- "./images/ocr/车牌3.png"

# 输出文字
ocr(file, engine = cn)
[1] "鲁A66666\n"
代码
# 查看评分
ocr_data(file, engine = cn)
    word confidence        bbox
1     鲁   63.51566   1,4,6,124
2 A66666   60.35930 6,1,397,124

批量识别

代码
file <- "./images/ocr/"
library(tidyverse)

df_ocr <- tibble(image = paste0(file, list.files(file)))
df_ocr %>% mutate(ocrresult = ocr(image, cn))
# A tibble: 3 × 2
  image                  ocrresult           
  <chr>                  <chr>               
1 ./images/ocr/车牌1.jpg "二二6一\n本90588\n"
2 ./images/ocr/车牌2.jpg "南疯\n"            
3 ./images/ocr/车牌3.png "鲁A66666\n"        
回到顶部