Skip to main content

从 PDF、图片、压缩包和 EPUB 文件中提取 ISBN 号,支持 ONNX 检测和 OCR 识别

Project description

isbnx

从 PDF、图片、EPUB、MOBI 和压缩包中智能提取 ISBN 号

Python License Documentation


安装

pip install isbnx
# 或
uv add isbnx

系统依赖

  • pyzbar, 参考安装, 自己简单测试准确率好像比zbarlight好一些,单安装依赖有点麻烦

    • win: 需要一些c++动态库,
    • macOS: 需要设置 DYLD_LIBRARY_PATH 以支持条形码解码
    echo 'export DYLD_LIBRARY_PATH=/opt/homebrew/lib:$DYLD_LIBRARY_PATH' >> ~/.zshrc
    
  • pdf-inspector, 可选, 参考安装, 需要配置rust,不然可能安装不成功


快速开始

统一入口

from isbnx import extract

# 自动根据文件后缀选择提取方式
result = extract("cover.png")
if result.success:
    print(result.bookinfo.isbn13)  # 9787123456789

使用 ISBNX 类

from isbnx import ISBNX

# 从图片提取
result = ISBNX().from_image("cover.png")

# 从 PDF 提取(支持文本型和扫描件)
result = ISBNX().from_pdf("book.pdf")

# 从 EPUB 提取
result = ISBNX().from_epub("book.epub")

# 从 MOBI 提取
result = ISBNX().from_mobi("book.mobi")

# 从压缩包提取(支持 ZIP/RAR/UVZ)
result = ISBNX().from_archive("book.zip")

# 或使用统一的自动分发入口
result = ISBNX().extract("book.pdf")

支持的文件格式

类型 后缀 提取策略
图片 .png .jpg .jpeg ONNX 检测 → OCR / 条码解码
PDF .pdf 书签定位 + 文本搜索(文本型)→ 渲染图片检测(扫描件)
EPUB .epub OPF 元数据优先 → XHTML 内容扫描
MOBI .mobi EXTH 元数据优先 → 文本记录扫描
压缩包 .zip .rar .uvz meta.xmlbookinfo.datleg001.pdg → 兜底 PDG 图片

核心流程

输入文件
    │
    ▼
文件类型判断 ───→ 图片 ───→ ONNX YOLO 检测 ───→ OCR / 条码解码 ───→ ISBN 提取
    │              PDF ───→ 类型判断(文本/扫描)─→ 文本搜索 / 渲染检测
    │              EPUB ──→ OPF 元数据 / XHTML 扫描
    │              MOBI ──→ EXTH 元数据 / 文本记录扫描
    │              压缩包 ─→ meta.xml → bookinfo.dat → PDG 图片解码 → 检测
    │
    ▼
 ExtractResult
  ├── success: bool          # 是否提取成功
  ├── bookinfo.isbn13        # ISBN-13
  ├── bookinfo.isbn10        # ISBN-10
  ├── bookinfo.ssid          # SS 号(压缩包特有)
  ├── locate                 # 定位信息(页码、方法)
  ├── ocr                    # OCR 原始识别文本
  ├── meta                   # 文件元信息
  └── elapsed                # 耗时(秒)

配置

严格等级

通过 strict 参数控制提取结果的校验严格程度:

等级 含义 适用场景
1 ISBN SSID 都必须存在且有效 最高严格
2 ISBN 必须存在且校验通过 图片/PDF 检测
3 ISBN 有效 SSID 存在(默认) 压缩包提取

自定义配置

from isbnx import ISBNX
from isbnx.config import Settings

# 嵌套配置通过 dict 传参
config = Settings(
    strict=2,                           # 严格等级
    ocr={"ocr_model": "medium"},        # OCR 精度(small / medium)
    detector={"conf_threshold": 0.5},   # ONNX 检测阈值
    pdf={"front_start": 1, "back_end": 3},
)

result = ISBNX(config=config).from_image("cover.png")

运行时调整

from isbnx.config import configure

configure(
    strict=2,
    ocr={"ocr_model": "medium"},
    detector={"conf_threshold": 0.5},
)

输出模型

所有提取结果使用 Pydantic 模型,可通过一致的接口访问:

result = ISBNX().from_image("cover.png")

# 基本状态
result.success     # True / False
result.error       # 失败原因(如有)

# 书籍信息
result.bookinfo.isbn       # 原始 ISBN
result.bookinfo.isbn13     # ISBN-13 格式
result.bookinfo.isbn10     # ISBN-10 格式
result.bookinfo.isbn_valid # 校验是否合法
result.bookinfo.ssid       # SS 号(压缩包)

# 定位信息
result.locate.page         # 命中页码
result.locate.method       # 定位方式(onnx / text / bookmark / ...)
result.locate.score        # 检测置信度

# OCR 结果
result.ocr.lines           # OCR 文本行
result.ocr.text            # 全部文本(换行拼接)

# 元信息
result.meta.source         # 源文件路径
result.meta.source_type    # 源文件类型

# 耗时
result.elapsed             # 处理耗时(秒)

项目结构

isbnx/
├── src/
│   └── isbnx/
│       ├── __init__.py        # 公开 API 入口
│       ├── isbnx.py           # ISBNX 主类,统一提取接口
│       ├── config.py          # Pydantic-Settings 配置管理
│       ├── models.py          # Pydantic 数据模型
│       ├── detector.py        # ONNX YOLO 检测器 + 检测/OCR 流水线
│       ├── pdf.py             # PDF ISBN 提取
│       ├── epub.py            # EPUB ISBN 提取
│       ├── mobi.py            # MOBI ISBN 提取
│       ├── archive.py         # 压缩包(PDG)ISBN 提取
│       ├── pdf_type.py        # PDF 类型检测(文本/扫描)
│       ├── model/             # ONNX 模型文件
│       │   └── isbndetect_yolo.onnx
│       ├── ocr/               # OCR 引擎
│       │   ├── isbnx_pyzbar.py    # 条形码解码
│       │   └── isbnx_rapiocr.py   # RapidOCR 文字识别
│       ├── pdgview/           # PDG 图片解码器
│       └── utils/             # 工具函数
│           ├── cip_rules.py   # CIP 数据提取规则
│           ├── io.py          # 文件 I/O 工具
│           └── isbn_utils.py  # ISBN 提取与校验
├── tests/                     # 测试用例
├── docs/                      # MkDocs 文档
├── pyproject.toml
└── README.md

开发

环境要求

  • Python ≥ 3.10, 只在 python 3.13上进行测试开发的
  • uv 包管理器

本地开发

# 克隆项目
git clone https://github.com/zscmmm/isbnx.git
cd isbnx

# 创建虚拟环境并安装依赖
uv sync --group dev

# 运行测试
uv run pytest

# 构建文档
uv run mkdocs serve

基准测试

isbnx 与同类工具 cipx 的对比测试报告详见 isbnx vs cipx 报告


路线图

  • 图片 ISBN 提取
  • PDF 提取(文本型 + 扫描件)
  • EPUB 提取
  • MOBI 提取
  • 压缩包(PDG)提取
  • ONNX YOLO 深度学习检测
  • 条形码解码
  • 文档网站(MkDocs)
  • LLM 解析 CIP 字段

许可证

本项目基于 MIT 许可证开源 — 详见 LICENSE 文件。


相关项目

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

isbnx-0.0.1.tar.gz (10.0 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

isbnx-0.0.1-py3-none-any.whl (10.0 MB view details)

Uploaded Python 3

File details

Details for the file isbnx-0.0.1.tar.gz.

File metadata

  • Download URL: isbnx-0.0.1.tar.gz
  • Upload date:
  • Size: 10.0 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for isbnx-0.0.1.tar.gz
Algorithm Hash digest
SHA256 2560ea6de57a7a517dbd8141114e3cc2a066c10bfcd79ee212d4d1535a0b673d
MD5 d506ba7f7e2f4a9de81649f97bf1d446
BLAKE2b-256 1749b6591892b91f9f9d35dc5177343d43a2ef651896a09035a8f4f18d644820

See more details on using hashes here.

File details

Details for the file isbnx-0.0.1-py3-none-any.whl.

File metadata

  • Download URL: isbnx-0.0.1-py3-none-any.whl
  • Upload date:
  • Size: 10.0 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for isbnx-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 d1de423d8ae3b7ff63df071b3dc144967b36788cb3b1845443b00551f57ca0eb
MD5 8a318878db2e2f2d30f826227be4b2ba
BLAKE2b-256 a89caa039a9d71497a348888b5ea61dd7cc6065017165c2b2ad2ca7e19ff32c4

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page