解决opencv中文路径问题

见cv_imread函数和cv_imwrite函数

import cv2
import os
import matplotlib.pyplot as plt
from paddleocr import PaddleOCR, draw_ocr
import numpy as np
import urllib.parse  # Add this import statement

from txt_get import ImageTextExtractor

# 初始化OCR,OCR会自动下载PP-OCRv3检测器、识别器和角度分类器
ocr = PaddleOCR(use_angle_cls=True)

# 指定输出路径和字体路径
# out_path = './output_images'  #这里不用out_path了,直接在detect_and_save_people里用output_dir
font = './doc/fonts/simfang.ttf'
font = r'C:\Windows\Fonts\simfang.ttf'  # 修改为绝对路径,并且确定字体存在

def cv_imread(file_path):
    # 使用 np.fromfile 读取文件字节流
    file_bytes = np.fromfile(file_path, dtype=np.uint8)
    # 使用 cv2.imdecode 解码图像
    img = cv2.imdecode(file_bytes, cv2.IMREAD_COLOR)
    return img

def cv_imwrite(file_path, img):
    """
    使用 cv2.imencode 和 Python 内置的文件写入支持中文文件名保存图像
    """
    ext = os.path.splitext(file_path)[1]
    result, encoded_img = cv2.imencode(ext, img)
    if result:
        with open(file_path, 'wb') as f:
            f.write(encoded_img.tobytes())
    else:
        raise Exception("图像编码失败")

def detect_and_save_people(image_path, output_dir):
    """
    检测图像中的文本,如果包含"xxx"关键词,则保存图像到指定路径。
    """
    try:
        extractor = ImageTextExtractor()
        extracted_text = extractor.extract_text(image_path)
        if extracted_text:
            print(f"从图像中提取到的文本:{extracted_text}")
            if "xxx" in extracted_text:
                print(f"检测到“xxx”关键词,保存图片: {image_path}")
                # 创建输出目录 (如果不存在)
                if not os.path.exists(output_dir):
                    os.makedirs(output_dir)
                # 构建输出文件名
                filename = os.path.basename(image_path)
                output_path = os.path.join(output_dir, filename)  # Use original filename without URL encoding
                # 复制图片
                cv2_img = cv_imread(image_path)
                cv_imwrite(output_path, cv2_img)  # Use cv_imwrite instead of cv2.imwrite
            else:
                print(f"未检测到“xxx”关键词: {image_path}")
        else:
            print(f"未检测到文本: {image_path}")
    except Exception as e:
        print(f"处理图像 {image_path} 时发生错误: {e}")

def process_directory(root_dir, output_dir):
    """
    递归处理指定目录下的所有图像,检测图像中是否包含"xxx"关键词,如果包含则保存图像到指定路径。
    """
    for dirpath, dirnames, filenames in os.walk(root_dir):
        for filename in filenames:
            if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.gif')):  # 检查文件是否是图像
                image_path = os.path.join(dirpath, filename)
                detect_and_save_people(image_path, output_dir)

if __name__ == '__main__':
    # 使用示例
    root_dir = 'xxx'  # 替换为你的根目录
    output_dir = 'xxx'  # 替换为你想要保存图像的目录

    process_directory(root_dir, output_dir)

1、关于ocr识别的结果问题

ocr = PaddleOCR(use_angle_cls=True, lang="ch", use_gpu=True)
result = ocr.ocr(img, cls=False)
if result[0]!=None:
	# 将检测到的多个文本框字符串连接
	for i in range(len(result[0])):
	    ocr_value = result[0][i][-1][0]
	    str_ocr = str_ocr + ocr_value

2、ocr识别调试查看

resized_frame = cv2.resize(frame, (frame.shape[1] // 2, frame.shape[0] // 2))
cv2.imshow("Frame with Line", resized_frame)
cv2.waitKey(0)  # Wait for a key press to close the window
cv2.destroyAllWindows()  # Close the display window

参考链接:
1、https://yuanbao.tencent.com/bot/app/share/chat/aRqXxiQCiDdJ
2、https://yuanbao.tencent.com/bot/app/share/chat/oIjCaOAdWCwZ
3、https://yuanbao.tencent.com/bot/app/share/chat/0O1q8De7mcew
4、pip install paddleocr 安装的时候 protobuf 版本冲突https://github.com/PaddlePaddle/PaddleOCR/issues/9453

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值