核心架构与技术选型
为了确保零门槛落地,本指南采用轻量级但功能完备的技术栈。系统核心包含文件存储、OCR文字识别、元数据管理和全文检索功能。具体选型如下:
- 后端框架:Python 3.9 + FastAPI(高性能异步Web框架)
- 数据存储:SQLite(轻量级文件数据库,无需安装服务端)
- OCR引擎:Tesseract-OCR(开源文字识别库,支持中文)
- 前端界面:原生HTML5 + JavaScript(无复杂框架依赖)
环境准备与依赖安装
在开始编码前,必须配置好运行环境。请严格按照以下步骤操作,任何一步缺失都会导致程序报错。
1. 安装Python环境
确保系统已安装Python 3.9或更高版本。在终端输入以下命令检查版本:
```bash
python --version
```
2. 安装Tesseract-OCR引擎
这是实现档案数字化的核心组件,负责将图片转换为可搜索的文本。
Windows用户:访问 https://github.com/UB-Mannheim/tesseract/wiki 下载最新的Windows安装包(64-bit)。安装时务必勾选 Chinese (Simplified) 语言包,或者后续手动下载 chi_sim.traineddata 文件放入安装目录的 tessdata 文件夹中。默认安装路径通常为 C:\Program Files\Tesseract-OCR\tesseract.exe。
Linux用户(Ubuntu/Debian):执行以下命令:
```bash
sudo apt update
sudo apt install tesseract-ocr tesseract-ocr-chi-sim
```
macOS用户:执行以下命令:
```bash
brew install tesseract tesseract-lang
```
3. 安装Python依赖库
在项目目录下,创建 requirements.txt 文件,并填入以下内容。然后执行安装命令。这些库分别负责Web服务、文件处理、图像识别和数据库操作。
```text
fastapi
uvicorn
python-multipart
python-magic
aiofiles
pytesseract
Pillow
```
在终端执行安装命令:
```bash
pip install -r requirements.txt
```
后端核心逻辑实现

创建名为 main.py 的文件。此文件包含完整的数据库初始化、文件上传、OCR识别及搜索接口。请确保代码中的 tesseract_cmd 路径根据你的实际安装路径进行修改(Windows用户必须修改,Linux/Mac通常可省略)。
```python
import shutil
import sqlite3
import uvicorn
from fastapi import FastAPI, UploadFile, File, Form, HTTPException
from fastapi.responses import HTMLResponse, JSONResponse
from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates
from fastapi import Request
from pathlib import Path
import pytesseract
from PIL import Image
import aiofiles
import os
import datetime
配置部分
Windows用户请务必修改此路径为你的tesseract.exe实际位置,例如:r'C:\Program Files\Tesseract-OCR\tesseract.exe'
Linux/Mac用户如果已配置环境变量,可注释掉此行
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
UPLOAD_DIR = "uploads"
DB_FILE = "archive.db"
os.makedirs(UPLOAD_DIR, exist_ok=True)
app = FastAPI()
数据库初始化
def init_db():
conn = sqlite3.connect(DB_FILE)
cursor = conn.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS documents (
id INTEGER PRIMARY KEY AUTOINCREMENT,
filename TEXT NOT NULL,
content TEXT,
upload_time TEXT,
file_path TEXT
)
''')
conn.commit()
conn.close()
init_db()
@app.get("/", response_class=HTMLResponse)
async def read_root(request: Request):
简单的HTML前端入口
html_content = """
职业院校数字档案馆
职业院校数字档案馆系统
档案归档
"""
return HTMLResponse(content=html_content)
@app.post("/upload")
async def upload_file(file: UploadFile = File(...)):
try:
file_location = f"{UPLOAD_DIR}/{file.filename}"
保存文件
async with aiofiles.open(file_location, 'wb') as out_file:
content = await file.read()
await out_file.write(content)
OCR识别
打开图片并进行处理
image = Image.open(file_location)
使用简体中文识别,lang='chi_sim'
text = pytesseract.image_to_string(image, lang='chi_sim')
存入数据库
conn = sqlite3.connect(DB_FILE)
cursor = conn.cursor()
upload_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
cursor.execute("INSERT INTO documents (filename, content, upload_time, file_path) VALUES (?, ?, ?, ?)",
(file.filename, text, upload_time, file_location))
conn.commit()
conn.close()
return {"message": "归档成功", "filename": file.filename, "extracted_text_length": len(text)}
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
@app.get("/search")
async def search_documents(q: str = ""):
conn = sqlite3.connect(DB_FILE)
cursor = conn.cursor()
使用SQL LIKE进行模糊搜索
cursor.execute("SELECT id, filename, content, upload_time FROM documents WHERE content LIKE ? OR filename LIKE ?",
(f"%{q}%", f"%{q}%"))
rows = cursor.fetchall()
conn.close()
results = []
for row in rows:
results.append({
"id": row[0],
"filename": row[1],
"content": row[2],
"upload_time": row[3]
})
return JSONResponse(content=results)
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)
```
启动与功能验证
代码编写完成后,即可启动系统进行实测。请准备一张包含文字的图片(如扫描的学生证、成绩单或教学合同)作为测试素材。
1. 启动服务
在终端执行以下命令启动Web服务:
```bash
python main.py
``>
终端显示 Application startup complete 且无报错信息,即表示服务启动成功。
2. 访问系统
打开浏览器,访问地址 http://127.0.0.1:8000。你将看到简洁的操作界面,包含“档案归档”和“档案检索”两个核心区域。
3. 执行归档操作
- 点击“选择文件”按钮,上传准备好的测试图片。
- 点击“上传并识别”按钮。
- 系统会自动保存图片,调用Tesseract引擎提取文字,并将结果存入SQLite数据库。
- 成功后页面会提示“归档成功”并显示提取的文本长度。
4. 执行检索操作
- 在搜索框中输入图片中包含的关键词(例如学生姓名、“成绩”或“合同”等字样)。
- 点击“搜索”按钮。
- 下方表格将实时显示匹配的档案记录,包括文件名、识别内容摘要和上传时间。
常见故障排查
在实操过程中,可能会遇到以下两个主要问题,请对照排查:
1. 报错:tesseract is not installed or it's not in your path
这是最常见的错误。原因在于Python代码找不到Tesseract的可执行文件。
- 解决方法:打开
main.py,找到 pytesseract.pytesseract.tesseract_cmd 那一行,取消注释并将路径修改为你电脑上Tesseract的绝对路径。Windows用户注意路径中的斜杠方向或使用 r'路径' 格式。
2. 搜索不到结果或识别内容为空
这通常是因为图片质量差或未加载中文语言包。
- 解决方法:确保Tesseract安装目录下的
tessdata 文件夹内有 chi_sim.traineddata 文件。如果没有,请从GitHub Tesseract Wiki下载该文件并放入文件夹。同时,确保代码中 lang='chi_sim' 参数正确无误。