Bối cảnh và vấn đề nghiên cứu

Trong quy trình điều trị y tế, việc tìm kiếm và mua đúng các loại thuốc theo đơn đóng vai trò sống còn đối với sức khỏe bệnh nhân, đặc biệt là nhóm người mắc các bệnh lý mãn tính phải sử dụng kết hợp nhiều loại biệt dược cùng lúc. Thực tế cho thấy, bệnh nhân và thân nhân thường xuyên gặp trở ngại trong việc xác định nhà thuốc nào có sẵn các mặt hàng trong đơn và có vị trí địa lý thuận tiện nhất. Các sai sót trong quá trình tra cứu hoặc mua nhầm danh mục thuốc có thể dẫn đến những hệ lụy nghiêm trọng về sức khỏe.

Mặc dù thị trường hiện nay đã xuất hiện một số ứng dụng di động và phần mềm trực tuyến hỗ trợ quản lý thuốc, phần lớn các giải pháp này chỉ dừng lại ở tính năng cơ bản và đòi hỏi người dùng phải nhập liệu thủ công từng tên thuốc. Quá trình nhập liệu thủ công gây tốn nhiều thời gian, công sức và dễ phát sinh nhầm lẫn đối với các tên thuốc phức tạp. Công nghệ nhận dạng ký tự quang học (OCR) và xử lý ảnh đã có những bước tiến lớn, tuy nhiên việc tự động nhận diện chính xác thông tin từ đơn thuốc thực tế vẫn là thách thức kỹ thuật không nhỏ do chất lượng ảnh chụp không đồng đều, độ phân giải kém hoặc chữ viết tay phức tạp. Đồng thời, các giải pháp hiện hành còn thiếu sự liên kết đồng bộ giữa khâu nhận diện toa thuốc, tra cứu giá bán, đối chiếu kho hàng và phân tích tương tác thuốc.

Từ thực tiễn đó, khóa luận tốt nghiệp ngành Kỹ thuật Máy tính của tác giả Nguyễn Mạnh Quyền và Lê Ngọc Quang (Trường Đại học Công nghệ Thông tin – ĐHQG-HCM, năm 2024) thực hiện đề tài "Thiết kế giải pháp hỗ trợ tra cứu điểm bán thuốc dựa trên ảnh chụp toa thuốc" nhằm tự động hóa quy trình bóc tách thông tin đơn thuốc và hỗ trợ tra cứu điểm bán thuốc nhanh chóng, chính xác.

Mục tiêu nghiên cứu của đề tài được xác định cụ thể trong văn bản như sau:

  1. Mục tiêu tổng quát: Phát triển một hệ thống nhận diện thông tin trên đơn thuốc bằng cách tích hợp công nghệ nhận diện hình ảnh để tự động nhận diện các thông tin quan trọng từ đơn thuốc (bao gồm tên thuốc, giá tiền và các nhà thuốc bán đơn thuốc đó), giúp tiết kiệm thời gian và cải thiện quá trình quản lý thuốc cho bệnh nhân.
  2. Mục tiêu cụ thể:
    • Tích hợp mô hình trích xuất thông tin từ hình ảnh vào giải pháp hỗ trợ tra cứu: Cho phép tải hình ảnh đơn thuốc để hệ thống tự động nhận diện, trích xuất và trả về thông tin chi tiết.
    • Phát triển giao diện người dùng thân thiện: Xây dựng giao diện trực quan, dễ thao tác để người dùng chụp ảnh và tiếp nhận thông tin đơn thuốc thuận tiện.
    • Cung cấp thông tin chi tiết và đáng tin cậy: Đảm bảo hệ thống nhận diện và hiển thị đầy đủ tên thuốc, mức giá và danh sách nhà thuốc phân phối tương ứng.
    • Mục tiêu cải tiến so với thực trạng: Giảm bớt thời gian, công sức nhập liệu thủ công; tăng cường độ chính xác, hạn chế nhầm lẫn và tối ưu hóa quy trình tiếp cận dịch vụ chăm sóc sức khỏe.

Đối tượng nghiên cứu của khóa luận là quy trình trích xuất dữ liệu từ hình ảnh đơn thuốc y tế, cơ sở dữ liệu danh mục dược phẩm từ các nhà thuốc thương mại và giải pháp hiển thị định vị điểm bán trên nền tảng bản đồ số. Phạm vi nghiên cứu về mặt không gian tập trung vào việc thu thập dữ liệu từ hệ thống các nhà thuốc tại Việt Nam (thử nghiệm trên dữ liệu của chuỗi nhà thuốc Long Châu và Minh Châu). Về mặt công nghệ, nghiên cứu giới hạn ở mức độ xây dựng giải pháp học thuật, phi thương mại; sử dụng các nền tảng mở và miễn phí (như OpenStreetMap và kỹ thuật cào dữ liệu định kỳ), do đó dữ liệu đầu ra được định vị phục vụ mục đích tham khảo học thuật.

Cơ sở lý thuyết và phương pháp

Khóa luận áp dụng mô hình phát triển phần mềm đa nền tảng kết hợp các công cụ xử lý dữ liệu và hệ thống định vị mở:

  • Khung ứng dụng Qt và ngôn ngữ QML: Khóa luận sử dụng khung phát triển Qt (The Qt Company và Qt Project) để xây dựng ứng dụng đồ họa (GUI). Tác giả ứng dụng ngôn ngữ khai báo QML (Qt Meta-object Language) kết hợp mã nguồn C++ và JavaScript nhằm thiết kế giao diện động Qt Quick. Môi trường phát triển tích hợp (IDE) chính là Qt Creator, được lựa chọn nhờ ưu thế dung lượng nhẹ hơn Android Studio, tích hợp sẵn trình biên dịch, công cụ gỡ lỗi nâng cao và hỗ trợ liên kết các thư viện xử lý ảnh OpenCV (opencv_core, opencv_imgcodecs, opencv_imgproc, opencv_highgui).
  • Nền tảng bản đồ OpenStreetMap (OSM): Nhóm tác giả tích hợp nền tảng bản đồ mở OpenStreetMap (cấp phép theo Giấy phép Công cộng Mở Giới hạn - OSPL) thay cho các dịch vụ bản đồ thương mại nhằm tiết kiệm chi phí. Ứng dụng khai thác hai module chính của Qt: Qt Location (chứa widget MapView, PlaceSearchModel, RouteModel để tải bản đồ, tìm địa điểm và vẽ tuyến đường) và Qt Positioning (sử dụng hàm PositionSource nhằm thu nhận tọa độ GPS của thiết bị).
  • Hệ thống cơ sở dữ liệu:
    • Firebase Realtime Database (Google): Cơ sở dữ liệu NoSQL trên đám mây dùng để quản lý phiên làm việc, lưu trữ và đồng bộ hóa thông tin tài khoản người dùng theo thời gian thực. Dữ liệu mật khẩu được mã hóa an toàn qua thuật toán băm SHA.
    • MongoDB: Hệ quản trị cơ sở dữ liệu hướng tài liệu được triển khai trên máy chủ trung gian để lưu trữ ảnh chụp đơn thuốc, kết quả bóc tách OCR và các ghi chú tương ứng của từng người dùng.
    • Tệp dữ liệu CSV: Lưu trữ kho dữ liệu dược phẩm sau khi thu thập để phục vụ tra cứu cục bộ.
  • Phương pháp thu thập dữ liệu (Web Scraping): Tác giả sử dụng ngôn ngữ Python cùng thư viện BeautifulSoup (BS4) để trích xuất dữ liệu bán lẻ tự động từ mã nguồn HTML/XML của các website nhà thuốc.
  • Phương pháp nhận dạng ký tự quang học (OCR) và kiến trúc API: Ứng dụng sử dụng mô hình trí tuệ nhân tạo/OCR triển khai trên Server độc lập, giao tiếp với client Qt qua hệ thống RESTful API với các định dạng dữ liệu chuẩn hóa gồm chuỗi văn bản (String), tệp hình ảnh (PNG, JPEG) và định dạng JSON.

Thiết kế và triển khai

Hệ thống được thiết kế theo kiến trúc 3 lớp (Three-tier Architecture) nhằm tách biệt phần hiển thị, xử lý nghiệp vụ và lưu trữ:

  1. Lớp Giao diện Người dùng (Presentation Layer): Xây dựng bằng QML và Qt Creator, gồm các màn hình chức năng: Đăng nhập/Đăng ký, Tab Chụp ảnh đơn thuốc, Tab Tìm kiếm sản phẩm theo danh mục và Tab Quản lý lịch sử đơn thuốc.
  2. Lớp Xử lý Nghiệp vụ (Business Logic Layer): Viết bằng C++ kết hợp JavaScript, đảm nhiệm kiểm tra tính hợp lệ của mật khẩu, điều khiển luồng camera thiết bị, đánh giá chất lượng ảnh chụp trước khi gửi, gọi các RESTful API đến máy chủ và tính toán bán kính tìm kiếm điểm bán thuốc trong phạm vi 10 km.
  3. Lớp Dữ liệu (Data Layer): Kết hợp Firebase Realtime Database (quản lý người dùng), MongoDB (lưu trữ phiên bóc tách đơn thuốc) và kho dữ liệu thuốc thu thập qua BeautifulSoup.

Hệ thống thiết lập 6 API RESTful phục vụ giao tiếp giữa ứng dụng Qt và máy chủ xử lý:

Tên API Phương thức Chức năng nghiệp vụ Dữ liệu đầu vào (Request) Dữ liệu đầu ra (Response)
Upload-image POST Gửi ảnh chụp toa thuốc lên máy chủ để xử lý AI/OCR Multipart: Tệp ảnh (File), Tên người dùng (String) JSON chứa mảng tên thuốc trích xuất {"presName": [...]} hoặc status: fail
Save-result POST Lưu trữ ảnh và kết quả phân tích đơn thuốc vào MongoDB Multipart: Tệp ảnh (File), Tên người dùng (String), Kết quả phân tích (String), Ghi chú (String) Trạng thái xử lý status: success hoặc status: fail
Get-total GET Lấy danh sách lịch sử các đơn thuốc đã lưu của người dùng Query parameter: {ad_name} (Tên người dùng) Mảng JSON: [{"specific": "...", "time": "...", "day": "..."}]
Get-result GET Lấy dữ liệu chi tiết và hình ảnh của một đơn thuốc cụ thể Query parameters: {ad_name} (Tên người dùng), {specific} (Ghi chú đơn thuốc) JSON chứa ảnh và dữ liệu thuốc: {"image": "...", "presData": "..."}
Update-result PUT Cập nhật, chỉnh sửa tên thuốc hoặc liều dùng của đơn thuốc Body: Tên người dùng (String), Ghi chú đơn thuốc (String), JSON dữ liệu cập nhật mới Trạng thái xử lý status: success hoặc status: fail
Delete-result DELETE Xóa một đơn thuốc đã tồn tại trong cơ sở dữ liệu MongoDB Query parameters: {ad_name} (Tên người dùng), {specific} (Ghi chú đơn thuốc) Trạng thái xử lý status: success hoặc status: fail

Quy trình vận hành phân hệ xử lý ảnh và bản đồ diễn ra tuần tự: Sau khi người dùng chụp ảnh toa thuốc qua giao diện camera QML, hệ thống C++ kích hoạt thuật toán kiểm tra chất lượng hình ảnh. Nếu ảnh mờ hoặc không đạt yêu cầu, ứng dụng hiển thị cảnh báo và nút "Chụp lại". Nếu đạt chuẩn, ảnh được gửi qua API Upload-image. Máy chủ bóc tách tên thuốc, liều lượng và trả về cho ứng dụng hiển thị lên bảng "Thông tin toa thuốc". Khi người dùng nhấp vào tên thuốc bất kỳ, hệ thống gọi widget PlaceSearchModel quét tọa độ các nhà thuốc có bán mặt hàng này trong bán kính 10 km dựa trên vị trí lấy từ PositionSource. Tuyến đường ngắn nhất theo đường xe chạy sẽ được tính toán qua Route Type và vẽ trực quan lên MapView của OpenStreetMap.

Nội dung chính theo từng chương

Chương 1. GIỚI THIỆU VÀ MÔ TẢ ĐỀ TÀI

Chương 1 thiết lập cơ sở khoa học và thực tiễn của đề tài. Tác giả phân tích những khó khăn của người bệnh khi tiếp cận các loại thuốc đặc trị và thuốc theo toa, đồng thời chỉ ra điểm nghẽn của các phần mềm y tế hiện hữu khi bắt buộc người dùng nhập văn bản thủ công. Nội dung chương trình bày tình hình nghiên cứu trong nước và quốc tế về nhận diện ảnh toa thuốc, nhấn mạnh sự thiếu hụt của các giải pháp tích hợp khép kín từ nhận dạng quang học đến đối chiếu kho dữ liệu điểm bán. Từ đó, chương xác định mục tiêu tổng quát, 3 mục tiêu cụ thể và giới hạn phạm vi nghiên cứu ở quy mô học thuật phi thương mại, tận dụng các nguồn dữ liệu mở phục vụ việc tham khảo.

Chương 2. Tổng quan về công nghệ

Chương 2 trình bày chi tiết về khung lý thuyết và các công nghệ nền tảng được lựa chọn:

  • Khung ứng dụng Qt và Qt Creator: Phân tích cấu trúc module của Qt, cơ chế hoạt động của QML và lý do sử dụng Qt Creator (nhẹ, tối ưu tài nguyên phần cứng, hỗ trợ đa ngôn ngữ C++, QML, JavaScript, Python và tích hợp thư viện OpenCV).
  • Công cụ thu thập dữ liệu BeautifulSoup: Trình bày cú pháp và khả năng bóc tách cây DOM HTML/XML của thư viện BS4 trên môi trường Python nhằm phục vụ cào dữ liệu nhà thuốc.
  • Hệ cơ sở dữ liệu Firebase Realtime Database: Trình bày nguyên lý đồng bộ thời gian thực, khả năng hoạt động ngoại tuyến và phương thức lưu trữ dạng cây JSON NoSQL của Firebase.
  • Nền tảng bản đồ OpenStreetMap (OSM): Giới thiệu giấy phép OSPL và cách thức liên kết OSM với các module Qt Location, Qt Positioning và Qt Network.

Chương 3. PHƯƠNG PHÁP THỰC HIỆN

Chương 3 là trọng tâm thiết kế kỹ thuật của khóa luận, mô tả chi tiết kiến trúc 3 lớp và luồng thực thi của từng phân hệ:

  • Giao diện Đăng nhập và Đăng ký: Phân tích lưu đồ giải thuật xác thực người dùng. Dữ liệu mật khẩu được băm qua thuật toán SHA trước khi gửi lên Firebase Realtime Database.
  • Tab Chụp ảnh và phân tích đơn thuốc: Mô tả luồng xử lý giao diện QML tương tác với camera C++, thuật toán kiểm tra chất lượng ảnh chụp, cơ chế hiển thị biểu tượng tiến trình trong khi chờ máy chủ OCR phản hồi và cửa sổ "Thông tin toa thuốc" cho phép người dùng tùy chỉnh liều dùng hoặc thêm thuốc thủ công.
  • Tab Tìm kiếm: Trình bày cơ chế truy vấn cơ sở dữ liệu theo từ khóa tên thuốc. Giao diện hiển thị kết quả theo dạng lưới tối đa 6 sản phẩm trên một trang, hỗ trợ phân trang ("Trang trước", "Trang sau") và lưu trữ lịch sử tìm kiếm kèm mốc thời gian.
  • Tab Đơn thuốc: Hướng dẫn quy trình truy xuất lịch sử đơn thuốc đã lưu qua API Get-total, hiển thị chi tiết qua API Get-result, cho phép sửa đổi dữ liệu qua API Update-result và xóa đơn thuốc qua API Delete-result.
  • Tích hợp OpenStreetMap: Chi tiết hóa sơ đồ khối kết hợp giữa PositionSource (lấy tọa độ GPS thiết bị), PlaceSearchModel (truy vấn danh sách nhà thuốc phân phối thuốc trong bán kính 10 km) và RouteModel (vẽ đường đi ngắn nhất tô đậm trên bản đồ).
  • Đặc tả API Server: Định nghĩa chi tiết thuộc tính, tham số đầu vào, cấu trúc phản hồi JSON và ràng buộc kiểu dữ liệu của 6 API trung gian.

Chương 4. THỰC NGHIỆM VÀ ĐÁNH GIÁ

Chương 4 công bố các kết quả thực nghiệm hệ thống trên môi trường thực tế:

  • Xây dựng cơ sở dữ liệu thuốc: Thu thập thành công dữ liệu từ hai hệ thống nhà thuốc lớn là Nhà thuốc Long Châu và Nhà thuốc Minh Châu thông qua kỹ thuật Web Scraping định kỳ 1 tuần/lần.
  • Đặc điểm dữ liệu: Tổng hợp được 16.602 sản phẩm (cập nhật lần cuối ngày 23/07/2024), lưu trữ dưới định dạng tệp CSV với 5 trường thông tin: Danh mục, Tên thuốc, Giá tiền, Tên nhà thuốc và Đường dẫn URL hình ảnh.
  • Xử lý trường hợp ngoại lệ: Khóa luận ghi nhận và xử lý trường hợp một số loại thuốc đặc biệt/thuốc kê đơn không niêm yết giá công khai trên website mà yêu cầu người mua "Liên hệ" trực tiếp với dược sĩ.
  • Cấu trúc dữ liệu người dùng trên Firebase: Biểu diễn cấu trúc cây JSON lưu trữ tài khoản người dùng với khóa chính là Tên tài khoản, chứa thuộc tính Email và chuỗi băm Mật khẩu. Đánh giá hạn chế về tính riêng tư khi quản trị viên cơ sở dữ liệu có thể xem toàn bộ hồ sơ người dùng.
  • Nghiệm thu bóc tách ảnh: Thử nghiệm ứng dụng trên các mẫu đơn thuốc in giấy thực tế, kiểm tra khả năng truyền nhận dữ liệu qua API và hiển thị kết quả nhận diện lên giao diện người dùng.

Chương 5. KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN

Chương 5 tổng kết toàn bộ kết quả nghiên cứu so với mục tiêu ban đầu, xác nhận hệ thống đã vận hành ổn định các chức năng cốt lõi. Đồng thời, tác giả thẳng thắn chỉ ra các giới hạn về độ chính xác của dữ liệu cào web, thách thức đối với đơn thuốc viết tay và đề xuất lộ trình nâng cấp hệ thống trong tương lai.

Kết quả và đóng góp

Khóa luận đạt được các kết quả thực nghiệm và thông số kỹ thuật cụ thể:

  • Quy mô cơ sở dữ liệu: Xây dựng thành công cơ sở dữ liệu gồm 16.602 sản phẩm y tế và dược phẩm được cào tự động định kỳ 1 tuần/lần từ hai hệ thống Nhà thuốc Long Châu và Nhà thuốc Minh Châu (ghi nhận tại mốc thời gian 23/07/2024). Dữ liệu được cấu trúc hóa thành tệp CSV phục vụ tra cứu phân loại.
Trường dữ liệu Ví dụ thực tế từ văn bản Mục đích sử dụng trên ứng dụng
Danh mục Thiết bị y tế / Chăm sóc cá nhân / Dược mỹ phẩm Phân loại và tối ưu bộ lọc tìm kiếm
Tên thuốc Que Đè Lưỡi Gỗ Balac / Sữa rửa mặt / Hapacol Khóa tìm kiếm chính, hiển thị cho người dùng
Giá 45.000 đ / 128.000 đ / "Liên hệ" So sánh giá bán giữa các nhà thuốc
Tên nhà thuốc Minh Châu / Long Châu Định vị đơn vị phân phối sản phẩm
Hình ảnh Đường dẫn URL hình ảnh sản phẩm Hiển thị trực quan trên giao diện lưới
  • Kết quả triển khai phần mềm:

    • Xây dựng hoàn chỉnh ứng dụng client trên nền tảng Qt/QML kết hợp C++, hỗ trợ phân trang hiển thị 6 sản phẩm/trang.
    • Tích hợp 6 API RESTful kết nối thông suốt giữa client và server trung gian.
    • Tích hợp thành công bản đồ OpenStreetMap với chức năng định vị GPS thiết bị qua PositionSource, tìm kiếm các điểm bán thuốc có hàng trong bán kính 10 km qua PlaceSearchModel và tự động vẽ tuyến đường xe chạy ngắn nhất qua RouteModel.
    • Thiết lập cơ chế kiểm tra chất lượng hình ảnh trước khi gửi nhận dạng và bảo mật mật khẩu tài khoản người dùng bằng thuật toán băm SHA trên Firebase Realtime Database.
  • Đóng góp so với nghiên cứu trước: Khóa luận đã xây dựng một giải pháp kỹ thuật tích hợp hoàn chỉnh khép kín: từ bước thu nhận ảnh đơn thuốc, kiểm tra chất lượng quang học, bóc tách dữ liệu tự động bằng OCR, đến tra cứu giá cả và chỉ đường trực tiếp tới nhà thuốc có sẵn sản phẩm trong phạm vi lân cận. Nghiên cứu chứng minh tính khả thi của việc ứng dụng các công nghệ mã nguồn mở (Qt, OpenStreetMap, Python BeautifulSoup) để tạo ra công cụ hỗ trợ y tế cộng đồng mà không phụ thuộc vào các dịch vụ bản đồ thương mại đắt đỏ.

Hạn chế và hướng nghiên cứu tiếp

Khóa luận chỉ rõ các hạn chế kỹ thuật dựa trên phạm vi và kết quả thực nghiệm:

  • Hạn chế về nguồn dữ liệu: Dữ liệu sản phẩm thu thập bằng kỹ thuật Web Scraping từ các website nhà thuốc có thể không hoàn toàn chính xác hoặc bị gián đoạn khi cấu trúc website nguồn thay đổi. Một số loại thuốc đặc thù yêu cầu đơn bác sĩ không hiển thị giá niêm yết mà chỉ để trạng thái "Liên hệ", gây khó khăn cho việc tự động so sánh giá.
  • Hạn chế về nhận diện hình ảnh: Hệ thống mới chỉ nghiệm thu hiệu quả trên các đơn thuốc in giấy có định dạng chuẩn. Khả năng nhận diện tự động đối với các đơn thuốc viết tay không thẳng hàng hoặc ảnh chụp trong điều kiện ánh sáng yếu, mờ nhòe vẫn là bài toán chưa được giải quyết triệt để.
  • Hạn chế về bảo mật và vận hành: Cơ sở dữ liệu Firebase Realtime Database có điểm yếu về quyền riêng tư khi người quản trị có thể nhìn thấy toàn bộ thông tin tài khoản người dùng (mặc dù mật khẩu đã được băm SHA). Ngoài ra, hệ thống chưa được kiểm thử tải với số lượng người dùng lớn đồng thời.
  • Hạn chế về tính năng y khoa: Đề tài chưa tích hợp trọn vẹn module phân tích chuyên sâu về tương tác thuốc tự động để cảnh báo tác dụng phụ cho bệnh nhân.

Hướng nghiên cứu tiếp được tác giả đề xuất:

  1. Mở rộng nguồn dữ liệu bằng cách thu thập từ nhiều hệ thống nhà thuốc khác nhau, hướng tới việc sử dụng API chính thức có cấp quyền từ các đơn vị dược phẩm thay vì cào web tự do.
  2. Tăng cường tần suất cập nhật dữ liệu để phản ánh chính xác biến động giá cả và tình trạng tồn kho theo thời gian thực.
  3. Cải tiến mô hình OCR và học sâu (Deep Learning) để nâng cao độ chính xác khi nhận diện đơn thuốc viết tay của bác sĩ.
  4. Phát triển bổ sung các tiện ích y tế: theo dõi hồ sơ sức khỏe cá nhân, nhắc nhở lịch uống thuốc và tái khám định kỳ, tích hợp hệ thống hỗ trợ tư vấn trực tuyến giữa người bệnh và đội ngũ y tế.

Giá trị tham khảo

Báo cáo khóa luận mang lại giá trị tham khảo thiết thực cho các nhóm đối tượng học thuật và ứng dụng:

  • Đối tượng tham khảo: Sinh viên, học viên và kỹ sư thuộc các ngành Kỹ thuật Máy tính, Công nghệ Thông tin, Kỹ thuật Phần mềm đang thực hiện đồ án tốt nghiệp hoặc các dự án nghiên cứu về ứng dụng y tế thông minh (e-Health).
  • Phần nội dung có giá trị tham khảo cao:
    • Kỹ thuật lập trình Qt/QML kết hợp C++: Cung cấp mã nguồn cấu hình dự án (.pro), phương pháp tích hợp thư viện OpenCV và cách thức phân tách tầng giao diện QML với tầng xử lý logic C++.
    • Tích hợp bản đồ OpenStreetMap miễn phí: Cung cấp phương pháp chi tiết về cách cấu hình MapView, sử dụng PositionSource để đọc tọa độ GPS và khai thác PlaceSearchModel, RouteModel để tìm kiếm địa điểm và vẽ đường đi trong phạm vi bán kính cố định (10 km) mà không phải trả phí bản quyền Google Maps API.
    • Quy trình thiết kế hệ thống RESTful API: Bảng đặc tả 6 API trung gian kết nối giữa ứng dụng Qt với cơ sở dữ liệu MongoDB và máy chủ xử lý trí tuệ nhân tạo là tài liệu tham khảo mẫu mực cho các đồ án phát triển ứng dụng di động/desktop kết nối hệ thống AI.
    • Quy trình thu thập dữ liệu web bằng BeautifulSoup: Cung cấp phương pháp bóc tách dữ liệu thương mại điện tử ngành dược và cấu trúc hóa thành tập dữ liệu phục vụ nghiên cứu.

Câu hỏi thường gặp

1. Cơ sở dữ liệu danh mục thuốc trong khóa luận được xây dựng từ những nguồn nào và có quy mô bao nhiêu?
Cơ sở dữ liệu được thu thập tự động thông qua kỹ thuật Web Scraping sử dụng thư viện BeautifulSoup (Python) từ website của hai hệ thống: Nhà thuốc Long Châu và Nhà thuốc Minh Châu. Dữ liệu được cào định kỳ 1 tuần/lần, đạt quy mô 16.602 sản phẩm (cập nhật lần cuối ngày 23/07/2024), lưu trữ dưới dạng tệp CSV với 5 trường: Danh mục, Tên thuốc, Giá tiền, Tên nhà thuốc và Link URL hình ảnh.

2. Ứng dụng tích hợp dịch vụ bản đồ nào và phạm vi quét nhà thuốc xung quanh người dùng là bao nhiêu?
Ứng dụng sử dụng nền tảng bản đồ mã nguồn mở OpenStreetMap (OSM) thông qua module Qt Location và Qt Positioning. Hệ thống sử dụng widget MapView, hàm PositionSource để định vị tọa độ GPS người dùng và PlaceSearchModel để tìm kiếm danh sách các nhà thuốc có bán loại thuốc tương ứng trong bán kính giới hạn là 10 km, sau đó dùng Route Type để vẽ tuyến đường xe chạy ngắn nhất.

3. Kiến trúc phần mềm của hệ thống được tổ chức như thế nào?
Phần mềm được thiết kế theo mô hình kiến trúc 3 lớp: Lớp Giao diện (Presentation Layer) xây dựng bằng ngôn ngữ khai báo QML; Lớp Xử lý Nghiệp vụ (Business Logic Layer) lập trình bằng C++ và JavaScript điều phối tương tác camera, gọi API và kiểm tra chất lượng ảnh; Lớp Dữ liệu (Data Layer) kết hợp Firebase Realtime Database (quản lý tài khoản), MongoDB (lưu trữ phiên bóc tách đơn thuốc) và tệp dữ liệu CSV danh mục thuốc.

4. Khóa luận triển khai bao nhiêu API trung gian và chức năng chính của chúng là gì?
Hệ thống thiết kế và sử dụng 6 API RESTful: Upload-image (POST - gửi ảnh toa thuốc lên máy chủ để xử lý OCR), Save-result (POST - lưu ảnh và thông tin bóc tách vào MongoDB), Get-total (GET - lấy danh sách lịch sử đơn thuốc đã lưu của người dùng), Get-result (GET - lấy chi tiết hình ảnh và thông tin của một đơn thuốc cụ thể), Update-result (PUT - cập nhật, chỉnh sửa tên thuốc/liều dùng) và Delete-result (DELETE - xóa đơn thuốc khỏi cơ sở dữ liệu).

5. Cơ chế xác thực và bảo mật tài khoản người dùng được cài đặt ra sao?
Thông tin tài khoản (Email, Tên tài khoản, Mật khẩu) được lưu trữ trên Firebase Realtime Database theo cấu trúc cây JSON NoSQL với khóa chính là Tên tài khoản. Mật khẩu của người dùng bắt buộc phải đi qua thuật toán băm SHA để chuyển thành chuỗi băm trước khi lưu trữ vào cơ sở dữ liệu, đảm bảo mật khẩu gốc không bị lộ dưới dạng văn bản thuần.

Kết luận

Khóa luận tốt nghiệp của tác giả Nguyễn Mạnh Quyền và Lê Ngọc Quang đã hoàn thành mục tiêu thiết kế giải pháp hỗ trợ tra cứu điểm bán thuốc dựa trên ảnh chụp toa thuốc, giải quyết bài toán nhập liệu thủ công trong quản lý dược phẩm cá nhân. Bằng cách kết hợp khung ứng dụng Qt/QML, kỹ thuật thu thập dữ liệu BeautifulSoup với kho dữ liệu 16.602 sản phẩm, hệ thống định vị OpenStreetMap và kiến trúc 6 API RESTful, đề tài đã chứng minh tính khả thi của một giải pháp y tế số học thuật tiết kiệm chi phí. Công trình cung cấp tài liệu kỹ thuật có giá trị tham khảo cao về tích hợp bản đồ mở, xử lý ảnh camera và xây dựng ứng dụng C++ đa nền tảng cho sinh viên và kỹ sư ngành Kỹ thuật Máy tính và Công nghệ Thông tin.