Metadata-Version: 2.4
Name: detect-row
Version: 1.0.1
Summary: Công cụ phát hiện và cắt các hàng từ bảng trong ảnh với OCR
Home-page: https://github.com/detectrow/detect-row
Author: Row Detection Team
Author-email: Row Detection Team <detect.row.team@gmail.com>
License: MIT
Project-URL: Homepage, https://github.com/detectrow/detect-row
Project-URL: Bug Reports, https://github.com/detectrow/detect-row/issues
Project-URL: Source, https://github.com/detectrow/detect-row
Project-URL: Documentation, https://github.com/detectrow/detect-row/blob/main/README.md
Keywords: computer vision,table extraction,row detection,OCR,vietnamese,image processing
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Science/Research
Classifier: Topic :: Scientific/Engineering :: Image Recognition
Classifier: Topic :: Scientific/Engineering :: Image Processing
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Operating System :: OS Independent
Requires-Python: >=3.6
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: numpy>=1.19.0
Requires-Dist: opencv-python>=4.5.0
Requires-Dist: matplotlib>=3.4.0
Requires-Dist: pytesseract>=0.3.8
Requires-Dist: Pillow>=8.2.0
Dynamic: author
Dynamic: home-page
Dynamic: license-file
Dynamic: requires-python

# Detect Row

Thư viện phát hiện và cắt các hàng từ bảng trong ảnh, với khả năng tích hợp OCR.

## 1. Tính năng

- Phát hiện đường kẻ ngang trong ảnh bảng
- Cắt hàng dựa trên phát hiện đường kẻ và phân tích histogram
- Phát hiện các hàng không có văn bản
- Tích hợp OCR với Tesseract
- Xuất kết quả dưới dạng văn bản, JSON, TSV
- Debug với ảnh trung gian
- Xử lý các trường hợp đặc biệt (không có đường kẻ, bảng đơn giản)

## 2. Cài đặt

### 2.1. Cài đặt từ mã nguồn

```bash
# Clone repository
git clone https://github.com/your-username/table-detection.git
cd table-detection/detect_row

# Cài đặt package
pip install -e .
```

### 2.2. Cài đặt từ gói

```bash
# Trích xuất gói
tar -xzf detect_row_package.tar.gz
cd detect_row

# Cài đặt
pip install -e .
```

### 2.3. Sử dụng script

```bash
# Sử dụng script cài đặt có sẵn
chmod +x detect_row_install.sh
./detect_row_install.sh
```

## 3. Sử dụng

### 3.1. Trích xuất hàng cơ bản

```python
from detect_row import BasicRowExtractor

# Khởi tạo bộ trích xuất
extractor = BasicRowExtractor(
    input_dir="input",
    output_dir="output/rows",
    debug_dir="debug/basic"
)

# Xử lý một ảnh
result = extractor.process_image("input/table.jpg")

# Xử lý nhiều ảnh
extractor.process_directory()

# Truy cập kết quả
print(f"Phát hiện {result['rows']} hàng")
print(f"Chi tiết hàng: {result['row_info']}")
```

### 3.2. Trích xuất hàng nâng cao

```python
from detect_row import AdvancedRowExtractor

# Khởi tạo bộ trích xuất nâng cao
extractor = AdvancedRowExtractor(
    input_dir="input", 
    output_dir="output/advanced_rows", 
    debug_dir="debug/lines"
)

# Xử lý ảnh với tùy chọn
result = extractor.process_image(
    "input/table.jpg",
    min_line_length_ratio=0.5,  # Chiều dài tối thiểu của đường kẻ (tỷ lệ so với chiều rộng ảnh)
    line_adjustment=2,          # Hiệu chỉnh vị trí đường kẻ (pixel)
    check_text=True,            # Kiểm tra text trong hàng
    add_margin=True,            # Thêm lề cho hàng
    margin=5                    # Kích thước lề (pixel)
)

# Trích xuất hàng từ ảnh đã tải
image = cv2.imread("input/table.jpg")
rows = extractor.extract_rows_from_image(image)
```

### 3.3. Phát hiện bảng và trích xuất hàng

```python
from detect_row import TableRowExtractorMain

# Khởi tạo bộ trích xuất với phát hiện bảng
extractor_main = TableRowExtractorMain(
    input_dir="input", 
    output_dir="output/tables_rows", 
    debug_dir="debug/tables"
)

# Xử lý ảnh có thể chứa nhiều bảng
result = extractor_main.process_image(
    "input/document.jpg",
    add_margin=True,
    margin=5
)

# Kết quả chứa thông tin về các bảng phát hiện được
for i, table in enumerate(result['tables']):
    print(f"Bảng {i+1}: {table['rows']} hàng")
```

### 3.4. Trích xuất hàng và OCR với Tesseract

```python
from detect_row import TesseractRowExtractor

# Khởi tạo bộ trích xuất OCR
ocr_extractor = TesseractRowExtractor(
    input_dir="input", 
    output_dir="output/tesseract_ocr", 
    debug_dir="debug/tesseract"
)

# Xử lý ảnh với OCR
result = ocr_extractor.process_image(
    "input/table.jpg",
    lang="vie+eng",           # Ngôn ngữ cho OCR
    config="--oem 1 --psm 6", # Cấu hình Tesseract
    output_format="json"      # Định dạng xuất: text, json, tsv
)

# Truy cập văn bản đã trích xuất
for i, row_text in enumerate(result['text']):
    print(f"Hàng {i+1}: {row_text}")

# Lưu kết quả vào file
ocr_extractor.save_to_file(
    result['text'],
    "output/result",
    format="json"
)
```

## 4. Scripts tiện ích

Thư viện đi kèm với các script để chạy nhanh các chức năng:

### 4.1. Chạy bộ trích xuất cơ bản

```bash
# Chạy script
./run_basic.sh

# Hoặc sử dụng Python trực tiếp
python -m detect_row.basic_row_extractor --input input/table.jpg --output output/rows
```

### 4.2. Chạy bộ trích xuất nâng cao

```bash
# Chạy script
./run_advanced.sh

# Hoặc sử dụng Python trực tiếp
python -m detect_row.advanced_row_extractor --input input/table.jpg --output output/rows --debug debug/lines
```

### 4.3. Chạy OCR

```bash
# Chạy script
./run_ocr.sh

# Hoặc sử dụng Python trực tiếp
python -m detect_row.tesseract_ocr_extractor --input input/table.jpg --output output/ocr --lang vie+eng
```

## 5. Cấu trúc thư viện

```
detect_row/
├── __init__.py              # Định nghĩa API public
├── base.py                  # Lớp cơ sở và các tiện ích
├── basic_row_extractor.py   # Bộ trích xuất hàng cơ bản
├── advanced_row_extractor.py # Bộ trích xuất hàng nâng cao
├── tesseract_ocr_extractor.py # Bộ trích xuất OCR
├── run_basic.sh             # Script chạy bộ trích xuất cơ bản
├── run_advanced.sh          # Script chạy bộ trích xuất nâng cao
├── run_ocr.sh               # Script chạy OCR
├── requirements.txt         # Các thư viện cần thiết
└── setup.py                 # Cấu hình cài đặt
```

## 6. So sánh hiệu năng

| Lớp | Độ phức tạp | Thời gian xử lý | Tính năng |
|-----|-------------|-----------------|-----------|
| BasicRowExtractor | Thấp | ~0.45s | Chỉ cắt hàng |
| AdvancedRowExtractor | Trung bình | ~0.85s | Cắt hàng, kiểm tra text, debug image |
| TableRowExtractorMain | Cao | ~1.5s | Phát hiện bảng, cắt hàng, debug |
| TesseractRowExtractor | Cao | ~1.25-2.3s | Cắt hàng, OCR, xuất kết quả |

## 7. Các tham số cấu hình

### 7.1. Tham số phát hiện đường kẻ

| Tham số | Mô tả | Giá trị mặc định |
|---------|-------|------------------|
| min_line_length_ratio | Chiều dài tối thiểu của đường kẻ (tỷ lệ so với chiều rộng ảnh) | 0.5 |
| line_adjustment | Hiệu chỉnh vị trí đường kẻ (pixel) | 2 |
| min_distance_lines | Khoảng cách tối thiểu giữa các đường kẻ (pixel) | 10 |
| max_lines | Số đường kẻ tối đa để phát hiện | 50 |
| threshold_value | Ngưỡng nhị phân hóa ảnh (0-255) | 200 |

### 7.2. Tham số OCR

| Tham số | Mô tả | Giá trị mặc định |
|---------|-------|------------------|
| lang | Ngôn ngữ cho OCR | "vie+eng" |
| config | Cấu hình Tesseract | "" |
| output_format | Định dạng xuất kết quả | "text" |

## 8. Xử lý lỗi và debug

Mọi bộ trích xuất đều hỗ trợ chế độ debug:

```python
# Bật debug
extractor = AdvancedRowExtractor(
    input_dir="input",
    output_dir="output/rows",
    debug_dir="debug/lines",
    debug=True  # Bật chế độ debug
)
```

Các ảnh debug được lưu trong thư mục `debug_dir` và bao gồm:
- Ảnh bảng đã tiền xử lý
- Ảnh với các đường kẻ đã phát hiện
- Ảnh với các hàng đã cắt
- Histogram phân tích

## 9. Yêu cầu

- Python >= 3.6
- OpenCV
- NumPy
- Matplotlib
- PyTesseract (cho OCR)
- Pillow

## 10. Giấy phép

MIT
