见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 statementfrom 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 imgdef 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.imwriteelse: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)