LEONE
发布于 2025-08-21 / 3 阅读
0
0

本地图片转文字工具 - 离线部署教程

一、 这个工具是做什么的?

这是一个可以自动读取图片内容,并将其转换为指定格式文字的小工具。

它最大的特点是完全离线运行,一次配置,永久使用,非常适合在没有互联网的内部网络环境中使用。

  • 输入: 一张天气预报截图 (.jpg, .png 等)

  • 输出: 一个根据当前时间命名的文本文件 (.txt)

二、 教程概述

我们的策略非常简单,就像准备一个“便当盒”:

  1. 准备阶段: 先在一台能上网的电脑上,把所有需要用到的“食材”和“餐具”(也就是程序、AI模型等)都准备好,放进一个“便当盒”(一个文件夹)里。

  2. 部署阶段: 然后把这个“便当盒”整体用U盘复制到不能上网的电脑上,打开就能“开饭”(直接使用)。


第一部分:准备阶段 (在有网的电脑上制作“工具箱”)

目标:创建一个名为 WeatherConverter 的文件夹,它将包含运行所需的一切。

步骤 1:创建总文件夹

在你的电脑桌面或一个方便的位置,创建一个新文件夹,并将其命名为 WeatherConverter。之后的所有操作都在这个文件夹内进行。

步骤 2:下载“微型大脑” - 便携版Python

Python是这个工具的“大脑”,我们使用便携版,这样就无需在目标电脑上安装,更加方便。

  1. 访问 Python官网的Windows下载页面

  2. 找到一个较新的稳定版本(例如 Python 3.10.11),选择 "Windows embeddable package (64-bit)" 下载。它是一个.zip压缩包。

  3. 解压这个.zip文件,将里面的所有内容复制到我们刚刚创建的 WeatherConverter 文件夹中。

步骤 3:安装“快递员” - Pip包管理器

我们需要一个“快递员”(Pip)来帮我们下载工具运行所需的其他“零件”。

  1. 获取快递员程序:在浏览器中打开 https://bootstrap.pypa.io/get-pip.py 这个链接,在页面上点右键 -> “链接另存为”,将 get-pip.py 这个文件保存到 WeatherConverter 文件夹里。

  2. 激活快递员

    • 打开 WeatherConverter 文件夹。

    • 在文件夹顶部的地址栏里,删除原有路径,输入 cmd 然后按键盘的回车键。

    • 此时会弹出一个黑色的命令提示符窗口,在窗口中输入 python get-pip.py 并回车。等待它完成安装。

步骤 4:雇佣“专业工人” - 安装功能库

现在让“快递员”去雇佣三位“专业工人”(功能库),分别负责AI识别、文件监控等。

继续在刚才的黑色窗口中,依次输入并执行以下三条命令(每输完一条按一次回车,等待它跑完再输入下一条):

python -m pip install paddlepaddle
python -m pip install paddleocr
python -m pip install watchdog

步骤 5:编写“工作指令” - 创建脚本文件

我们需要给程序两份详细的“工作指令”(Python脚本),告诉它具体怎么做。

指令A:自动监控脚本 (weather_ocr_monitor.py)

  1. WeatherConverter 文件夹中,新建一个文本文档。

  2. 将下面的全部代码复制粘贴到文本文档中。

  3. 保存文件,并将其重命名weather_ocr_monitor.py (注意,后缀名是 .py 而不是 .txt)。

# 导入所需的库
import os
import re
from paddleocr import PaddleOCR
from datetime import datetime
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
​
# --- 配置区 ---
try:
    ocr = PaddleOCR(use_angle_cls=False, lang='ch')
    print("OCR引擎初始化成功。")
except Exception as e:
    print(f"OCR引擎初始化失败,请检查环境配置: {e}")
    exit()
# --- 配置区结束 ---
​
​
def parse_weather_data(ocr_results):
    """
    解析OCR识别出的原始数据,并将其格式化。
    """
    lines = []
    for idx in range(len(ocr_results)):
        res = ocr_results[idx]
        for line in res:
            lines.append(line[1][0])
​
    table_data = [line for line in lines if '星期' in line and '温度' not in line]
    formatted_output = []
​
    for line in table_data:
        parts = line.split()
        if len(parts) < 6:
            continue
        
        date = parts[0] + parts[1]
        weekday = parts[2]
        wind_info = parts[-1]
        max_temp = parts[-2]
        min_temp = parts[-3]
        weather = " ".join(parts[3:-3])
        
        min_temp_val = re.sub(r'[^0-9]', '', min_temp)
        max_temp_val = re.sub(r'[^0-9]', '', max_temp)
        
        wind_direction = wind_info.split('风')[0] + "风"
        wind_level = wind_info.split('风')[-1]
        
        output_line = f"{date},{weekday},{weather}。{wind_direction}{wind_level}。{min_temp_val}~{max_temp_val}℃。"
        formatted_output.append(output_line)
        
    return "\n".join(formatted_output)
​
​
def convert_image_to_text(image_path):
    """
    主函数,接收图片路径,输出格式化的天气预报文本。
    """
    if not os.path.exists(image_path):
        return "错误:图片文件不存在。"
​
    print(f"正在处理图片: {image_path}")
    result = ocr.ocr(image_path, cls=False)
    
    if not result or not result[0]:
        return "未能从图片中识别出任何文字。"
        
    formatted_text = parse_weather_data(result)
    
    return formatted_text
​
​
class ImageHandler(FileSystemEventHandler):
    def on_created(self, event):
        if not event.is_directory:
            time.sleep(1)
            image_path = event.src_path
            print(f"检测到新图片: {image_path}")
            
            if image_path.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp')):
                final_text = convert_image_to_text(image_path)
                
                # 生成基于当前处理时间的文件名
                timestamp_str = datetime.now().strftime("%Y%m%d%H%M%S")
                output_filename = os.path.join("output_text", f"{timestamp_str}.txt")
                
                with open(output_filename, 'w', encoding='utf-8') as f:
                    f.write(final_text)
                print(f"处理完成,结果已保存到: {output_filename}\n")
            else:
                print(f"文件 {image_path} 不是支持的图片格式,已跳过。\n")
​
if __name__ == '__main__':
    if not os.path.exists('input_images'):
        os.makedirs('input_images')
    if not os.path.exists('output_text'):
        os.makedirs('output_text')
​
    print("--- 天气预报自动转换程序已启动 ---")
    print("请将图片文件放入 'input_images' 文件夹")
    print("转换后的文本将自动保存在 'output_text' 文件夹中")
    print("按 Ctrl+C 或直接关闭本窗口来退出程序")
​
    event_handler = ImageHandler()
    observer = Observer()
    observer.schedule(event_handler, 'input_images', recursive=False)
    observer.start()
​
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()

指令B:拖拽转换脚本 (weather_ocr.py) (可选,但建议保留)

同样地,新建文本文档,复制以下代码,保存并重命名为 weather_ocr.py

import os
import re
import sys
from paddleocr import PaddleOCR
from datetime import datetime
​
try:
    ocr = PaddleOCR(use_angle_cls=False, lang='ch')
except Exception as e:
    print(f"OCR引擎初始化失败,请检查环境配置: {e}")
    sys.exit()
​
def parse_weather_data(ocr_results):
    lines = []
    for idx in range(len(ocr_results)):
        res = ocr_results[idx]
        for line in res:
            lines.append(line[1][0])
    table_data = [line for line in lines if '星期' in line and '温度' not in line]
    formatted_output = []
    for line in table_data:
        parts = line.split()
        if len(parts) < 6: continue
        date = parts[0] + parts[1]
        weekday = parts[2]
        wind_info = parts[-1]
        max_temp, min_temp = parts[-2], parts[-3]
        weather = " ".join(parts[3:-3])
        min_temp_val, max_temp_val = re.sub(r'[^0-9]', '', min_temp), re.sub(r'[^0-9]', '', max_temp)
        wind_direction, wind_level = wind_info.split('风')[0] + "风", wind_info.split('风')[-1]
        output_line = f"{date},{weekday},{weather}。{wind_direction}{wind_level}。{min_temp_val}~{max_temp_val}℃。"
        formatted_output.append(output_line)
    return "\n".join(formatted_output)
​
def convert_image_to_text(image_path):
    if not os.path.exists(image_path): return "错误:图片文件不存在。"
    result = ocr.ocr(image_path, cls=False)
    if not result or not result[0]: return "未能从图片中识别出任何文字。"
    return parse_weather_data(result)
​
if __name__ == '__main__':
    if len(sys.argv) > 1:
        image_file = sys.argv[1]
        print(f"正在处理图片: {image_file}")
        final_text = convert_image_to_text(image_file)
        print("\n--- 转换结果 ---")
        print(final_text)
        timestamp_str = datetime.now().strftime("%Y%m%d%H%M%S")
        output_filename = f'{timestamp_str}.txt'
        with open(output_filename, 'w', encoding='utf-8') as f:
            f.write(final_text)
        print(f"\n结果已保存到文件: {output_filename}")
    else:
        print("请拖拽一个图片文件到本程序的 .bat 文件上运行。")
    os.system("pause")

步骤 6:制作“启动按钮” - 创建批处理文件

为了方便使用,我们创建两个一键启动的“按钮”。

  • 按钮A (启动自动监控.bat)

    • WeatherConverter 文件夹中,新建文本文档,输入 python weather_ocr_monitor.py

    • 保存并重命名为 启动自动监控.bat

  • 按钮B (一键拖拽转换.bat)

    • WeatherConverter 文件夹中,新建文本文档,输入 python weather_ocr.py %1

    • 保存并重命名为 一键拖拽转换.bat

步骤 7:【核心步骤】下载“知识库” - OCR识别模型

这是最关键的一步,好比让AI去网上把“新华字典”下载到本地。

  1. 启动下载:在当前这台有网的电脑上,双击运行 启动自动监控.bat

  2. 等待完成:你会看到黑色窗口里出现一些下载进度条。这是程序在自动下载AI识别所需要的模型文件。请耐心等待,直到它显示“OCR引擎初始化成功”和“程序已启动”的字样。

  3. 找到“知识库”:下载好的模型,被存放在一个名为 .paddleocr 的文件夹里。它通常在你的用户目录下 (C:\Users\你的电脑用户名\)。

    • 快速打开方法:按 Win+R 键,输入 %USERPROFILE% 然后回车,就能直接打开这个目录。

  4. 打包“知识库”:将这个 .paddleocr 文件夹整个复制到我们的 WeatherConverter 文件夹中。

至此,我们的“工具箱” WeatherConverter 已经制作完成!里面包含了运行所需的一切。


第二部分:部署阶段 (在无网的电脑上安装和使用)

步骤 1:转移“工具箱”

  1. 将制作好的 WeatherConverter 文件夹,通过U盘、移动硬盘或内部网络共享,完整地复制到目标(无网络)电脑的任意位置(例如桌面)。

步骤 2:安放“知识库”

这是在无网电脑上唯一需要配置的一步。

  1. 打开刚刚复制过来的 WeatherConverter 文件夹。

  2. 找到里面的 .paddleocr 文件夹。

  3. 把它剪切或复制到这台新电脑的用户目录下 (C:\Users\当前用户名\)。

    • 同样,你可以使用 Win+R -> %USERPROFILE% 的方法快速打开。

步骤 3:开始使用!

恭喜你,部署完成!现在你可以永久离线使用这个工具了。

  • 方法一:全自动监控 (推荐)

    1. 双击 启动自动监控.bat 文件。

    2. 一个黑色窗口会打开并保持运行(可以最小化,但不能关闭)。

    3. 程序会自动创建 input_imagesoutput_text 两个文件夹。

    4. 之后,你每天只需将天气预报截图保存或拖入 input_images 文件夹

    5. 几秒钟后,转换好的 .txt 文本文件就会自动出现在 output_text 文件夹中。

  • 方法二:手动拖拽转换

    1. 找到你要转换的天气预报截图。

    2. 用鼠标将这个图片文件拖到 一键拖拽转换.bat 的图标上,然后松开。

    3. 程序会自动运行、转换,并把生成的 .txt 文件放在 WeatherConverter 文件夹内。


三、 常见问题 (FAQ)

Q1: 电脑重启后需要做什么? A: 如果你使用的是“自动监控”方式,电脑重启后,那个黑色的监控窗口会关闭。你需要重新双击 启动自动监控.bat 来让它再次开始工作。除此之外,无需任何其他操作。

Q2: 真的不需要网络吗? A: 是的。我们已经在第一部分把所有需要网络下载的东西(模型库)都准备好了。部署完成后,工具的运行完全是本地计算,100%不依赖网络。

Q3: 程序报错或没反应怎么办? A:

  • 检查模型位置:90%的问题都是因为 .paddleocr 文件夹没有被正确地放到目标电脑的用户目录下 (%USERPROFILE%)。请仔细检查第二部分中的步骤2。

  • 图片是否清晰:确保你的截图清晰、端正,如果图片过于模糊或歪斜,可能会影响识别效果。

  • 以管理员身份运行:在极少数情况下,如果文件夹权限有问题,可以尝试右键点击 .bat 文件,选择“以管理员身份运行”。


评论