本方案基于开源工具搭建,无需付费,适合10万份以内档案的中小机构使用,所有步骤可直接复制执行。
brew install imagemagick;Linux用户执行命令sudo apt install imagemagick。``` pip install paddlepaddle paddleocr ```如果有NVIDIA显卡,可安装GPU版本提升识别速度:
``` pip install paddlepaddle-gpu paddleocr ```
扫描得到的原始图片普遍存在倾斜、阴影、分辨率不一致问题,需批量预处理,步骤如下:
original_imgs,同级目录新建空文件夹processed_imgs存放处理后图片。original_imgs目录,执行对应批量处理命令,自动完成倾斜校正、去噪、压缩:Mac/Linux用户执行:
```
for img in .jpg .png; do convert "$img" -deskew 40% -normalize -resize 1500x1500\> "processed_imgs/${img%.}.jpg"; done
```
Windows CMD用户执行:
``` for %i in (.jpg .png) do convert "%i" -deskew 40% -normalize -resize 1500x1500> processed_imgs\%~ni.jpg ```
注意:如果处理后图片清晰度不足,可将命令中的1500修改为2000,文件体积会相应变大
预处理完成后,批量提取图片中的文字,支持中英文识别,准确率可达95%以上,步骤如下:
在original_imgs同级目录新建文件batch_ocr.py,复制以下完整代码:
```python
import os
from paddleocr import PaddleOCR
有GPU将use_gpu改为True
ocr = PaddleOCR(use_angle_cls=True, lang='ch', use_gpu=False)
img_dir = "./processed_imgs"
output_dir = "./ocr_text"
os.makedirs(output_dir, exist_ok=True)
for img_name in os.listdir(img_dir):
if not img_name.lower().endswith(('.jpg', '.png', '.jpeg')):
continue
img_path = os.path.join(img_dir, img_name)
result = ocr.ocr(img_path, cls=True)
text = "\n".join([line[1][0] for page in result for line in page])
output_name = f"{os.path.splitext(img_name)[0]}.txt"
with open(os.path.join(output_dir, output_name), 'w', encoding='utf-8') as f:
f.write(text)
print("批量OCR识别完成")
```

注意:第一次运行会自动下载识别模型,等待完成即可,无需手动操作
终端执行命令python batch_ocr.py,等待完成后,所有档案的文本内容会保存到ocr_text文件夹,模糊档案可手动打开文本文件修正错误。
我们搭建轻量Web系统,支持关键词秒搜,点击直接查看档案扫描件,步骤如下:
安装Node.js,Windows用户直接下载:https://nodejs.org/dist/v20.10.0/node-v20.10.0-x64.msi,全程默认下一步即可。安装完成后打开终端,执行以下命令:
``` mkdir archive-management && cd archive-management npm init -y npm install minisearch express cors ```
在archive-management文件夹新建文件index.js,复制以下代码:
```javascript
const express = require('express');
const MiniSearch = require('minisearch')
const fs = require('fs');
const path = require('path');
const cors = require('cors');
const app = express();
const port = 3000;
app.use(express.static('public'));
app.use(cors());
// 加载所有档案数据
const documents = [];
const rootPath = path.resolve(__dirname, '..');
const ocrPath = path.join(rootPath, 'ocr_text');
const imgPath = path.join(rootPath, 'processed_imgs');
fs.readdirSync(ocrPath).forEach(file => {
if(file.endsWith('.txt')) {
const id = file.replace('.txt', '');
const content = fs.readFileSync(path.join(ocrPath, file), 'utf-8');
documents.push({ id, title: id, content });
}
});
// 初始化全文索引
const miniSearch = new MiniSearch({
fields: ['title', 'content'],
storeFields: ['title'],
searchOptions: { prefix: true }
})
miniSearch.addAll(documents);
// 接口定义
app.get('/search', (req, res) => {
const results = miniSearch.search(req.query.q);
res.json({ results });
})
app.get('/img/:id', (req, res) => {
res.sendFile(path.join(imgPath, `${req.params.id}.jpg`));
})
app.listen(port, () => {
console.log(`管理系统访问地址: http://localhost:${port}`);
})
```
新建public文件夹,在文件夹内新建index.html,复制以下代码:
```html档案智能管理 档案智能检索```
终端进入archive-management目录,执行命令node index.js,打开浏览器访问http://localhost:3000 即可使用,输入关键词即可秒搜对应档案,点击即可查看扫描件原文。
如果需要多端访问,可将整个项目部署到云服务器,开放3000端口即可使用;如果档案数量超过10万份,将MiniSearch替换为Elasticsearch即可,核心业务逻辑无需大幅修改,本方案搭建总成本为0,整体操作耗时不超过2小时,完全满足日常档案数字化管理需求。