news 2026/2/4 1:25:51

识别手写笔记照片转为电子文字,同时按段落拆分,支持一键导入办公文档。

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
识别手写笔记照片转为电子文字,同时按段落拆分,支持一键导入办公文档。

1. 实际应用场景与痛点

场景

- 学生上课记手写笔记,课后想转成电子稿复习

- 会议记录用手写白板拍照,需快速整理成 Word/PPT

- 研究人员访谈记录手写,需数字化归档

- 教师批改作业后,将手写评语转成电子文本

痛点

- 手动录入费时费力

- 普通 OCR 对潦草字迹识别率低

- 识别结果没有段落结构,难以直接使用

- 不同设备拍摄角度、光线影响识别效果

- 缺乏一键导出到办公文档的功能

2. 核心逻辑讲解

1. 图像预处理

- 灰度化、二值化、去噪、倾斜校正(OpenCV)

2. 手写 OCR

- 使用 PaddleOCR(对中文手写效果好)或 EasyOCR

3. 文本后处理

- 正则清洗、合并断行

- 基于规则/NLP 模型进行段落拆分(如空行、缩进、标点)

4. 导出办公文档

- 使用

"python-docx" 生成 Word

- 或使用

"python-pptx" 生成 PPT

5. 批量处理

- 支持单张或整个文件夹批量识别

3. 项目结构

handwriting_ocr/

├── ocr_processor.py # OCR 识别与段落拆分

├── preprocess.py # 图像预处理

├── doc_exporter.py # 导出 Word/PPT

├── config.py # 配置参数

├── requirements.txt # 依赖

├── README.md # 使用说明

└── sample_notes/ # 示例手写照片

4. 代码实现

"config.py"

# OCR 配置

OCR_LANG = 'ch' # PaddleOCR 语言

USE_GPU = False # 是否使用 GPU

# 导出配置

EXPORT_FORMAT = 'docx' # 'docx' 或 'pptx'

"preprocess.py"

import cv2

import numpy as np

def preprocess_image(image_path):

img = cv2.imread(image_path)

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 二值化

_, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)

# 去噪

denoised = cv2.medianBlur(binary, 3)

# 倾斜校正(简单版)

coords = np.column_stack(np.where(denoised > 0))

angle = cv2.minAreaRect(coords)[-1]

if angle < -45:

angle = -(90 + angle)

else:

angle = -angle

(h, w) = img.shape[:2]

center = (w // 2, h // 2)

M = cv2.getRotationMatrix2D(center, angle, 1.0)

rotated = cv2.warpAffine(img, M, (w, h), flags=cv2.INTER_CUBIC, borderMode=cv2.BORDER_REPLICATE)

return rotated

"ocr_processor.py"

from paddleocr import PaddleOCR

import re

from config import OCR_LANG, USE_GPU

ocr = PaddleOCR(use_angle_cls=True, lang=OCR_LANG, use_gpu=USE_GPU)

def recognize_text(image_path):

processed_img = preprocess_image(image_path)

result = ocr.ocr(processed_img, cls=True)

texts = []

for line in result:

for word_info in line:

texts.append(word_info[1][0])

full_text = ' '.join(texts)

# 简单段落拆分:按连续换行或长停顿

paragraphs = re.split(r'\n\s*\n', full_text)

paragraphs = [p.strip() for p in paragraphs if p.strip()]

return paragraphs

"doc_exporter.py"

from docx import Document

from pptx import Presentation

from config import EXPORT_FORMAT

def export_to_docx(paragraphs, output_path):

doc = Document()

for p in paragraphs:

doc.add_paragraph(p)

doc.save(output_path)

def export_to_ppt(paragraphs, output_path):

prs = Presentation()

blank_slide_layout = prs.slide_layouts[1]

for p in paragraphs:

slide = prs.slides.add_slide(blank_slide_layout)

title = slide.shapes.title

title.text = "笔记段落"

content = slide.placeholders[1]

content.text = p

prs.save(output_path)

def export_document(paragraphs, output_path):

if EXPORT_FORMAT == 'docx':

export_to_docx(paragraphs, output_path)

elif EXPORT_FORMAT == 'pptx':

export_to_ppt(paragraphs, output_path)

主程序

"main.py"

import os

from ocr_processor import recognize_text

from doc_exporter import export_document

def process_folder(input_folder, output_file):

all_paragraphs = []

for fname in os.listdir(input_folder):

if fname.lower().endswith(('.png', '.jpg', '.jpeg')):

path = os.path.join(input_folder, fname)

paras = recognize_text(path)

all_paragraphs.extend(paras)

export_document(all_paragraphs, output_file)

print(f"已导出到 {output_file}")

if __name__ == "__main__":

process_folder("sample_notes", "output.docx")

5.

"requirements.txt"

paddleocr>=2.6.0

opencv-python

python-docx

python-pptx

numpy

6. README.md

# 手写笔记 OCR 转电子文档工具

支持拍照识别手写笔记,自动分段,并导出 Word/PPT。

## 功能

- 图像预处理(去噪、二值化、倾斜校正)

- 手写 OCR(PaddleOCR)

- 段落自动拆分

- 一键导出 .docx 或 .pptx

## 安装

bash

pip install -r requirements.txt

## 使用

1. 将手写照片放入 `sample_notes/` 文件夹

2. 运行:

bash

python main.py

3. 在 `output.docx` 查看结果

## 配置

修改 `config.py` 选择导出格式、语言等。

7. 核心知识点卡片

知识点 说明

PaddleOCR 开源 OCR 引擎,支持中英文及手写

OpenCV 图像预处理,提高 OCR 准确率

段落拆分 基于空行、标点等规则或 NLP 模型

python-docx 生成 Word 文档

python-pptx 生成 PPT 演示文稿

批量处理 遍历文件夹自动化处理

8. 总结

本工具通过 AI OCR + 文本后处理 + 办公文档导出 实现了手写笔记的数字化全流程,解决了手动录入和格式混乱的痛点。

未来可扩展:

- 接入更强大的 NLP 模型进行语义分段

- 增加 PDF 导出

- 开发 Web/GUI 界面方便非技术用户

- 加入手写风格美化(如 LaTeX 公式识别)

如果你需要,还可以集成一个轻量级的 Web 界面(Flask),让用户直接上传照片并下载 Word 文件,这样会更贴近实际办公场景。

利用AI高效解决实际问题,如果你觉得这个工具好用,欢迎关注我!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/2 23:48:19

网络安全、Web安全、渗透测试之笔经面经总结(一)

本篇文章总结涉及以下几个方面&#xff1a; 对称加密非对称加密&#xff1f; 什么是同源策略&#xff1f; cookie存在哪里&#xff1f;可以打开吗 xss如何盗取cookie&#xff1f; tcp、udp的区别及tcp三次握手&#xff0c;syn攻击&#xff1f; 证书要考哪些&#xff1f; DVWA是…

作者头像 李华
网站建设 2026/2/4 7:09:09

hug_face#1 智能体推理|多模态|语音识别

with gemini&#x1f50d; 大语言模型的智能体推理&#xff1a;从静态到动态的范式转变研究主题&#xff1a;《Agentic Reasoning for Large Language Models》核心突破&#xff1a;- 提出从静态LLM推理向智能体推理的范式转变&#xff0c;构建了包含基础层&#xff08;单智能体…

作者头像 李华
网站建设 2026/2/4 8:52:34

又老性能又差,为什么好多公司依然选择 RabbitMQ?

大家好。 RabbitMQ 这个消息队列相信很多程序员都用过&#xff0c;我第一次使用是在 2016 年&#xff0c;确实是一个老牌的消息队列了&#xff0c;但是为什么一直没有被淘汰呢&#xff1f;今天来聊一聊这个话题。 老旧差 发布历史 为什么说 RabbitMQ 老呢&#xff1f;下图是…

作者头像 李华
网站建设 2026/2/3 4:21:32

621-9001电源供应模块

621-9001 电源供应模块简介&#xff1a;621-9001 是工业自动化系统中的电源供应模块主要为控制器及各类 I/O 模块提供稳定电源可输出恒定电压&#xff0c;保证系统正常运行具备过载保护功能&#xff0c;提升系统安全性可降低电源波动对控制设备的影响支持连续长时间运行&#x…

作者头像 李华
网站建设 2026/2/3 18:30:44

DongYuTvWeb电视直播浏览器:专为老年人设计的智能电视直播方案

随着智能电视的普及&#xff0c;复杂的操作界面反而给老年人群体带来了使用障碍。DongYuTvWeb​ 从实际需求出发&#xff0c;通过"浏览器直播源"的技术方案&#xff0c;巧妙地平衡了功能丰富性和操作简便性。 获取地址&#xff1a;点击访问 一、产品定位与技术架构 …

作者头像 李华