2012-02-17 29 views
6

Tôi có một ứng dụng trong tâm trí mà tôi muốn sản xuất. Chúng tôi có bảng lịch treo tường được chia thành các hình chữ nhật nhỏ sử dụng các đường màu đen trên nền trắng. Thẻ tên từ được đặt vào một phân vùng cụ thể để cho biết người này đang làm việc trong ô đó. Hệ thống này hoạt động rất tốt để giao tiếp giữa mọi người, nhưng tôi muốn một cách tự động lưu thông tin lịch biểu này vào cơ sở dữ liệu tự động.Cách nguồn mở cho ứng dụng OCR xử lý ảnh theo thời gian thực?

Tôi đang hình dung một hệ thống có camera được đặt ở vị trí cố định tập trung vào bảng lịch. Định kỳ máy ảnh sẽ chụp ảnh bảng. Tôi muốn viết một số mã để giải mã các thẻ tên trong khu vực nào. Điều này sẽ yêu cầu một số OCR hoặc nhận dạng ký hiệu. Có số lượng lớn trên mỗi thẻ tên mà tôi sẽ sử dụng để xác định người có thẻ tên.

Tôi tự nhiên truy cập Python khi giải quyết vấn đề lập trình mới. Tôi tìm thấy bài đăng này ->python image recognition trông giống như một nơi tốt để bắt đầu (với PIL và numpy).

Bạn có biết cách tốt để làm điều này không?

Cập nhật: Tôi đã thử SimpleCV và hiện tại có vẻ tốt.

+2

Bạn có thể, tôi nghĩ, làm cho công việc của bạn dễ dàng hơn nếu bạn thêm mã vạch vào thẻ tên hoặc viết các số trong phông chữ được thiết kế để dễ dàng OCR. –

Trả lời

4

Đây thực sự là một vấn đề khá khó khăn, mặc dù có vẻ khá đơn giản. Nhưng bạn có thể làm cho nó dễ dàng hơn nhiều bằng cách làm một số công cụ để hình ảnh của bạn để làm cho điều này quản lý được. Tôi có các đề xuất sau:

  • Hãy cố gắng làm cho máy ảnh của bạn nhìn thẳng vào bảng bằng ống kính hợp lý sao cho có méo ảnh tối thiểu trên các cạnh và không bị biến dạng phối cảnh.
  • Vì bạn sẽ quay hình ảnh thường xuyên để phân tích, tôi cho rằng hiệu suất không phải là vấn đề, vì vậy hãy chụp những bức ảnh có độ phân giải cao, đèn flash hoặc với thời gian phơi sáng lâu (vì mọi thứ bạn chụp) để có được chất lượng hình ảnh tốt nhất có thể.
  • Nếu số lượng thẻ khác nhau mà bạn mong đợi không quá lớn, bạn có thể thấy dễ dàng hơn khi chỉ cố gắng khớp hình ảnh tham chiếu của các thẻ này trong hình ảnh của bạn qua số template matching thay vì dùng toàn bộ số OCR. Điều này dễ làm việc hơn nếu hình ảnh của bạn đủ tốt. python opencv interface rất hoàn chỉnh.
  • Đánh dấu hiệu suất cao có nhận xét tốt về câu hỏi của bạn về việc bao gồm barcodes trên thẻ. Tôi sẽ thêm tùy chọn QR codes, nhưng đó chỉ là điều tương tự. Cả hai đều dễ phát hiện và có những thư viện tốt để giúp bạn đọc chúng.
  • Nếu bạn quyết định bạn cần OCR, bạn nên xem xét các gói OCR có sẵn và không cố gắng cuộn gói của riêng mình. Hãy thử pytesser cho động cơ tesseract hoặc OCRopuspython interface.
+0

Từ kinh nghiệm của tôi với một thiết lập chụp ảnh rất giống, flash thường rất vô ích nếu bề mặt bạn đang cố chụp ảnh có độ phản chiếu cao, ví dụ, hầu hết các bảng trắng và đèn flash nằm ở cùng vị trí với Máy ảnh. Nhưng chiếu sáng tốt, tuy nhiên đi qua, là hữu ích nhất. –

+0

Có, nếu bạn sử dụng đèn flash, bạn nên đặt vị trí sao cho phản xạ b không trở thành vấn đề. Nói chung, bạn nên bắt đầu với một hình ảnh tốt như bạn có thể nhận được. –

+0

Tôi thích ý tưởng về mã vạch hoặc mã QR. Có lẽ một đường viền riêng biệt cho từng thẻ có mã vạch. –

2

Vì bạn đã đề cập rằng bạn muốn sử dụng Python cho vấn đề này, có lẽ bạn có thể xem SimpleCV. Nó sẽ cung cấp cho bạn một cách dễ dàng để lấy hình ảnh từ máy ảnh và xử lý hình ảnh cơ bản.

0

Tôi mạnh mẽ đồng ý với jilles de witt rằng OCR sẽ là một tác vụ phân tích hình ảnh cực kỳ khó để phát triển từ đầu. Đọc mã sẽ là một lựa chọn tốt hơn, nhưng điều đó cũng sẽ khó lập trình và sẽ đòi hỏi hình ảnh phức tạp hoặc có phần khó khăn như những người khác đã lưu ý. Tuy nhiên, đối với ứng dụng này bạn thực sự không cần phải thực hiện OCR hoặc mã vạch chính thức, QR hoặc mã 2d khác.

Vì ứng dụng của bạn bị hạn chế với số lượng mục tiêu giới hạn, có lẽ bạn có thể tạo mã đơn giản của riêng mình. Ví dụ: bạn có thể đặt từ 0 đến 4 dấu chấm lớn trong mảng 2x2 sau tên của từng người. Mã ví dụ đơn giản này xác định duy nhất 16 thẻ duy nhất và các tính năng sẽ dễ dàng hơn để tạo hình ảnh, trích xuất và giải mã hơn các mã chính thức. Thêm một dòng định vị nếu vị trí mã không nhất quán.

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