零基础构建数字档案馆人工智能档案系统实战教程

一、系统架构与环境准备

本指南将基于Python语言,构建一个具备OCR文字识别语义智能检索功能的数字档案馆系统。系统后端采用FastAPI框架,AI核心使用PaddleOCR进行图像文字提取,使用Sentence-Transformers将文本转化为向量并利用FAISS进行高效检索。

请在终端中执行以下命令创建项目目录并安装核心依赖库。请确保你的系统已安装Python 3.8及以上版本。

1. 创建项目目录与虚拟环境

mkdir ai_archive_system
cd ai_archive_system
python -m venv venv

在Windows下激活虚拟环境命令为 venv\Scripts\activate,在Linux/Mac下为 source venv/bin/activate

2. 安装核心依赖包

创建一个名为 requirements.txt 的文件,并直接复制以下内容进去,这是运行系统所需的全部依赖列表:

fastapi==0.104.1
uvicorn==0.24.0
python-multipart==0.0.6
paddlepaddle==2.5.1
paddleocr==2.7.0.3
sentence-transformers==2.2.2
faiss-cpu==1.7.4
Pillow==10.1.0
numpy==1.24.3

保存文件后,在终端执行安装命令:

pip install -r requirements.txt

二、核心AI模块:OCR文字识别服务

创建 ocr_service.py 文件。此模块负责将上传的档案图片(如扫描件、照片)转换为可检索的文本数据。我们将使用PaddleOCR,因为它对中文支持极佳且无需复杂配置。

from paddleocr import PaddleOCR
import os
class OCRService:
def __init__(self):
初始化PaddleOCR,use_angle_cls=True开启方向分类,lang='ch'表示中英文识别
第一次运行会自动下载模型文件到 ~/.paddleocr/
self.ocr = PaddleOCR(use_angle_cls=True, lang='ch', show_log=False)
def extract_text(self, image_path):
"""
对指定路径的图片进行文字识别
:param image_path: 图片文件路径
:return: 识别出的完整文本字符串
"""
if not os.path.exists(image_path):
raise FileNotFoundError(f"图片文件不存在: {image_path}")
执行识别
result = self.ocr.ocr(image_path, cls=True)
extracted_content = []
if result and result[0]:
for line in result[0]:
line结构: [[坐标], (文本, 置信度)]
text_content = line[1][0]
extracted_content.append(text_content)
return "\n".join(extracted_content)
全局单例模式,避免重复加载模型占用内存
ocr_engine = OCRService()

三、智能检索模块:向量数据库构建

创建 vector_store.py 文件。传统关键词搜索无法理解语义(如搜“合同”可能匹配不到“协议”)。我们将使用向量数据库实现语义检索。这里使用FAISS作为向量存储引擎,paraphrase-multilingual-MiniLM-L12-v2 模型进行文本向量化。

零基础构建数字档案馆人工智能档案系统实战教程

from sentence_transformers import SentenceTransformer
import faiss
import numpy as np
import pickle
class VectorStore:
def __init__(self):
加载多语言向量化模型,支持中文语义理解
print("正在加载语义模型,首次运行需要下载模型文件...")
self.model = SentenceTransformer('paraphrase-multilingual-MiniLM-L12-v2')
self.dimension = 384   该模型的输出维度为384
self.index = faiss.IndexFlatL2(self.dimension)  使用L2距离构建索引
self.metadata = []  存储对应的文本内容和文件名
def add_text(self, text, filename):
"""
将文本添加到向量索引中
"""
if not text.strip():
return
将文本转换为向量
vector = self.model.encode([text])
添加到FAISS索引
self.index.add(np.array(vector).astype('float32'))
保存元数据
self.metadata.append({'text': text, 'filename': filename})
def search(self, query, top_k=3):
"""
根据查询语句搜索最相似的档案内容
"""
if self.index.ntotal == 0:
return []
将查询语句转向量
query_vector = self.model.encode([query])
搜索距离最近的top_k个向量
distances, indices = self.index.search(np.array(query_vector).astype('float32'), top_k)
results = []
for i, idx in enumerate(indices[0]):
if idx == -1:  索引为空的情况
continue
获取对应的元数据
data = self.metadata[idx]
results.append({
'filename': data['filename'],
'content': data['text'],
'score': float(distances[0][i])  距离越小,相似度越高
})
return results
全局向量库实例
vector_db = VectorStore()

四、系统后端开发:FastAPI接口实现

创建 main.py 文件。这是系统的入口,负责提供文件上传接口和检索接口,并协调OCR与向量模块。

from fastapi import FastAPI, UploadFile, File, Form
from fastapi.responses import HTMLResponse, JSONResponse
from fastapi.staticfiles import StaticFiles
import shutil
import os
from ocr_service import ocr_engine
from vector_store import vector_db
app = FastAPI(title="数字档案馆AI系统")
创建必要的目录
UPLOAD_DIR = "uploads"
os.makedirs(UPLOAD_DIR, exist_ok=True)
@app.get("/", response_class=HTMLResponse)
async def read_root():
直接读取前端页面
with open("index.html", "r", encoding='utf-8') as f:
return f.read()
@app.post("/upload")
async def upload_archive(file: UploadFile = File(...)):
"""
接收档案图片,进行OCR识别并存入向量库
"""
file_location = f"{UPLOAD_DIR}/{file.filename}"
保存上传的文件
with open(file_location, "wb") as buffer:
shutil.copyfileobj(file.file, buffer)
try:
1. 调用OCR提取文字
print(f"正在识别文件: {file.filename}")
text_content = ocr_engine.extract_text(file_location)
if not text_content:
return JSONResponse(content={"status": "error", "message": "未能识别出文字,请检查图片清晰度"})
2. 将文字存入向量数据库
vector_db.add_text(text_content, file.filename)
return JSONResponse(content={
"status": "success",
"message": "档案上传并识别成功",
"preview": text_content[:100] + "..."  返回前100字作为预览
})
except Exception as e:
return JSONResponse(content={"status": "error", "message": str(e)})
@app.post("/search")
async def search_archive(query: str = Form(...)):
"""
根据语义查询档案内容
"""
results = vector_db.search(query, top_k=5)
return JSONResponse(content={"results": results})
if __name__ == "__main__":
import uvicorn
启动服务,监听本地8000端口
uvicorn.run(app, host="0.0.0.0", port=8000)

五、前端交互界面实现

在项目根目录下创建 index.html 文件。这是一个单页应用,包含文件上传表单和语义搜索框,使用原生JavaScript与后端API交互。






AI数字档案馆系统



AI数字档案馆系统

1. 档案数字化入库

2. 语义内容检索

所有代码文件已准备就绪。现在启动系统并进行实际操作测试。

1. 启动服务

在终端确保虚拟环境已激活,执行以下命令启动FastAPI服务器:

python main.py

终端显示 Application startup complete 且无报错即表示启动成功。此时浏览器访问 http://localhost:8000 即可看到界面。

2. 功能测试步骤

  • 步骤A:准备测试图片
    找一张包含文字的图片(如合同扫描件、截图),内容建议包含“租赁”、“甲方”、“乙方”等词汇。
  • 步骤B:上传识别
    在网页“档案数字化入库”区域选择图片并点击上传。系统会调用PaddleOCR提取文字,并自动将其转化为向量存入内存。如果看到绿色提示“档案上传并识别成功”,说明入库成功。
  • 步骤C:语义搜索
    在网页“语义内容检索”区域输入关键词。例如,如果图片里写的是“房屋租赁合同”,你可以尝试搜索“住房协议”或者“关于房子的文件”。
    由于使用了语义向量模型,即使关键词不完全匹配,系统也能根据含义返回相关结果。页面将显示匹配的文件名、相似度评分以及部分内容预览。

至此,一个具备核心AI能力的数字档案馆原型系统已完全落地。该系统涵盖了从文件输入、图像文字提取到语义级检索的全流程,可作为实际项目开发的基础框架进行扩展。

AI咨询
热线电话

028-85154420

15388110056

全国售前咨询电话

扫码咨询
安答联动微信公众号二维码

微信扫码关注安答联动

申请试用
热线电话
申请试用

安答联动档案管理系统