2011-07-18 26 views
9

Tôi đang cố gắng đào tạo tesseract để nhận biết con số từ hình ảnh thực tế của đồng hồ đo khí.Đào tạo Tesseract 3 để nhận biết các con số từ hình ảnh thực tế của đồng hồ đo khí

Hình ảnh mà tôi sử dụng để đào tạo được thực hiện bằng máy ảnh vì lý do này có nhiều vấn đề: độ phân giải hình ảnh kém, hình ảnh mờ, ánh sáng yếu hoặc độ tương phản thấp do phơi sáng quá mức, phản xạ, bóng tối, v.v. ..

Đối với đào tạo, tôi đã tạo ra một hình ảnh lớn với một loạt các chữ số bị bắt bởi những hình ảnh của bộ phận đo khí và tôi tự chỉnh sửa các tập tin hộp để tạo ra các tập tin .tr. Kết quả là chỉ có các chữ số của hình ảnh rõ ràng hơn và sắc nét hơn được nhận ra trong khi các chữ số của hình ảnh bị mờ không bị tesseract bắt.

+0

Bạn có thể đăng hình ảnh mẫu không? –

Trả lời

1

tôi sẽ cố gắng lệnh ImageMagick đơn giản này đầu tiên:

convert   \ 
    original.jpg \ 
    -threshold 50% \ 
    result.jpg 

(Chơi một chút với tham số 50% - thử với giá trị nhỏ hơn và cao hơn ...)

Thresholding cơ bản lá trên chỉ có 2 giá trị, số không hoặc tối đa, cho mỗi kênh màu. Giá trị dưới ngưỡng được đặt thành 0, các giá trị ở trên được đặt thành 255 (hoặc 65535 nếu làm việc ở độ sâu 16 bit).

Tùy thuộc vào original.jpg của bạn, bạn có thể có một, làm việc, hình ảnh tương phản rất cao OCR-thể như một kết quả.

2

Theo như tôi có thể cho bạn biết cần phải OpenCV để hộp trong đó con số này được đặt nhận ra, nhưng OpenCV không phải là thần cho OCR. Sau khi bạn xác định vị trí hộp, chỉ cần cắt phần đó, xử lý hình ảnh và sau đó giao nó cho tesseract cho OCR.

Tôi cần giúp đỡ với OpenCV bởi vì tôi không biết làm thế nào để chương trình trong OpenCV.

Dưới đây là một vài ví dụ thực tế.

  • hình ảnh đầu tiên là ảnh gốc (croped số đồng hồ điện)
  • hình ảnh thứ hai là hơi làm sạch hình ảnh trong GIMP, khoảng 50% độ chính xác OCR trong Tesseract
  • hình ảnh thứ ba là hoàn toàn làm sạch hình ảnh - 100% OCR được công nhận mà không cần đào tạo!

first image second image third image

1

tôi đề nghị bạn:

  • sử dụng một công cụ để chỉnh sửa các hộp, chẳng hạn jTessBoxEditor, nó rất hữu ích và cho phép bạn chiến thắng một thời điểm. Bạn có thể dễ dàng cài đặt nó từ here
  • bạn nên tập các chữ cái của tình huống thực tế (ồn ào, mờ). Tập huấn luyện của bạn vẫn còn hạn chế, bạn có thể thêm các mẫu đào tạo khác.
  • Tôi khuyên bạn nên sử dụng API của Tesseract để tăng cường hình ảnh (làm mờ, chuẩn hóa, làm sắc nét ...) ví dụ: Boxa * tesseract::TessBaseAPI::GetConnectedComponents(Pixa** pixa) (cho phép bạn truy cập vào các hộp giới hạn của từng ký tự)

    Pix * pimg = tess_api-> GetThresholdedImage();

Here bạn tìm thấy vài ví dụ

+0

Ví dụ trong liên kết của bạn là về 'GetComponentImages'. Bạn có thể cho tôi một ví dụ về cách sử dụng 'GetConnectedComponents'? – yode

1

Tesseract là một gói phần mềm OCR khá tốt, nhưng không trước quá trình hình ảnh đúng cách. Kinh nghiệm của tôi là bạn có thể nhận được kết quả OCR tốt nếu bạn chỉ thực hiện một số xử lý trước khi chuyển nó sang tesseract.

Có một số lời khuyên quan trọng để cải thiện sự công nhận đáng kể:

  1. Remove tiếng ồn xung quanh. Về cơ bản, điều này có nghĩa là sử dụng nghĩa vụ thích ứng. Tôi cũng đảm bảo rằng các ký tự có màu đen và nền màu trắng.
  2. Sử dụng độ phân giải chính xác. Nếu bạn nhận được kết quả xấu, hãy phóng to hoặc thu nhỏ hình ảnh cho đến khi bạn nhận được kết quả tốt. Bạn muốn nhắm vào khoảng. cỡ chữ 14 ở 300 dpi; trong phần mềm của tôi xử lý các hóa đơn hoạt động tốt nhất.
  3. Không lưu trữ hình ảnh dưới dạng JPEG; sử dụng BMP hoặc PNG hoặc cái gì khác mà không làm cho hình ảnh ồn ào.
  4. Nếu bạn chỉ sử dụng một hoặc hai phông chữ, hãy thử đào tạo tesseract trên các phông chữ này.

Đối với điểm 4, nếu bạn biết phông chữ sẽ được sử dụng, có một số giải pháp tốt hơn so với việc sử dụng Tesseract như khớp các phông chữ này trực tiếp trên hình ảnh ... Algoritm cơ bản là tìm các chữ số và kết hợp chúng với tất cả các ký tự có thể (chỉ có 10) ... vẫn còn, việc thực hiện là khó khăn.

Các vấn đề liên quan