news 2026/7/8 4:57:01

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

作者头像

张小明

前端开发工程师

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/7/5 14:04:09

嫣然天使儿童医院区域影像如何分块导出为多张大图

李亚鹏嫣然天使儿童医院是由李亚鹏和王菲等人&#xff0c;于2012年7月1日发起创办的中国首家民办非营利性儿童综合医院。截至2026年&#xff0c;医院已累计完成超过1.1万台唇腭裂手术&#xff0c;其中约7000例为全额免费救助。现在&#xff0c;我们先以嫣然天使儿童医院卫星影像…

作者头像 李华
网站建设 2026/6/26 11:59:55

【Vibe Coding百图计划】用Python点燃一场永不落幕的新春烟花秀

文章目录 写在前面系列文章项目架构技术需求主要代码创作流程写在后面 写在前面 用Python点燃一场永不落幕的新春烟花秀 系列文章 序号文章目录直达链接炫酷系列1无法拒绝的表白界面https://want595.blog.csdn.net/article/details/1347448942满屏飘字表白代码https://want59…

作者头像 李华
网站建设 2026/6/29 12:24:01

引入了 Disruptor 后,系统性能大幅提升!

Disruptor 是一个很受欢迎的内存消息队列&#xff0c;它源于 LMAX 对并发、性能和非阻塞算法的研究。今天一起来学习一下这个消息队列。简介对于主流的分布式消息队列来说&#xff0c;一般会包含 Producer、Broker、Consumer、注册中心等模块。比如 RocketMQ 架构如下&#xff…

作者头像 李华