Tôi có một vài nghìn tệp PDF chứa B & hình ảnh W (1bit) từ các dạng giấy được số hóa. Tôi đang cố gắng để OCR một số lĩnh vực, nhưng đôi khi chữ viết này là quá mờ nhạt:Xử lý trước các chữ số viết tay bị quét kém
Tôi vừa mới biết về biến đổi hình thái. Họ thực sự tuyệt vời !!! Tôi cảm thấy như tôi đang lạm dụng chúng (như tôi đã làm với các biểu thức thông thường khi tôi học Perl).
Tôi chỉ quan tâm đến ngày, 2017/07/06:
im = cv2.blur(im, (5, 5))
plt.imshow(im, 'gray')
ret, thresh = cv2.threshold(im, 250, 255, 0)
plt.imshow(~thresh, 'gray')
dân điền vào mẫu đơn này dường như có một số coi thường cho lưới điện, vì vậy tôi đã cố gắng để loại bỏ nó. Tôi có thể cô lập các đường ngang với biến đổi này:
horizontal = cv2.morphologyEx(
~thresh,
cv2.MORPH_OPEN,
cv2.getStructuringElement(cv2.MORPH_RECT, (100, 1)),
)
plt.imshow(horizontal, 'gray')
Tôi có thể lấy đường dọc cũng như:
plt.imshow(horizontal^~thresh, 'gray')
ret, thresh2 = cv2.threshold(roi, 127, 255, 0)
vertical = cv2.morphologyEx(
~thresh2,
cv2.MORPH_OPEN,
cv2.getStructuringElement(cv2.MORPH_RECT, (2, 15)),
iterations=2
)
vertical = cv2.morphologyEx(
~vertical,
cv2.MORPH_ERODE,
cv2.getStructuringElement(cv2.MORPH_RECT, (9, 9))
)
horizontal = cv2.morphologyEx(
~horizontal,
cv2.MORPH_ERODE,
cv2.getStructuringElement(cv2.MORPH_RECT, (7, 7))
)
plt.imshow(vertical & horizontal, 'gray')
Bây giờ tôi có thể nhận được loại bỏ lưới:
plt.imshow(horizontal & vertical & ~thresh, 'gray')
Điều tốt nhất tôi nhận được điều này, nhưng 4 vẫn chia thành 2 phần:
plt.imshow(cv2.morphologyEx(im2, cv2.MORPH_CLOSE,
cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5))), 'gray')
Có lẽ vào thời điểm này nó là tốt hơn để sử dụng cv2.findContours
và một số dựa trên kinh nghiệm để xác định từng chữ số, nhưng tôi đã tự hỏi:
- tôi nên cung cấp lên và yêu cầu tất cả các tài liệu được quét lại trong thang độ xám?
- có phương pháp nào tốt hơn để cô lập và định vị các chữ số mờ không?
- bạn có biết bất kỳ biến đổi hình thái nào để tham gia các trường hợp như "4" không?
[cập nhật]
là rescanning các tài liệu quá đòi hỏi? Nếu nó là không gặp khó khăn lớn tôi tin rằng nó là tốt hơn để có được đầu vào chất lượng cao hơn so với đào tạo và cố gắng để hoàn thiện mô hình của bạn để chịu được ồn ào và không điển hình dữ liệu
Một chút bối cảnh: tôi là một ai làm việc tại một cơ quan công ở Brazil. Giá cho các giải pháp ICR bắt đầu trong 6 chữ số vì vậy không ai tin rằng một anh chàng duy nhất có thể viết một giải pháp ICR trong nhà.Tôi đủ ngây thơ để tin rằng tôi có thể chứng minh họ sai. Những tài liệu PDF này đang ngồi ở một máy chủ FTP (khoảng 100 nghìn tệp) và được quét chỉ để loại bỏ phiên bản cây chết. Có lẽ tôi có thể lấy mẫu ban đầu và quét lại bản thân mình nhưng tôi sẽ phải yêu cầu một số hỗ trợ chính thức - vì đây là khu vực công cộng tôi muốn giữ cho dự án này ngầm càng nhiều càng tốt. Những gì tôi có bây giờ là một tỷ lệ lỗi 50%, nhưng nếu phương pháp này là một kết thúc chết không có điểm cố gắng để cải thiện nó.
Đang quét lại tài liệu quá đòi hỏi? Nếu đó không phải là rắc rối lớn, tôi tin rằng tốt hơn là nên có đầu vào chất lượng cao hơn đào tạo và cố gắng tinh chỉnh mô hình của bạn để chịu được dữ liệu ồn ào và không điển hình – DarkCygnus
@GrayCygnus: Tôi sẽ phải vượt qua đại dương quan liêu và quán tính, nhưng có thể . Tôi có lẽ sẽ phải tự làm tất cả công việc thủ công. –
Tôi cũng khuyên bạn nên xem [hướng dẫn] này (http://www.pyimagesearch.com/2017/07/10/using-tesseract-ocr-python/) (từ cùng một nguồn với tài nguyên tôi đã liên kết trên câu trả lời của tôi cho câu hỏi trước của bạn), nơi họ giới thiệu Tesseract (một trình bao bọc của Googles OCR Engine) như một công cụ tuyệt vời để thực hiện OCR. Ngoài ra, tôi tìm thấy [bài báo này] (http://worldcomp-proceedings.com/proc/p2016/ICA3674.pdf) giải thích cách cải thiện nhận dạng ký tự bằng cách sử dụng các hàng xóm gần nhất với chỉ số khoảng cách euclide. Chúc may mắn đi qua đại dương đó :) – DarkCygnus