一、 这个工具是做什么的?
这是一个可以自动读取图片内容,并将其转换为指定格式文字的小工具。
它最大的特点是完全离线运行,一次配置,永久使用,非常适合在没有互联网的内部网络环境中使用。
输入: 一张天气预报截图 (
.jpg,.png等)输出: 一个根据当前时间命名的文本文件 (
.txt)
二、 教程概述
我们的策略非常简单,就像准备一个“便当盒”:
准备阶段: 先在一台能上网的电脑上,把所有需要用到的“食材”和“餐具”(也就是程序、AI模型等)都准备好,放进一个“便当盒”(一个文件夹)里。
部署阶段: 然后把这个“便当盒”整体用U盘复制到不能上网的电脑上,打开就能“开饭”(直接使用)。
第一部分:准备阶段 (在有网的电脑上制作“工具箱”)
目标:创建一个名为
WeatherConverter的文件夹,它将包含运行所需的一切。
步骤 1:创建总文件夹
在你的电脑桌面或一个方便的位置,创建一个新文件夹,并将其命名为 WeatherConverter。之后的所有操作都在这个文件夹内进行。
步骤 2:下载“微型大脑” - 便携版Python
Python是这个工具的“大脑”,我们使用便携版,这样就无需在目标电脑上安装,更加方便。
找到一个较新的稳定版本(例如 Python 3.10.11),选择 "Windows embeddable package (64-bit)" 下载。它是一个
.zip压缩包。解压这个
.zip文件,将里面的所有内容复制到我们刚刚创建的WeatherConverter文件夹中。
步骤 3:安装“快递员” - Pip包管理器
我们需要一个“快递员”(Pip)来帮我们下载工具运行所需的其他“零件”。
获取快递员程序:在浏览器中打开
https://bootstrap.pypa.io/get-pip.py这个链接,在页面上点右键 -> “链接另存为”,将get-pip.py这个文件保存到WeatherConverter文件夹里。激活快递员:
打开
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)
在
WeatherConverter文件夹中,新建一个文本文档。将下面的全部代码复制粘贴到文本文档中。
保存文件,并将其重命名为
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去网上把“新华字典”下载到本地。
启动下载:在当前这台有网的电脑上,双击运行
启动自动监控.bat。等待完成:你会看到黑色窗口里出现一些下载进度条。这是程序在自动下载AI识别所需要的模型文件。请耐心等待,直到它显示“OCR引擎初始化成功”和“程序已启动”的字样。
找到“知识库”:下载好的模型,被存放在一个名为
.paddleocr的文件夹里。它通常在你的用户目录下 (C:\Users\你的电脑用户名\)。快速打开方法:按
Win+R键,输入%USERPROFILE%然后回车,就能直接打开这个目录。
打包“知识库”:将这个
.paddleocr文件夹整个复制到我们的WeatherConverter文件夹中。
至此,我们的“工具箱” WeatherConverter 已经制作完成!里面包含了运行所需的一切。
第二部分:部署阶段 (在无网的电脑上安装和使用)
步骤 1:转移“工具箱”
将制作好的
WeatherConverter文件夹,通过U盘、移动硬盘或内部网络共享,完整地复制到目标(无网络)电脑的任意位置(例如桌面)。
步骤 2:安放“知识库”
这是在无网电脑上唯一需要配置的一步。
打开刚刚复制过来的
WeatherConverter文件夹。找到里面的
.paddleocr文件夹。把它剪切或复制到这台新电脑的用户目录下 (
C:\Users\当前用户名\)。同样,你可以使用
Win+R->%USERPROFILE%的方法快速打开。
步骤 3:开始使用!
恭喜你,部署完成!现在你可以永久离线使用这个工具了。
方法一:全自动监控 (推荐)
双击
启动自动监控.bat文件。一个黑色窗口会打开并保持运行(可以最小化,但不能关闭)。
程序会自动创建
input_images和output_text两个文件夹。之后,你每天只需将天气预报截图保存或拖入
input_images文件夹。几秒钟后,转换好的
.txt文本文件就会自动出现在output_text文件夹中。
方法二:手动拖拽转换
找到你要转换的天气预报截图。
用鼠标将这个图片文件拖到
一键拖拽转换.bat的图标上,然后松开。程序会自动运行、转换,并把生成的
.txt文件放在WeatherConverter文件夹内。
三、 常见问题 (FAQ)
Q1: 电脑重启后需要做什么? A: 如果你使用的是“自动监控”方式,电脑重启后,那个黑色的监控窗口会关闭。你需要重新双击 启动自动监控.bat 来让它再次开始工作。除此之外,无需任何其他操作。
Q2: 真的不需要网络吗? A: 是的。我们已经在第一部分把所有需要网络下载的东西(模型库)都准备好了。部署完成后,工具的运行完全是本地计算,100%不依赖网络。
Q3: 程序报错或没反应怎么办? A:
检查模型位置:90%的问题都是因为
.paddleocr文件夹没有被正确地放到目标电脑的用户目录下 (%USERPROFILE%)。请仔细检查第二部分中的步骤2。图片是否清晰:确保你的截图清晰、端正,如果图片过于模糊或歪斜,可能会影响识别效果。
以管理员身份运行:在极少数情况下,如果文件夹权限有问题,可以尝试右键点击
.bat文件,选择“以管理员身份运行”。