2010-08-17 85 views
5

Là một dự án về kinh nghiệm/học tập thú cưng (không phải đây không phải là bài tập về nhà), tôi đang làm việc trên phần mềm để nhận dạng mã vạch từ một bức ảnh. Tôi không tìm kiếm phần mềm hay thư viện nào - thay vào đó tôi sử dụng nó như một bài tập học tập mà tôi viết blog và sẽ đăng lên Codeplex.Nhận dạng mã vạch với AI

I have code that successfully recognizes EAN13 barcodes (which I published on CodePlex) và phiên bản UPC A/E sẽ sớm được thực hiện. Tuy nhiên, tôi có hai lĩnh vực mà tôi quan tâm. Đầu tiên là giải mã mã vạch trong một bức ảnh có chút mờ hoặc kém tương phản, vv Thứ hai là chỉ cần tìm mã vạch thực tế trong một bức tranh lớn hơn (ngay bây giờ bạn phải cho tôi một bức ảnh chỉ là mã vạch).

Tôi có cảm giác ruột rằng một số dạng AI sẽ giúp tôi ở đây. Tôi đã chơi một chút trong quá khứ với các thuật toán di truyền và tôi đã học một khóa học trước đây về AI nên nó không hoàn toàn xa lạ với tôi, nhưng tôi không hoàn toàn chắc chắn bắt đầu từ đâu.

Loại thuật toán nào phù hợp nhất với loại sự cố này? Bất kỳ đề nghị đọc hoặc mã cho AI grunt làm việc? Vâng, tôi muốn hiểu những gì đang xảy ra, nhưng tôi không nhất thiết muốn đi xuống cấp độ mã hóa các loại, v.v.

+3

Có thể là mạng thần kinh? Tôi không biết. Có lẽ tôi giống như mạng lưới thần kinh. AI bảo tôi thích chúng. Hoặc cái gì đó khác. –

+0

@ fire.eagle: Bất kỳ liên kết hoặc con trỏ nào cho tôi? Các tìm kiếm trên web về "Mạng nơron" và "ANN" là quá rộng. :) – ctacke

+0

Tôi lấy nó bạn đã thấy ứng dụng RedLaser cho iPhone? –

Trả lời

8

Tôi khuyên bạn nên tìm kiếm các thuộc tính mà mã vạch có. Một số mà tôi có trong tâm trí là:

  1. Histogram của màu sắc cho thấy hai màu sắc khác nhau trong khoảng thậm chí phân phối
  2. Làm một hough transformation tìm thấy nhiều đường song song
  3. Độ dày của dây chuyền có hai kích thước khác nhau.

Một số khác?

Có điều này tôi sẽ chia hình ảnh thành nhiều phần và phân loại với các tính năng này sau đó cobine kết quả để tính toán một liklyhood nếu mảnh có chứa một mã vạch hay không.

Đối với vấn đề thứ hai của bạn (hình ảnh bị mờ), tôi sẽ đề xuất tính 1st order derivative giá trị xám và sau đó phát hiện các cạnh của các đường trong không gian này. Tối đa đạo hàm thấp hơn nếu hình ảnh bị nhòe nhưng nó có thể phát hiện được với một yếu tố làm mờ nhất định.

Điều này có giúp ích cho bạn không?

0

Bạn không cần bất kỳ kỹ thuật AI hoặc softcomputing cụ thể nào. Bạn cần áp dụng kỹ thuật xử lý hình ảnh để cải thiện chất lượng hình ảnh hoặc tách biệt mã vạch khỏi hình ảnh lớn hơn. Bạn có thể sử dụng Matlab để tạo mẫu và tìm hiểu thêm về xử lý hình ảnh.

+0

Loại "kỹ thuật xử lý hình ảnh" nào? Tôi cũng đang viết mã ở đây. Tôi có một hình ảnh được chụp bằng điện thoại di động của mình, tôi muốn quay lại một chuỗi. Matlab không phải là tất cả những gì được áp dụng trong công thức đó theo như tôi thấy. – ctacke

+0

Matlab là một công cụ wonderfool để xử lý hình ảnh và khám phá và tìm ra giải pháp phù hợp với nhu cầu của bạn. Có rất nhiều bộ lọc và chức năng. Trạng thái của thị giác máy tính hiện đại được cô đặc trong thư viện xử lý hình ảnh Matlab. Một khi bạn đã tìm ra giải pháp tốt nhất bạn dịch nó bằng ngôn ngữ lập trình và nền tảng bạn chọn. Tôi không thể cho bạn biết sự chấp thuận tốt nhất để giải quyết vấn đề của bạn là gì. Bạn phải thử nghiệm một chút. –

4

Như đã lưu ý, bạn không cần bất kỳ kỹ thuật AI thực sự nào cho nó. Hãy xem chương 12 của số Real World Haskell. Nó thực hiện một bộ nhận dạng mã vạch gần như hoàn chỉnh. Mã mẫu là trong Haskell, nhưng có rất nhiều lời giải thích, vì vậy bạn có thể có thể hiểu được những ý tưởng và thủ thuật ngay cả khi không có kinh nghiệm Haskell.

Nếu bạn muốn giải quyết bằng AI thì đặt cược tốt nhất có thể là sử dụng ANN. Đối với vấn đề nhất định, tôi khuyên bạn nên sử dụng một kỹ thuật khá tiên tiến được gọi là HyperNEAT.Xem giải thích của tôi (và liên kết) là câu trả lời đầu tiên cho câu hỏi SO Neural Network Size...

tôi có lẽ sẽ sử dụng hai hoặc ba mạng khác nhau,

  • Người đầu tiên tìm thấy mã vạch trên bức tranh lớn hơn. Một nơron đầu ra trên mỗi pixel/bộ pixel, giá trị đầu ra là sự tự tin nếu pixel đó có vẻ là một phần của mã vạch. Dựa trên kết quả, tôi sẽ sử dụng một số chuyển đổi hình ảnh để chuyển đổi sang định dạng "chuẩn" (hình chữ nhật x * y)
  • Nếu bạn gặp khó khăn trong việc tìm vị trí mã vạch sử dụng mã vạch thứ hai. Cho ăn kết quả của cái đầu tiên, và yêu cầu nó cho các tọa độ của hai góc. Tuy nhiên, tôi không hoàn toàn chắc chắn rằng nó sẽ rất dễ dàng để phát triển này.
  • Tác phẩm cuối cùng sẽ hoạt động trên định dạng chuẩn, nơron đầu ra cho mỗi dòng (hoặc hình vuông, nếu bạn làm việc với mã vạch 2D có thể), nói rằng khu vực đã cho nên được coi là đen hoặc trắng.

Có lẽ nó cũng sẽ giúp thực hiện một số xử lý trước hình ảnh, ví dụ: những thứ được mô tả trong RWH.

+0

Âm thanh HyperNEAT thực sự thú vị –

+0

Đúng, đó là một kỹ thuật rất mạnh mẽ. Nghiên cứu khá chuyên sâu và chúng thường có các ứng dụng/mở rộng rất sáng tạo. –