Phần mềm, thư viện sử dụng

Một phần của tài liệu ỨNG DỤNG xử lý ẢNH đọc mã BARCODE CHO sản PHẨM tốc độ CAO (Trang 47)

2.6.1. Thư viện Zxing

Zxing (viết tắt của “zebra crossing”) là một thư viện mã nguồn mở, xử lý nhiều định dạng mã vạch 1 chiều và 2 chiều, được cài đặt bằng Java. Mục đích của thư viện này là sử dụng máy ảnh trên điện thoại di động để chụp và giải mã các mã vạch trên thiết bị, không cần phải kết nối với máy chủ. Hiện tại thư viện hỗ trợ các định dạng mã vạch sau: - UPC-A và UPC-E - EAN-8 và EAN-13 - Code 39 - Code 128 - QR Code - Data Matrix - ITF

Thư viện này được chia làm nhiều phần, các phần sau vẫn đang được hỗ trợ và phát triển thường xuyên:

- core: là phần lõi thư viện giải mã và là phần chính của toàn bộ dự án.

- javase: ứng dụng khách cho J2SE.

- android: ứng dụng khách cho Android.

- androidtest: chương trình demo trên Android.

- android-integration: thư viện hỗ trợ tích hợp Barcode Scanner (bộ quét mã vạch) thông qua Intent cho Android.

- zxingorg: mã nguồn của trang http://zxing.org/w.

- zxing.appspot.com: mã nguồn của trang web tạo mã vạch

http://zxing.appspot.com/.

Các mô đun sau được đóng góp và phát triển không thường xuyên:

- javame: ứng dụng khách cho JavaME.

- csharp: thư viện cho C#.

- cpp: thư viện cho C++.

- rim: ứng dụng khách cho RIM/Blackberry.

- bug: ứng dụng khách cho BugLabs’s BUG.

- symbian: thư viện cho Symbian

Hình 2.31. Quét mã vạch với thư viện zxing

2.6.2. OpenCV

OpenCV là một thư viện mã nguồn mở hàng đầu cho thị giác máy tính (computer vision), xử lý ảnh và máy học (Machine Learning), và các tính năng tăng tốc GPU trong thời gian hoạt động thực. OpenCV được phát hành theo giấy phép BSD, do đó nó hoàn toàn miễn phí cho cả học thuật và thương mại. Nó có các interface C++, C, Python, Java và hỗ trợ trên các hệ điều hành như Windows, Linux, Mac OS, IOS và Android. OpenCv được thiết kế để tính toán hiệu quả và với sự tập trung nhiều vào các ứng dụng thời gian thực. Được viết tối ưu hóa C/C++, thư viện có thể tận dụng lợi thế xử lý đa lõi. Được sử dụng trên khắp thế giới, OpenCV có cộng đồng hơn 47 nghìn người dùng và số lượng download vượt quá 6 triệu lần. Phạm vi sử dụng từ nghệ thuật tương tác, cho đến lĩnh vực khai thác mỏ, bản đồ trên web hoặc công nghệ robot.

Hình 2.32. OpenCV

OpenCV được ứng dụng rộng rãi trong các ứng dụng bao gồm:

- Hình ảnh street view

- Kiểm tra và giám sát tự động

- Robot và xe hơi tự lái

- Phân tích hình ảnh y tế

- Tìm kiếm và phục hồi hình ảnh, video

- Phim - cấu trúc 3D chuyển động Chức năng của OpenCV:

- Image/video I/O, xử lý, hiển thị (core, imgproc, highgui)

- Phát hiện vật thể (objdetect, features 2d, nonfree)

- Geometry-based monocular or stereo computer vision (calib3d, stitching, videostab)

- Computational photography (photo, video, superres)

- CUDA acceleration (GPU)

2.6.3. Ngôn ngữ lập trình C#

C# (hay C sharp) là một ngôn ngữ lập trình đơn giản, được phát triển bởi đội ngũ kỹ sư của Microsoft vào năm 2000. C# là ngôn ngữ lập trình hiện đại, hướng đối tượng và được xây dựng trên nền tảng của hai ngôn ngữ mạnh nhất là C++ và Java.

C# với sự hỗ trợ mạnh mẽ của .NET Framework giúp cho việc tạo một ứng dụng Windows Forms hay WPF (Windows Presentation Foundation), phát triển game, ứng dụng Web, ứng dụng Mobile trở nên rất dễ dàng.

Mono là phiên bản cộng đồng nhằm mang .NET đến những nền tảng ngoài Windows. Mono được phát triển chủ yếu nhằm xây dựng những ứng dụng với giao diện người dùng và được sử dụng rất rộng rãi: Unity Game, Xamarin…

Cho đến năm 2013, Microsoft định hướng đi đa nền tảng và phát triển .NET core. .NET core hiện được sử dụng trong các ứng dụng Universal Windows platform và ASP.NET Core. Từ đây, C# có thể được sử dụng để phát triển các loại ứng dụng đa nền tảng trên các hệ điều hành khác nhau (Windows, Linux, MacOS, …)

Hình 2.33. Ngôn ngữ lập trình C#

C# loại bỏ một vài sự phức tạp và rối rắm của những ngôn ngữ như Java và c+ +, bao gồm việc loại bỏ những macro, những template, đa kế thừa, và lớp cơ sở ảo (virtual base class). Ngôn ngữ C# đơn giản vì nó dựa trên nền tảng C và C++. Nếu ta

thân thiện với C và C++ hoặc thậm chí là Java, ta sẽ thấy C# khá giống về diện mạo, cú pháp, biểu thức, toán tử và những chức năng khác được lấy trực tiếp từ ngôn ngữ C và C++, nhưng nó đã được cải tiến để làm cho ngôn ngữ đơn giản hơn.

- C# là ngôn ngữ hiện đại

Điều gì làm cho một ngôn ngữ hiện đại? Những đặc tính như là xử lý ngoại lệ, thu gom bộ nhớ tự động, những kiểu, dữ liệu mở rộng và bảo mật mã nguồn là những đặc tính được mong đợi trong một ngôn ngữ hiện đại. C# chứa tất cả những đặc tính trên. Nếu là người mới học lập trình có thể ta sẽ cảm thấy những đặc tính trên phức tạp và khó hiểu. Tuy nhiên, cũng đừng lo lắng ta sẽ dần dần được tìm hiểu những đặc tính qua các nội dung khoá học này.

- C# là một ngôn ngữ lập trình thuần hướng đối tượng

Lập trình hướng đối tượng (OOP: Object-oriented programming) là một phương pháp lập trình có 4 tính chất. Đó là tính trừu tượng (abstraction), tính đóng gói (encapsulation), tính đa hình (polymorphism) và tính kế thừa (inheritance). C# hỗ trợ tất cả những đặc tính trên.

- C# là một ngôn ngữ ít từ khóa

C# là ngôn ngữ sử dụng giới hạn những từ khóa. Phần lớn các từ khóa được sử dụng để mô tả thông tin. Ta có thể nghĩ rằng một ngôn ngữ có nhiều từ khóa thì sẽ mạnh hơn. Điều này không phải sự thật, ít nhất là trong trường hợp ngôn ngữ C#, ngôn ngữ này có thể được sử dụng để làm bất cứ nhiệm vụ nào.

- Nền tảng .NET

.NET Framework được Microsoft đưa ra chính thức từ năm 2002. .NET Framework chỉ hoạt động trên Windows. Những nền tảng ứng dụng như WPF, Winforms, ASP.NET (1-4) hoạt động dựa trên .NET Framework.

Để giải quyết bài toán đọc mã barcode sử dụng thư viện OpenCV, ta có thể sử dụng các ngôn ngữ lập trình như: .NET C#, VB, IronPython, Java, C++…

Trong đồ án này ngôn ngữ lập trình được sử dụng là .NET C#, viết trên phần mềm Visual Studio.

Hình 2.34. Nền tảng .NET

2.6.4. Phần mềm lenSensor

Hình 2.35. Giao diện của phần mềm Lensensor

LensSensor là ứng dụng cần thiết cho các nhà tích hợp thị giác máy, cung cấp các công cụ linh hoạt để hỗ trợ đặc điểm kỹ thuật của ống kính, máy ảnh và giao diện máy ảnh cho ứng dụng. Máy tính ống kính linh hoạt xác định hình học, tiêu cự hoặc góc trực quan cần thiết của ống kính. Máy tính độ phân giải cung cấp độ phân giải thực có thể đạt được với một cảm biến cụ thể cùng với thông tin để xác định nhu cầu độ phân

giải của ống kính. Máy tính giao diện xác định các giao diện máy ảnh tương thích đáp ứng nhu cầu về tốc độ dữ liệu và độ dài cáp được chỉ định bởi tốc độ khung hình, độ phân giải và định dạng màu của ứng dụng. Ứng dụng này cũng cung cấp khả năng truy cập dễ dàng vào các sản phẩm và tin tức mới nhất từ STEMMER IMAGING. Không phù hợp với giao diện máy tính bảng.

2.6.5. Arduino IDE

IDE trong Arduino IDE là phần có nghĩa là mã nguồn mở, nghĩa là phần mềm này miễn phí cả về phần tải về lẫn phần bản quyền: Người dùng có quyền sửa đổi, cải tiến, phát triển, nâng cấp theo một số nguyên tắc chung được nhà phát hành cho phép mà không cần xin phép ai, điều mà họ không được phép làm đối với các phần mềm nguồn đóng.

Tuy là phần mềm mã nguồn mở nhưng khả năng bảo mật thông tin của Arduino IDE là vô cùng tuyệt vời, khi phát hiện lỗi nhà phát hành sẽ vá nó và cập nhật rất nhanh khiến thông tin của người dùng không bị mất hoặc rò rỉ ra bên ngoài.

Hình 2.36. Phần mềm Arduino IDE.

Thiết kế bo mạch nhỏ gọn, trang bị nhiều tính năng thông dụng mang lại nhiều lợi thế cho Arduino, tuy nhiên sức mạnh thực sự của Arduino nằm ở phần mềm. Môi trường lập trình đơn giản và dễ sử dụng, ngôn ngữ lập trình dễ sử dụng dựa trên nền

tảng C/C++ quen thuộc. Bênh cạnh đó còn có những thư viện phong phú như: EEPROM, Firmata, GSM, servo, TFT, Wifi, …Và các mảng thư viện có sẵn này càng đa dạng nhờ sự đóng góp của cộng đồng Arduino trên toàn thế giới.

Arduino IDE là phần mềm dùng để lập trình cho Arduino. Môi trường lập trình Arduino IDE có thể chạy trên ba nền tảng phổ biến hiện nay là Windows, Linux và MAC OS. Do có tính chất nguồn mở nên môi trường lập trình này hoàn toàn miễn phí và có thể mở rộng thêm bởi người dùng có kinh nghiệm.

Ngôn ngữ lập trình này có thể được mở rộng thông qua các thư viện C++. Và do ngôn ngữ này dựa trên nền tảng ngôn ngữ C của AVR nên người dùng hoàn toàn có thể nhúng thêm code viết bằng AVR vào chương trình nếu muốn.

Arduino có một module quản lý bo mạch, nơi người dùng có thể chọn bo mạch mà họ muốn làm việc cùng và có thể thay đổi bo mạch thông qua Menu. Quá trình sửa đổi lựa chọn cũng liên tục tự động cập nhật để các dữ liệu có sẵn trong bo mạch và dữ liệu sửa đổi đồng nhất với nhau. Bên cạnh đó, Arduino IDE cũng giúp tìm ra lỗi từ code mà giúp sửa lỗi kịp thời tránh tình trạng bo mạch Arduino làm việc với code lỗi quá lâu dẫn đến hư hỏng hoặc tốc độ xử lý bị giảm sút.

Arduino IDE tích hợp với hơn 700 thư viện, được viết và chia sẻ bởi nhà phát hành Arduino Software và thành viên trong cộng đồng Arduino. Ta có thể tận dụng chúng cho dự án của riêng mình mà không cần phải bỏ ra bất kỳ chi phí nào.

CHƯƠNG 3. THIẾT KẾ VÀ THI CÔNG MẠCH

3.1. Yêu cầu của đề tài

Với đề tài ứng dụng xử lý ảnh đọc mã tốc độ cao này, yêu cầu mô hình hệ thống cần có:

- Giao diện điều khiển hệ thống trực quan, dễ thao tác - Tốc độ đọc dự kiến 5 – 10 sản phẩm/ giây

- Ứng dụng thuật toán xử lý ảnh đọc barcode

- Chương trình điều khiển cho mạch điều khiển hoạt động ổn định

3.2. Tính toán, lựa chọn khoảng cách chụp ảnh cho hệ thống

Sử dụng phần mềm lenSensor của Stemmer để thực hiện việc tính toán, lựa chọn khoảng cách lắp đặt camera hợp lý, thu được hình ảnh chất lượng nhất về độ sáng và độ nét.

Các thông số đầu vào:

- Sensor Size: 1/3” (theo thông số kỹ thuật của camera Basler ac1300 30gm - 1.3MP)

- Kích thước hộp ghim bấm giấy: 3 x 5 cm

- Focal length: 16 mm (theo thông số kỹ thuật của Basler Lens C125-1620-5M- P f16mm – Lens)

Vậy khoảng cách giữa camera, lens và hộp ghim bấm giấy trong mô hình là 23,82 cm.

3.3. Lập trình Arduino3.3.1. Kết nối mạch điều khiển 3.3.1. Kết nối mạch điều khiển

3.3.2. Chức năng các khối

- Khối điều khiển: Arduino có chức năng điều khiển toàn bộ hệ thống, tốc độ quay của encoder, nhận tín hiệu từ cảm biến, gửi tín hiệu đến màn hình hiển thị LCD.

Hình 3.3. Khối điều khiển

- Khối hiển thị: Nhận kết quả thông báo từ hệ thống điều khiển và hiển thị ra màn hình.

Hình 3.4. Khối hiển thị

- Khối encoder: Chức năng chính là thực hiện quay, đảm bảo thu được tốc độ mong muốn cho hệ thống đọc barcode.

- Khối nút nhấn: thực hiện khởi động, dừng hoặc reset lại chương trình của hệ thống.

Hình 3.6. Khối nút nhấn

3.3.3. Lập trình và upload chương trình cho Arduino

Hình 3.2. Upload chương trình cho Arduino.

 Mở phần mềm Arduino, trong khung soạn thảo tiến hành soạn thảo chương trình.

3.4. Lưu đồ thuật toán

3.4.1. Lưu đồ thuật toán điều khiển thu ảnh

Trong đồ án nghiên cứu này, việc thực hiện thu ảnh được thực hiện dựa trên cơ chế hardtrigger.

Bước 1: Khởi tạo biến đếm sản phẩm, xung

Bước 2: Đo tốc độ vòng quay dựa vào encoder và lưu vào biến đếm xung sản phẩm countPulse.

Bước 3: Kiểm tra biến đếm và xung

Bước 4: Nếu bước 3 đúng thì gửi tín hiệu trigger về camera, nếu sai quay lại bước 2.

Bước 5: Kết thúc chương trình

3.4.2. Lưu đồ thuật toán xử lý ảnh

Trong đó:

Igray: Biến chứa ảnh đầu vào ở dạng gray ProductID: Biến chứa mã sản phẩm

Sau khi thu được ảnh, ta sẽ tiến hành xử lý ảnh thu được bằng xử lý ảnh và thực hiện đọc mã barcode sản phẩm.

Bước 1: Khởi tạo biến chứa ảnh đầu vào ở dạng Gray

Bước 2: Đối chiếu, kiểm tra biến ảnh đầu vào đã đúng ở dạng Gray chưa

Bước 3: Nếu bước 2 đúng, thực hiện tìm kiếm đường biên vùng sản phẩm, nếu sai quay lại bước khởi tạo ban đầu

Bước 4: Thực hiện cắt vùng ROI của ảnh dựa vào đường biên đã tìm kiếm được Bước 5: Đọc barcode trên vùng ROI và lưu vào biến chứa mã sản phẩm ProductID Bước 6: Kiểm tra biến chứa mã sản phẩm ProductID

Bước 7: Nếu bước 6 đúng, thực hiện hiển thị mã barcode của sản phẩm, nếu sai thì đưa ra cảnh báo lỗi do sản phẩm không chứa mã.

CHƯƠNG 4. KẾT QUẢ VÀ THẢO LUẬN 4.1. Đối tượng nghiên cứu

Hình 4.1 Mô hình sản phẩm

Mô hình cơ khí của hệ thống đọc mã barcode sản phẩm tốc độ cao bao gồm:

- Mâm xoay với encoder ở giữa điều khiển tốc độ của mâm quay

- Cảm biến phát hiện mỗi khi có sản phẩm đi qua

- Camera tiến hành chụp khi cảm biến gửi tín hiệu phát hiện sản phẩm đi qua

- Bộ nguồn cấp điện cho hệ thống

- Mạch điều khiển hệ thống

- Khung nhôm gá hệ thống

4.2. Xây dựng chương trình cho hệ thống đọc barcode4.2.1. Các bước xây dựng hệ thống C# 4.2.1. Các bước xây dựng hệ thống C#

Các bước thiết kế giao diện trên C# được thực hiện như sau: Bước 1: Vào Visual Studio và tạo Project mới như dưới đây.

Hình 4.2. Tạo project mới

Hình 4.3. Chọn Windows Form App(.NET Framework)

Bước 3: Đặt tên cho ứng dụng và vị trí lưu.

Hình 4.4. Khởi tạo thông tin app

Hình 4. 5. Giao diện với 1-ToolBox, 2-Giao diện chính, 3-Thông tin quản lý giao diện

Bước 5: Bắt đầu nạp code cho ứng dụng

4.2.2. Giao diện và hoạt động của hệ thống

Giao diện của hệ thống đọc mã barcode tốc độ cao được thiết kế dựa trên tiêu chí đơn giản, dễ sử dụng mà vẫn đáp ứng được đầy đủ thông tin cần cung cấp, hiển thị. Giao diện hiển thị của chương trình đọc mã barcode gồm bốn phần chính:

- Phần trung tâm: vùng hiển thị ảnh thu được từ camera và hiển thị kết quả đọc mã barcode

- Phần thông tin cá nhân: tên sinh viên, mã sinh viên, giảng viên hướng dẫn

- Phần thông tin sản phẩm: Mã barcode đọc được và tốc độ đọc mã của sản phẩm đó.

- Phần cài đặt:

+ Cài đặt các thông số cơ bản cho camera như kích thước của ảnh, chiều dài, chiều

Một phần của tài liệu ỨNG DỤNG xử lý ẢNH đọc mã BARCODE CHO sản PHẨM tốc độ CAO (Trang 47)

Tải bản đầy đủ (DOCX)

(73 trang)
w