CHƯƠNG 1: GIỚI THIỆU VỀ BÀI TOÁN1.1 Tìm hiểu về bài toán chương trình nhận dạng tên hàng hóa dựa trên việc nhận dạng ký tự: Bài toán chương trình nhận dạng tên hàng hóa dựa trên việc nhậ
Trang 1TRƯỜNG ĐẠI HỌC HÀNG HẢI VIỆT NAM VIỆN ĐÀO TẠO CHẤT LƯỢNG CAO
BÁO CÁO BÀI TẬP LỚN NHẬN DẠNG VÀ XỬ LÝ ẢNH
XÂY DỰNG CHƯƠNG TRÌNH NHẬN DẠNG TÊN HÀNG HOÁ DỰA TRÊN VIỆC NHẬN DẠNG KÝ TỰ
Giảng viên hướng dẫn TS Nguyễn Hữu Tuân
HẢI PHÒNG - 2024
Trang 2MỤC LỤC
CHƯƠNG 1: GIỚI THIỆU VỀ BÀI TOÁN 4
1.1 Tìm hiểu về bài toán 4
1.2 Khái quát về chương trình 5
1.3 Các bước thực hiện chương trình 6
1.4 Các ứng dụng của bài toán 8
CHƯƠNG 2: XÂY DỰNG CHƯƠNG TRÌNH 11
2.1 Ngôn ngữ Python 11
2.2 Thư viện Tkinter 11
2.3 Thư viện PIL 12
2.4 Thư viện Pickle 13
2.5 Thư viện EasyOCR 14
CHƯƠNG 3: QUÁ TRÌNH THỰC HIỆN VÀ KẾT QUẢ 16
3.1 Quá trình thực hiện 16
3.2 Kết quả 19
KẾT LUẬN 20 TÀI LIỆU SỬ DỤNG 22
Trang 3DANH MỤC HÌNH ẢNH
Hình 1 Hình ảnh về ứng dụng nhận dạng hình ảnh 6
Hình 2 Hình ảnh kết quả của Easy OCR 7
Hình 3 Trang web cài đặt python 7
Hình 4 Cài đặt các thư viện 8
Hình 5 Cài đặt các thư viện 9
Hình 6 Cài đặt các thư viện 14
Hình 7 Cấu trúc chương trình 16
Hình 8 Khai báo các thư viện 17
Hình 9 Dùng hàm open_image 17
Hình 10 Dùng hàm recognize_text 18
Hình 11 Dùng hàm draw_box 19
Hình 12 Tạo cửa sổ giao diện 19
Trang 4CHƯƠNG 1: GIỚI THIỆU VỀ BÀI TOÁN
1.1 Tìm hiểu về bài toán chương trình nhận dạng tên hàng hóa dựa trên việc nhận dạng ký tự:
Bài toán chương trình nhận dạng tên hàng hóa
dựa trên việc nhận dạng ký tự là một bài toán trong lĩnh
vực Trí tuệ nhân tạo và Xử lý ảnh, mục tiêu của nó là
phát triển các hệ thống có khả năng tự động nhận dạng
và phân loại tên của các sản phẩm từ hình ảnh sản phẩm
Cụ thể, khi có một hình ảnh chứa tên của một sản
phẩm (ví dụ: một hình ảnh chứa nhãn sản phẩm trên một
hộp hàng hoặc một hình ảnh chứa tên sản phẩm trong
một bức ảnh chụp của một cửa hàng), hệ thống sẽ thực
hiện các bước sau:
Nhận dạng văn bản (OCR): Hệ thống sẽ sử dụng các thuật toánnhận dạng ký tự để trích xuất văn bản từ hình ảnh Các kỹ thuật này
có thể sử dụng các phương pháp truyền thống như Tesseract OCRhoặc các mô hình học sâu như CNNs và RNNs
Phân loại sản phẩm: Sau khi nhận dạng được văn bản, hệ thống sẽ
so sánh thông tin văn bản với một cơ sở dữ liệu đã được xây dựngtrước, chứa các tên sản phẩm được xác định trước Quá trình nàygiúp hệ thống xác định tên chính xác của sản phẩm từ thông tin vănbản được trích xuất
Trả về kết quả: Khi đã nhận dạng và phân loại được tên sản phẩm,
hệ thống sẽ trả về kết quả cho người dùng hoặc sử dụng trong cácquy trình tự động hóa khác, như quản lý tồn kho, đặt hàng, hoặcgiao hàng
Hnh 1 Hnh ảnh về nhận dạng hnh ảnh
Trang 5Bài toán này có ứng dụng rộng rãi trong nhiều lĩnh vực như bán lẻ, quản
lý kho, giao hàng, và tự động hóa quy trình sản xuất, giúp tối ưu hóa quy trìnhkinh doanh và cải thiện trải nghiệm của người tiêu dùng
1.2 Khái quát về bài toán chương trình nhận dạng tên hàng hóa dựa trên việc nhận dạng ký tự:
Yêu cầu của bài toán:
Nhận dạng chính xác: Hệ thống phải có khả năng nhận dạng chínhxác các ký tự từ hình ảnh sản phẩm Độ chính xác này cần đáp ứngyêu cầu của ứng dụng cụ thể, ví dụ như ít nhất 95% đúng cho cácứng dụng có yêu cầu cao về chính xác
Tính nhanh và hiệu quả: Hệ thống cần xử lý nhanh chóng để cungcấp kết quả trong thời gian gần thời gian thực Thời gian xử lýkhông nên quá lâu đối với mỗi hình ảnh
Hỗ trợ cho nhiều ngôn ngữ và font chữ: Hệ thống cần có khả năngnhận dạng các ký tự từ nhiều ngôn ngữ và font chữ khác nhau, đặcbiệt là khi hoạt động trong môi trường đa quốc gia
Tương thích với các định dạng ảnh khác nhau: Hệ thống cần có khảnăng nhận dạng ký tự từ các định dạng ảnh phổ biến như JPEG,PNG, GIF, và có thể xử lý các biến thể như ảnh có nền động, ảnhnghiêng, hoặc có nhiễu
Tính linh hoạt và mở rộng: Hệ thống cần được thiết kế để có thể
mở rộng và linh hoạt, cho phép thêm mới các danh mục hàng hóa
và cải thiện hiệu suất dự đoán khi có dữ liệu mới
Bảo mật và quản lý dữ liệu: Hệ thống cần đảm bảo an toàn và bảomật cho dữ liệu hàng hóa và thông tin khách hàng, đồng thời tuânthủ các quy định về bảo vệ dữ liệu
Trang 6 Giao diện người dùng thân thiện: Giao diện của hệ thống cần đơngiản và dễ sử dụng cho người dùng cuối, cho phép họ dễ dàngtương tác và nhận kết quả một cách hiệu quả.
Tích hợp với hệ thống khác (nếu cần): Hệ thống cần có khả năngtích hợp với các hệ thống khác như hệ thống quản lý kho, hệ thốngthanh toán, hoặc các hệ thống CRM (Quản lý mối quan hệ kháchhàng) để cung cấp thông tin chi tiết về sản phẩm và đơn hàng
1.3 Các bước tiền xử lý bài toán:
Các bước cơ bản thực hiện bài toán:
Thu thập dữ liệu: Thu thập một tập dữ liệu ảnh chứa các hình ảnhcủa các sản phẩm bạn muốn nhận dạng
Tiền xử lý ảnh: Sử dụng các kỹ thuật tiền xử lý ảnh để cải thiệnchất lượng của ảnh và giảm nhiễu Điều này có thể bao gồm việcđiều chỉnh cường độ ánh sáng, cân bằng màu sắc, loại bỏ nền, vàcắt ảnh sao cho chỉ còn lại sản phẩm
Nhận dạng ký tự: Sử dụng các thuật toán nhận dạng ký tự (OCR Optical Character Recognition) để trích xuất văn bản từ các hìnhảnh Có thể sử dụng các thư viện và công cụ như Tesseract OCRhoặc các mô hình học sâu như CNN và LSTM
- Phân loại sản phẩm: Sử dụng thông tin văn bản được nhận dạng từảnh để so khớp với các mẫu tên hàng hóa trong cơ sở dữ liệu củabạn Có thể sử dụng các phương pháp so khớp chuỗi (stringmatching) hoặc các mô hình học máy như máy vector hỗ trợ(SVM), mạng nơ-ron hồi quy (RNN), hoặc mạng nơ-ron biến thể
Kiểm tra và tinh chỉnh: Kiểm tra hiệu suất của hệ thống nhận dạng
và tinh chỉnh các tham số của các thành phần trong quy trình như
kỹ thuật tiền xử lý, mô hình nhận dạng ký tự và phân loại sảnphẩm
Trang 7 Triển khai: Triển khai hệ thống nhận dạng vào môi trường thực tế
và kiểm tra tính ổn định và độ chính xác của nó
1.4 Các ứng dụng của bài toán chương trình nhận dạng tên hàng hóa dựa trên việc nhận dạng ký tự:
Tăng hiệu suất và tự động hóa: Hệ thống nhận dạng tên hàng hóagiúp tăng hiệu suất và tự động hóa quy trình xác định sản phẩmtrong các cửa hàng bán lẻ, kho hàng, hoặc trong quy trình sản xuất
Tiết kiệm thời gian và nhân lực: Thay vì phải thực hiện thủ côngviệc đọc và xác định tên hàng hóa, hệ thống nhận dạng ký tự có thểthực hiện nhanh chóng và tự động, giúp tiết kiệm thời gian và nhânlực
Minh bạch và chính xác: Bằng cách tự động ghi nhận thông tin vềhàng hóa, hệ thống nhận dạng ký tự giúp tăng cường minh bạch vàchính xác trong quản lý hàng hóa và dịch vụ
Tối ưu hóa quy trình tồn kho: Việc nhận dạng tự động giúp cập nhậtthông tin về hàng hóa trong hệ thống quản lý tồn kho một cáchnhanh chóng và chính xác, từ đó giúp tối ưu hóa quy trình quản lýtồn kho và đặt hàng
Nâng cao trải nghiệm khách hàng: Bằng cách cung cấp thông tinchính xác và nhanh chóng về sản phẩm, hệ thống nhận dạng tênhàng hóa giúp nâng cao trải nghiệm mua sắm và tương tác vớikhách hàng
Phát hiện gian lận và quản lý rủi ro: Hệ thống nhận dạng tên hànghóa có thể được sử dụng để phát hiện gian lận hoặc kiểm tra tínhtrùng lặp trong quá trình đóng gói và giao hàng, từ đó giúp quản lýrủi ro và bảo vệ quyền lợi của người tiêu dùng
Hỗ trợ ra quyết định: Dữ liệu được tự động nhận dạng và phân loại
có thể được sử dụng để hỗ trợ ra quyết định liên quan đến quản lýtồn kho, đặt hàng, và các chiến lược kinh doanh khác
Trang 8CHƯƠNG 2: XÂY DỰNG CHƯƠNG TRÌNH
2.1 Ngôn ngữ Python
Python là một ngôn ngữ lập trình thông dịch, đa mục đích, và dễ học.Được phát triển bởi Guido van Rossum và được ra mắt lần đầu vào năm 1991,Python đã nhanh chóng trở thành một trong những ngôn ngữ lập trình phổ biếnnhất trên thế giới Dưới đây là một số đặc điểm chính và thông tin cơ bản vềPython:
Đặc Điểm:
Dễ Học và Dễ Đọc: Python được thiết kế với cú pháp đơn giản và rõ ràng,giúp cho người mới học lập trình có thể nhanh chóng tiếp cận và làmquen
Đa Mục Đích: Python hỗ trợ nhiều mục đích khác nhau, từ lập trình web,phát triển game, xử lý dữ liệu, đến trí tuệ nhân tạo và tính toán khoa học
Hỗ Trợ Thư Viện Phong Phú: Python có một cộng đồng lớn và năng động,cung cấp hàng ngàn thư viện và module cho nhiều mục đích khác nhau
Ví dụ như NumPy, Pandas, TensorFlow, Django, Flask, và nhiều thư việnkhác
Tính Mở và Miễn Phí: Python là một phần mềm mã nguồn mở và miễnphí, có nghĩa là mọi người có thể sử dụng, sửa đổi và phân phối lại mãnguồn mà không phải trả tiền
Python không chỉ là một ngôn ngữ lập trình mạnh mẽ mà còn là một cộngđồng lớn mạnh với hàng ngàn tài liệu, hướng dẫn và hỗ trợ Điều này khiếnPython trở thành một lựa chọn phổ biến cho người mới bắt đầu và những nhàphát triển kinh nghiệm
2.2 Thư viện Tkinter
Tkinter là một thư viện giao diện người dùng (GUI) mạnh mẽ và dễ sửdụng được tích hợp sẵn trong Python Với Tkinter, bạn có thể tạo ra các ứngdụng đồ họa tương tác trên nền tảng desktop một cách dễ dàng Dưới đây là một
số đặc điểm và chức năng chính của Tkinter:
Trang 9 Đa Nền Tảng và Độ Di Động: Tkinter hỗ trợ trên nhiều hệ điều hành khácnhau như Windows, macOS, và Linux Điều này cho phép bạn phát triểnứng dụng một lần và chạy trên nhiều hệ điều hành mà không cần phải điềuchỉnh mã nguồn.
Xử Lý Sự Kiện: Tkinter cho phép bạn gắn kết các hàm xử lý sự kiện vớicác widget Điều này giúp ứng dụng của bạn có thể phản ứng đúng khingười dùng tương tác với các phần tử trên giao diện
Tkinter là một lựa chọn tuyệt vời cho việc phát triển các ứng dụngdesktop đơn giản hoặc trung bình, với sự kết hợp giữa tính linh hoạt và sứcmạnh của Python
2.3 Thư viện PIL
PIL là viết tắt của Python Imaging Library, là một thư viện Python mạnh
mẽ để xử lý và chỉnh sửa hình ảnh PIL cung cấp nhiều chức năng cho việc tải,lưu, chỉnh sửa, biến đổi và thao tác với hình ảnh trong Python
Dưới đây là một số tính năng chính của thư viện PIL:
Đọc và ghi hình ảnh: PIL hỗ trợ nhiều định dạng hình ảnh như JPEG,PNG, GIF, BMP và TIFF Bạn có thể dễ dàng đọc và ghi hình ảnh từ và đến cáctệp tin định dạng này
Chỉnh sửa hình ảnh: PIL cho phép bạn thực hiện các phép biến đổi hìnhảnh như cắt, xoay, thu phóng, lật và xoay ngược Bạn có thể điều chỉnh kíchthước, màu sắc, độ sáng, độ tương phản và nhiều yếu tố khác của hình ảnh.Thao tác pixel: Bạn có thể truy cập và chỉnh sửa từng pixel trong hìnhảnh PIL cung cấp các phương thức để lấy giá trị màu sắc của pixel, đặt giá trịmàu sắc mới, tìm kiếm và thay thế màu sắc cụ thể, và thực hiện các phép tínhtoán pixel khác
2.4 Thư viện Pickle
Thư viện pickle trong Python là một công cụ mạnh mẽ cho việcserialization và deserialization của các đối tượng Python Trong ngữ cảnh này,serialization đề cập đến quá trình chuyển đổi một đối tượng Python thành một
Trang 10định dạng có thể được lưu trữ hoặc truyền tải, trong khi deserialization là quátrình ngược lại, chuyển đổi dữ liệu đã được serialized thành một đối tượngPython.
Thư viện pickle cho phép bạn lưu trữ một loạt các đối tượng Python nhưdanh sách, từ điển, các đối tượng tùy chỉnh và nhiều hơn nữa dưới dạng các tệptin hoặc dữ liệu nhị phân Điều này rất hữu ích khi bạn muốn lưu trữ dữ liệu tạmthời hoặc truyền dữ liệu giữa các ứng dụng Python khác nhau
Với thư viện pickle, bạn có thể dễ dàng lưu trữ trạng thái của các đốitượng Python và khôi phục chúng sau này mà không mất đi cấu trúc hoặc dữliệu của chúng Điều này giúp cho việc làm việc với dữ liệu trở nên linh hoạt vàthuận tiện hơn trong các dự án Python của bạn
2.5 Thư viện EasyOCR
Hnh 2 Hnh ảnh kết quả của Easy OCR
Giới Thiệu: EasyOCR là một thư viện mã nguồn mở được thiết kế để dễ dàng sử dụng cho việc nhận dạng ký tự (OCR) từ hình ảnh bằng ngôn ngữ lập
Trang 11trình Python EasyOCR hỗ trợ việc nhận dạng văn bản từ nhiều ngôn ngữ và font chữ khác nhau, và có thể được sử dụng trong nhiều ứng dụng khác nhau như nhận dạng biển số xe, giấy tờ cá nhân, hay nhãn sản phẩm.
Tính Năng Chính:
Hỗ trợ nhiều ngôn ngữ: EasyOCR có khả năng nhận dạng văn bản
từ nhiều ngôn ngữ khác nhau, bao gồm cả các ngôn ngữ phổ biến
và ngôn ngữ ít được sử dụng
Đơn giản và dễ sử dụng: Thư viện này được thiết kế để dễ dàng tíchhợp vào các ứng dụng và dịch vụ thông qua API hoặc gói cài đặtđơn giản
Hỗ trợ nhiều nguồn dữ liệu: EasyOCR có khả năng nhận dạng vănbản từ ảnh chụp từ nhiều nguồn khác nhau, bao gồm cả văn bản in,chữ viết tay và chữ trên biển số xe
Kiến Trúc và Hoạt Động: EasyOCR sử dụng các mô hình học máy
để nhận dạng ký tự từ hình ảnh Quá trình này bao gồm các bướcnhư tiền xử lý ảnh, trích xuất đặc trưng, và phân loại ký tự.EasyOCR cung cấp giao diện lập trình ứng dụng (API) để giao tiếpvới các ứng dụng khác và hỗ trợ tích hợp dễ dàng vào các dự án.Cách sử dụng:
Để sử dụng thư viện EasyOCR trong Python, cần cài đặt nó thôngqua pip và sau đó import nó vào mã của mình Đây là các bước cơbản để sử dụng EasyOCR:
Cài đặt EasyOCR: Mở terminal hoặc command prompt và chạylệnh sau để cài đặt EasyOCR:
pip install easyocr
Import EasyOCR: Trong mã Python, import EasyOCR như sau:
import easyocr
Hiệu Suất và Độ Chính Xác: Hiệu suất và độ chính xác của EasyOCR phụthuộc vào nhiều yếu tố như chất lượng ảnh đầu vào, ngôn ngữ được nhận dạng,
Trang 12và điều kiện ánh sáng Tuy nhiên, thư viện này đã được đánh giá là có hiệu suấttốt trong việc nhận dạng văn bản từ hình ảnh.
EasyOCR là một công cụ mạnh mẽ và linh hoạt cho việc nhận dạngvăn bản từ hình ảnh Với khả năng tích hợp dễ dàng, hỗ trợ nhiềungôn ngữ và hiệu suất tốt, EasyOCR là lựa chọn phổ biến cho các
dự án cần tính năng OCR
Trang 13CHƯƠNG 3: QUÁ TRÌNH THỰC HIỆN VÀ KẾT QUẢ
3.1 Quá trình thực hiện
Đầu tiên ta cần cài đặt môi trường cho việc xây dựng chương trình trênnền tảng ngôn ngữ python
Hnh 3 Trang web cài đặt python
Sau khi đã cài đặt xong ta sẽ cài đặt các thư viện được giới thiệu ở chương
2 bằng lệnh PIP
PIP là công cụ quản lý gói cho Python, cho phép bạn cài đặt và quản lýcác gói thư viện Python PIP được cài đặt sẵn khi cài đặt Python từ phiên bản2.7.9 và phiên bản 3.4 trở đi
Trước tiên bạn vào đường link https://bootstrap.pypa.io/pip.py -o pip.py để tải file get-pip.py Sau đó chạy lệnh python get-pip.py trên commander
get-để cài đặt PIP
Sau đó sử dụng các lệnh pip để cài đặt thư viện trên commander lần lượt nhưsau:
pickle: pip install pickle-mixin
PIL: pip install Pillow
EasyOCR: pip install easyocr
Trang 14Hnh 4 5 6 Cài đặt các thư viện
Thư viện tkinter đã được tích hợp sẵn trong gói ngôn ngữ python nên takhông cần tải nó
Đây là cấu trúc của chương trình
Trang 16Hàm open_image() trong đoạn mã thực hiện các công việc sau:
Mở file hình ảnh: Sử dụng hộp thoại filedialog.askopenfilename(),hàm này cho phép người dùng chọn một file hình ảnh từ hệ thốngtệp của họ và trả về đường dẫn của file được chọn
Đọc ảnh: Sử dụng Image.open() từ thư viện PIL (Pillow) để mở vàđọc hình ảnh từ đường dẫn được chọn
Chuyển đổi hình ảnh thành đối tượng Tkinter: Sau khi đọc hìnhảnh, hàm chuyển đổi nó thành một đối tượng PhotoImage từ thưviện PIL (Pillow), để có thể hiển thị trong giao diện người dùngTkinter
Cập nhật hình ảnh trong giao diện người dùng: Sử dụng phươngthức configure() của đối tượng label để cập nhật hình ảnh hiển thịtrong giao diện người dùng
Nhận dạng văn bản từ hình ảnh: Gọi hàm recognize_text(file_path)
để nhận dạng văn bản từ file hình ảnh được chọn Có thể giả sửrằng hàm recognize_text() đã được định nghĩa ở nơi khác trong mã
Vẽ hộp giữa các từ được nhận dạng: Gọi hàm draw_box(result,image) để vẽ hộp giữa các từ đã được nhận dạng trên hình ảnh.Điều này giúp làm nổi bật văn bản được nhận dạng trong hình ảnh