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

Khóa luận tốt nghiệp "Ứng dụng kỹ thuật máy học để trích xuất thông tin toa thuốc từ ảnh chụp" (tên tiếng Anh: "Applying Machine Learning Techniques to Extract Medical Information from Image of Prescription") do sinh viên Nguyễn Quốc Vương (MSSV: 20522172) và Võ Quốc Việt (MSSV: 20522155), ngành Kỹ thuật Máy tính, Trường Đại học Công nghệ Thông tin – Đại học Quốc gia TP. Hồ Chí Minh thực hiện năm 2024 dưới sự hướng dẫn của TS. Đoàn Duy. Đề tài tập trung giải quyết bài toán nhận diện và bóc tách thông tin tên thuốc từ ảnh chụp đơn thuốc giấy và đơn thuốc điện tử.

Bối cảnh thực tiễn được các tác giả đặt ra bắt nguồn từ nhu cầu sử dụng dược phẩm ngày càng tăng trong chăm sóc sức khỏe và điều trị bệnh, đặc biệt sau các làn sóng dịch bệnh phức tạp như đại dịch COVID-19 với các triệu chứng lâm sàng đa dạng (ho, sốt, khó thở, mất vị giác hoặc khứu giác) theo công bố của Trung tâm Kiểm soát và Phòng ngừa Dịch bệnh Hoa Kỳ (CDC). Dù đơn thuốc từ cơ sở y tế ghi rõ danh mục thuốc, phần lớn người dân không có kiến thức chuyên sâu về dược học, dẫn tới việc gặp khó khăn khi nhận biết, phân biệt tên thuốc và cách dùng. Đa số người bệnh phải phụ thuộc hoàn toàn vào giải thích của bác sĩ hoặc dược sĩ, khiến quá trình quản lý, mua sắm và sử dụng thuốc rơi vào thế bị động, tiềm ẩn rủi ro sử dụng thuốc sai chỉ định hoặc không đúng liều lượng.

Qua khảo sát các công trình liên quan, nhóm tác giả chỉ ra các giải pháp tra cứu hiện hành trên thị trường như Nhà thuốc An Khang, Drug Bank, Từ điển thuốc: Tra cứu thuốc, hay Medicine Dict đều bắt buộc người dùng nhập tên thuốc thủ công bằng bàn phím. Thao tác này gây trở ngại lớn khi người dùng không nhớ rõ mặt chữ hoặc viết sai chính tả tên thuốc chuyên môn. Một số nghiên cứu tích hợp trí tuệ nhân tạo như hệ thống chăm sóc sức khỏe thông minh VAIPE (phát triển bởi Trung tâm Sức khỏe thông minh VinUni-Illinois, Đại học VinUni và Đại học Bách khoa Hà Nội – Top 5 AI Award 2022) lại chỉ tập trung nhận diện hình ảnh các viên thuốc thực tế chứ không xử lý trực tiếp đơn thuốc dạng văn bản giấy. Điều này tạo ra rào cản khi người bệnh mới nhận đơn thuốc và chưa mua sản phẩm thực tế. Do đó, việc xây dựng hệ thống tự động bóc tách tên thuốc trực tiếp từ ảnh chụp đơn thuốc là yêu cầu cấp thiết.

Mục tiêu nghiên cứu của khóa luận được phân định cụ thể như sau:

  1. Mục tiêu tổng quát: Xây dựng giải pháp phần mềm tự động nhận diện và trích xuất chính xác thông tin tên thuốc từ ảnh chụp đơn thuốc, giảm thiểu sai sót và sự thiếu nhất quán so với phương thức nhập liệu thủ công, hỗ trợ người dùng quản lý dữ liệu thuốc.
  2. Mục tiêu chi tiết (gồm 3 nhiệm vụ chính):
    • Nhiệm vụ 1 (Tiền xử lý ảnh): Xác định toàn bộ vùng hiển thị đơn thuốc trên ảnh chụp ban đầu và cắt trích xuất riêng vùng chứa đơn thuốc nhằm loại bỏ nền nhiễu, chuẩn hóa chất lượng ảnh cho các bước phân tích tiếp theo.
    • Nhiệm vụ 2 (Nhận diện ký tự và trích xuất thông tin): Phát hiện các vùng chứa chữ (Text Detection) và nhận dạng, phân loại ký tự (Text Recognition) bằng mô hình học sâu kết hợp kỹ thuật OCR, áp dụng trên cả văn bản in ấn và viết tay.
    • Nhiệm vụ 3 (Xây dựng server API chia sẻ kết quả): Thiết kế máy chủ API cung cấp các phương thức trích xuất tên thuốc, lưu trữ, truy xuất, chỉnh sửa và xóa dữ liệu đơn thuốc, tạo điều kiện tích hợp linh hoạt vào các ứng dụng di động hoặc hệ thống y tế mở rộng.

Đối tượng và phạm vi nghiên cứu của đề tài là các loại đơn thuốc thu thập từ các bệnh viện và cơ sở y tế được cấp phép bởi Bộ Y tế Việt Nam, bao gồm cả dạng đơn thuốc chụp tay thực tế và đơn thuốc điện tử in ấn. Hệ thống hướng đến phục vụ đối tượng người bệnh, đồng thời cung cấp giao diện lập trình ứng dụng hỗ trợ các đơn vị cung cấp dịch vụ y tế và quản lý dược phẩm.

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

Khóa luận hệ thống hóa cơ sở lý thuyết về Trí tuệ nhân tạo (AI), Học máy (Machine Learning) với ba nhánh phân loại (có giám sát, không giám sát, bán giám sát) và Học sâu (Deep Learning) dựa trên cấu trúc mạng nơ-ron nhân tạo nhiều lớp. Trong bài toán thị giác máy tính và xử lý ảnh tài liệu, nghiên cứu tập trung vào hai phân nhánh kỹ thuật nền tảng:

Thứ nhất, bài toán phát hiện đối tượng (Object Detection): Tác giả phân tích và so sánh hai trường phái kiến trúc mạng nơ-ron tích chập (CNN):

  • Họ mô hình R-CNN (R-CNN, Fast R-CNN, Faster R-CNN): Hoạt động theo quy trình hai giai đoạn tách biệt (dự đoán vùng hộp giới hạn bounding box thông qua cơ chế đề xuất vùng, sau đó mới phân loại đối tượng). Quy trình này cho độ chính xác cao nhưng cấu trúc phức tạp và tốc độ tính toán chậm.
  • Họ mô hình YOLO (You Only Look Once): Tích hợp việc dự đoán tọa độ hộp giới hạn và phân loại lớp thành một bài toán hồi quy đơn nhất (single-stage regression). Khóa luận khảo sát tiến trình nâng cấp cấu trúc từ YOLOv1 (2015, Joseph Redmon, mạng Darknet-24), YOLOv2 (tích hợp batch normalization, anchor boxes), YOLOv3 (Darknet-53, Spatial Pyramid Pooling - SPP, multi-scale predictions), YOLOv4 (CSPDarknet53, kỹ thuật bag-of-freebies và bag-of-specials), YOLOv5 (Glenn Jocher - Ultralytics, chuyển sang PyTorch, bổ sung lớp Stem), YOLOv6 (EfficientRep, anchor-free cho môi trường công nghiệp), YOLOv7 (E-ELAN - Extended Efficient Layer Aggregation Network, compound model scaling), cho tới YOLOv8 (Ultralytics, 2023). Phiên bản YOLOv8 thay thế CSPLayer bằng module C2f (cross-stage partial bottleneck with two convolutions), loại bỏ hoàn toàn anchor boxes và áp dụng kiến trúc tách rời đầu ra (decoupled head). Đối với tác vụ phân vùng ảnh đơn thuốc, biến thể YOLOv8-seg bổ sung hai đầu ra phân đoạn (segmentation heads) được lựa chọn nhằm khoanh vùng đường bao chính xác với chi phí phần cứng tối ưu.

Thứ hai, bài toán nhận dạng ký tự quang học (OCR) gồm phát hiện vùng văn bản (Text Detection) và nhận dạng ký tự (Text Recognition). Nghiên cứu đánh giá các giải pháp OCR phổ biến gồm Tesseract, EAST, PaddleOCR, YOLOv5 và YOLOv8.

Tiêu chí so sánh Tesseract EAST PaddleOCR YOLOv5 YOLOv8
Độ chính xác trên toa thuốc Trung bình Cao với văn bản rõ ràng Cao, hỗ trợ đa ngôn ngữ tốt Cao, tốt với các đối tượng trung bình và lớn Rất cao, tốt đối với các đối tượng phức tạp
Hiệu suất trên ảnh có nhiễu Kém Trung bình Tốt Trung bình, giảm độ chính xác trên ảnh có nhiễu Rất tốt
Thời gian xử lý Chậm Nhanh với phần cứng mạnh Trung bình Nhanh, tối ưu hóa cho thiết bị di động Rất nhanh, tối ưu cho thiết bị di động
Độ phức tạp khi triển khai Thấp, dễ triển khai Trung bình Cao, yêu cầu tích hợp cấu hình nhiều Trung bình, dễ tích hợp Thấp, dễ tích hợp
Khả năng mở rộng và cập nhật Hạn chế Trung bình Cao, liên tục được cải thiện Cao, cộng đồng hỗ trợ lớn, liên tục cải tiến Rất cao và cộng đồng hỗ trợ lớn
Khả năng phát hiện đối tượng nhỏ Hạn chế Cao với đối tượng lớn Cao, nhưng cần tùy chỉnh với đối tượng nhỏ Cao, hiệu quả với đối tượng trung bình và lớn, kém hơn với đối tượng nhỏ và phức tạp Rất cao, hiệu quả với các đối tượng nhỏ và phức tạp

Từ bảng đánh giá kỹ thuật, nhóm tác giả chọn YOLOv8 cho cả hai khâu phát hiện vùng văn bản và nhận dạng ký tự nhờ khả năng trích xuất đặc trưng đa quy mô, xử lý tốt ký tự có kích thước nhỏ và hỗ trợ triển khai linh hoạt.

Về hệ quản trị cơ sở dữ liệu và máy chủ web: Khóa luận sử dụng MongoDB – hệ quản trị cơ sở dữ liệu NoSQL phi quan hệ định dạng tài liệu (Document-oriented / Collections). MongoDB được chọn vì khả năng lưu trữ linh hoạt dữ liệu phi cấu trúc (kết hợp chuỗi ký tự tên thuốc và ảnh chụp), hỗ trợ truy xuất theo thời gian thực và phân quyền địa chỉ IP kết nối từ xa qua TCP/IP. Phía máy chủ API sử dụng FastAPI – framework viết trên nền tảng Python, vận hành dựa trên Starlette và Pydantic, hỗ trợ xử lý bất đồng bộ (asynchronous I/O), cung cấp hiệu năng cao và tự động phát sinh tài liệu giao diện kiểm thử Swagger UI / OpenAPI.

Phương pháp nghiên cứu thực nghiệm và nguồn dữ liệu:

  • Nhóm nghiên cứu tiến hành thu thập, chuẩn hóa và gán nhãn dữ liệu có giám sát bằng công cụ Roboflow.
  • Quá trình huấn luyện các mô hình học sâu được thực thi trên môi trường Google Colab tận dụng tài nguyên GPU/TPU miễn phí.
  • Nguồn dữ liệu gồm: (1) Tập dữ liệu hơn 1.400 ảnh hóa đơn bán lẻ từ kho dữ liệu mở Roboflow dùng huấn luyện mô hình cắt đơn thuốc; (2) Tập dữ liệu 2.481 ảnh toa thuốc thực tế do nhóm tự thu thập từ bệnh viện và nhà thuốc (gồm 1.353 ảnh chụp tay và 1.128 đơn điện tử); (3) Cơ sở dữ liệu danh mục tên thuốc với hơn 28.000 tên thuốc thu thập từ hệ thống Drugbank, chia làm hai tập dữ liệu tên thuốc có dấu và không dấu nhằm phục vụ đối soát, phân loại tên thuốc khỏi văn bản thông thường.

Thiết kế và triển khai

Hệ thống được thiết kế theo kiến trúc Client - Server hoàn chỉnh:

  • Phía Client: Thiết bị đầu cuối của người dùng (ứng dụng di động, camera) thực hiện chụp ảnh đơn thuốc và gửi yêu cầu thông qua giao thức HTTP request đến máy chủ. Giao diện người dùng tiếp nhận kết quả phản hồi HTTP response để hiển thị danh sách tên thuốc, đồng thời cung cấp các chức năng CRUD (Create, Read, Update, Delete) cho phép thêm mới, tra cứu, chỉnh sửa hoặc xóa lịch sử đơn thuốc.
  • Phía Server: Vận hành bởi FastAPI trên nền tảng Python, thực hiện định tuyến và xử lý các luồng nghiệp vụ:
    1. Luồng xử lý trích xuất: Tiếp nhận file ảnh từ request, chuyển dữ liệu đến module thị giác máy tính. Ảnh trước tiên đi qua mô hình phân đoạn YOLOv8-seg (phiên bản nano - yolov8n-seg) để xác định tọa độ và cắt riêng vùng chứa đơn thuốc. Ảnh sau cắt được đưa vào mô hình phát hiện vùng chữ Text Detection (YOLOv8m) để xác định vị trí từng từ theo bounding box. Tiếp đó, mô hình nhận dạng ký tự Text Recognition (YOLOv8) bóc tách chuỗi ký tự từ các vùng chữ.
    2. Luồng xử lý hậu kỳ và đối soát: Toàn bộ chuỗi văn bản nhận dạng được đưa qua thuật toán sắp xếp tọa độ không gian (trục tọa độ YOLO) để khôi phục đúng thứ tự dòng, sau đó so khớp chuỗi với cơ sở dữ liệu hơn 28.000 tên thuốc trích xuất từ Drugbank (hỗ trợ cả dạng có dấu và không dấu). Các từ trùng khớp được xác định là tên thuốc chỉ định, loại bỏ các từ ngữ hành chính hoặc thông tin phụ trên đơn.
    3. Luồng quản trị dữ liệu: FastAPI giao tiếp trực tiếp với MongoDB qua giao thức mạng TCP/IP để tự động lưu trữ bản ghi đơn thuốc kèm danh mục thuốc vừa trích xuất, hoặc thực hiện các truy vấn đọc, sửa, xóa bản ghi khi client gửi yêu cầu quản lý mà không cần chạy lại pipeline học máy.

Về hạ tầng triển khai phần cứng: Bên cạnh quá trình huấn luyện mô hình trên Google Colab, nhóm tác giả đã thiết lập môi trường máy chủ thực tế bằng giải pháp thuê máy chủ GPU chuyên dụng trên nền tảng thuegpu.vn. Cấu hình máy chủ triển khai gồm: GPU NVIDIA P40, bộ nhớ RAM 48GB, vi xử lý 24 nhân (CPU E5 v3/v4), dung lượng lưu trữ 300GB với chi phí vận hành 8.000 VNĐ/giờ. Môi trường phần cứng này đảm bảo khả năng phục vụ đồng thời các tiến trình suy luận mô hình học sâu và xử lý I/O của FastAPI theo thời gian thực.

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

Chương 1. TỔNG QUAN ĐỀ TÀI

Chương 1 trình bày lý do lựa chọn đề tài dựa trên phân tích thực trạng người dân thiếu kiến thức chuyên sâu về dược phẩm sau dịch COVID-19, dẫn tới nguy cơ dùng thuốc sai cách khi đọc đơn thuốc giấy. Tác giả khảo sát các giải pháp hiện nay gồm các ứng dụng từ điển tra cứu thuốc thủ công (Nhà thuốc An Khang, Drug Bank, Medicine Dict) và giải pháp ứng dụng AI như VAIPE (chỉ hỗ trợ nhận diện viên thuốc, không hỗ trợ đơn thuốc giấy). Từ đó, chương xác định mục tiêu tổng quát là xây dựng phần mềm tự động trích xuất tên thuốc từ ảnh chụp; đặt ra 3 mục tiêu cụ thể gồm: tiền xử lý ảnh cắt vùng đơn thuốc, nhận diện ký tự OCR bằng học sâu, và xây dựng server API chia sẻ kết quả. Phạm vi nghiên cứu giới hạn trên các đơn thuốc y tế thu thập từ cơ sở y tế được cấp phép bởi Bộ Y tế. Phương pháp tiếp cận bài toán kết hợp kiến trúc máy chủ FastAPI, mô hình thị giác YOLOv8 và cơ sở dữ liệu MongoDB.

Chương 2. CƠ SỞ LÝ THUYẾT

Chương 2 cung cấp hệ thống lý thuyết về trí tuệ nhân tạo, phân biệt học máy (có giám sát, không giám sát, bán giám sát) và học sâu. Trong bài toán phát hiện vùng chứa đơn thuốc, chương phân tích cấu trúc 2 giai đoạn của họ R-CNN (R-CNN, Fast R-CNN, Faster R-CNN) đối lập với cơ chế 1 giai đoạn dựa trên hồi quy của họ YOLO. Tác giả tổng thuật 8 thế hệ YOLO từ phiên bản v1 đến v8 và lý giải việc chọn mô hình phân vùng YOLOv8-seg loại n (nano) do tính gọn nhẹ, tiết kiệm tài nguyên tính toán nhưng vẫn đạt độ bao phủ vùng tài liệu chính xác. Trong bài toán xác định chữ và trích xuất thông tin, chương phân tích các giải pháp OCR (Tesseract, EAST, PaddleOCR, YOLOv5, YOLOv8) và chỉ ra ưu thế của YOLOv8 trong nhận diện văn bản kích thước nhỏ trên nền ảnh phức tạp. Cuối cùng, chương thuyết minh lý do chọn hệ quản trị cơ sở dữ liệu NoSQL MongoDB (lưu trữ linh hoạt ảnh và chuỗi dữ liệu phi cấu trúc, bảo mật theo IP) và framework FastAPI (hiệu năng cao với Starlette và Pydantic, xử lý bất đồng bộ, tự sinh tài liệu API).

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

Chương 3 chi tiết hóa quy trình kỹ thuật xây dựng hệ thống:

  • Kiến trúc hệ thống: Mô hình Client - Server kết nối qua HTTP request/response; thuê hạ tầng máy chủ GPU NVIDIA P40 (48GB RAM, 24 nhân, 300GB ổ cứng tại thuegpu.vn).
  • Bài toán xác định vùng chứa đơn thuốc: Sử dụng bộ dữ liệu hơn 1.400 ảnh hóa đơn trên Roboflow (chia đều 25% cho 4 hình thái: nằm thẳng, nằm nghiêng, cầm tay thẳng, cầm tay nghiêng). Gán nhãn đường bao bằng công cụ segmentation trên Roboflow và huấn luyện mô hình yolov8n-seg.pt trên Google Colab với cấu hình epochs=100, imgsz=640, tham số dừng sớm patience=10.
  • Bài toán xác định chữ và trích xuất thông tin:
    • Xây dựng bộ dữ liệu Text Detection gồm 2.481 ảnh toa thuốc (1.353 ảnh chụp tay, 1.128 ảnh đơn điện tử), thực hiện gán nhãn 225.524 bounding box chứa từ khóa "text". Bộ dữ liệu chia tỷ lệ 7:3 thành tập huấn luyện (157.867 nhãn) và tập đánh giá (67.657 nhãn), kèm tập kiểm thử độc lập 100 ảnh (50 ảnh chụp tay, 50 ảnh điện tử). Huấn luyện mô hình YOLOv8m trên Google Colab với tham số epochs=500, batch=64, imgsz=640.
    • Xây dựng dữ liệu Text Recognition: Thu thập và cắt các khối ký tự, tăng cường dữ liệu bằng thư viện Google Fonts, gán nhãn theo từng lớp ký tự để huấn luyện mô hình phân loại ký tự bằng YOLOv8.
    • Kỹ thuật kết hợp và xử lý hậu kỳ: Thuật toán sắp xếp vùng chứa chữ theo trục tọa độ không gian để xử lý trường hợp chữ nghiêng/xéo, ghép các ký tự thành từ hoàn chỉnh và so sánh từng vùng chữ với từ điển thuốc.
  • Xây dựng cơ sở dữ liệu và server: Thiết kế cấu trúc cơ sở dữ liệu MongoDB lưu trữ thông tin đơn thuốc; thu thập và làm sạch danh mục hơn 28.000 tên thuốc từ Drugbank (lưu thành hai bảng tên thuốc có dấu và không dấu); lập trình các endpoint API trên FastAPI (trích xuất, thêm, sửa, xóa, xem dữ liệu).

Chương 4. KẾT QUẢ THỰC NGHIỆM

Chương 4 trình bày các kết quả đánh giá thực nghiệm:

  • Kết quả phát hiện vùng chứa đơn thuốc: Phân tích các biểu đồ huấn luyện qua từng epoch trên Google Colab; đánh giá mô hình YOLOv8-seg trên tập 100 ảnh thực tế qua các chỉ số độ chính xác mAP50 và mAP50-95 tương ứng với các kích cỡ tập dữ liệu huấn luyện khác nhau (từ 300 đến hơn 1.400 ảnh); hoàn thiện lưu đồ thuật toán nhận diện và trích xuất vùng đơn thuốc đầu vào - đầu ra.
  • Kết quả xác định chữ và trích xuất thông tin: Trình bày bảng thông số hội tụ của mô hình Text Detection (YOLOv8m) và Text Recognition qua các epoch; phân tích kết quả nhận diện trên từng lớp ký tự; đánh giá trường hợp nhận diện thực tế trên ảnh thật ở các tình huống tối ưu nhất và kém nhất, đặc biệt kiểm thử khả năng đọc đơn thuốc tiếng Việt có dấu.
  • Kết quả hệ quản trị cơ sở dữ liệu và server API: Kiểm tra khả năng lưu trữ, cấu trúc document trên giao diện MongoDB Compass; kiểm thử vận hành cơ sở dữ liệu tên thuốc có dấu và không dấu; đo đạc thời gian đáp ứng của server khi xử lý yêu cầu trích xuất qua bảng thống kê độ trễ; xác thực giao diện kiểm thử Swagger UI của FastAPI.
  • Xây dựng ứng dụng kiểm tra hệ thống: Thiết kế mô hình Use Case và các màn hình giao diện ứng dụng di động demo chức năng chụp ảnh, hiển thị kết quả bóc tách tên thuốc và quản lý lịch sử đơn thuốc.

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 đã đạt được của khóa luận, thẳng thắn chỉ ra các ưu điểm về tốc độ, tính khả thi của pipeline phối hợp các mô hình YOLOv8 và cơ sở dữ liệu tên thuốc chuyên biệt, đồng thời nêu các nhược điểm còn tồn tại và đề xuất các định hướng nghiên cứu tiếp theo nhằm nâng cao chất lượng hệ thống.

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

Khóa luận đã hoàn thành các mục tiêu đề ra với những kết quả thực nghiệm cụ thể được ghi nhận trong văn bản:

  • Xây dựng thành công bộ dữ liệu chuyên ngành: Thu thập và chuẩn hóa bộ dữ liệu gồm 2.481 ảnh đơn thuốc thực tế (1.353 ảnh chụp tay, 1.128 ảnh đơn thuốc điện tử); hoàn thành gán nhãn chi tiết 225.524 bounding box lớp "text". Thiết lập tập kiểm thử chuẩn gồm 100 ảnh đơn thuốc cân bằng giữa hai hình thái chụp tay và in điện tử (tỷ lệ 50:50).
  • Huấn luyện các mô hình học sâu chuyên biệt:
    • Mô hình phân đoạn vùng đơn thuốc YOLOv8n-seg huấn luyện trên hơn 1.400 ảnh hóa đơn với tham số epochs=100, imgsz=640, patience=10, cho phép tự động tách vùng đơn thuốc khỏi hậu cảnh phức tạp.
    • Mô hình phát hiện vùng chữ Text Detection (YOLOv8m) huấn luyện thành công trên 157.867 nhãn train và đánh giá trên 67.657 nhãn valid với tham số epochs=500, batch=64, imgsz=640.
    • Mô hình nhận dạng ký tự Text Recognition dựa trên YOLOv8 kết hợp tăng cường dữ liệu từ Google Fonts, phân loại chính xác các lớp ký tự phục vụ ghép từ.
  • Xây dựng cơ sở dữ liệu đối soát tên thuốc quy mô lớn: Thu thập và cấu trúc hóa hơn 28.000 tên thuốc từ hệ thống Drugbank, phân tách thành hai bộ dữ liệu tên thuốc tiếng Việt có dấu và không dấu, giúp giải quyết triệt để vấn đề lọc bỏ thông tin nhiễu (hướng dẫn sử dụng, tên bệnh viện, chẩn đoán) để giữ lại chính xác tên biệt dược/hoạt chất.
  • Hiện thực hóa hệ thống máy chủ API hoàn chỉnh: Triển khai hệ thống trên FastAPI kết nối cơ sở dữ liệu NoSQL MongoDB, cung cấp đầy đủ các phương thức trích xuất và quản trị dữ liệu (thêm mới, truy xuất, cập nhật, xóa đơn thuốc); kiểm thử thành công trên hạ tầng GPU NVIDIA P40 (48GB RAM) tại thuegpu.vn.

Đóng góp của đề tài so với các nghiên cứu trước được tác giả tự xác định:

  • Khắc phục hoàn toàn sự bất tiện của các ứng dụng tra cứu thuốc truyền thống (Nhà thuốc An Khang, Drug Bank, Medicine Dict) khi không còn bắt buộc người dùng phải gõ tên thuốc thủ công qua bàn phím.
  • Giải quyết bài toán tra cứu trực tiếp từ văn bản đơn thuốc giấy – điểm mà hệ thống chăm sóc sức khỏe thông minh VAIPE (vốn chỉ nhận dạng hình ảnh viên thuốc thực tế) chưa giải quyết được, giúp người bệnh tiếp cận thông tin thuốc ngay khi vừa nhận đơn từ bác sĩ mà chưa cần mua thuốc.

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

Khóa luận chỉ ra một số hạn chế trong quá trình thực nghiệm:

  • Về nguồn dữ liệu: Số lượng ảnh toa thuốc điện tử thu thập được còn hạn chế; một số ảnh đầu vào bị mờ, nhòe hoặc độ phân giải thấp làm ảnh hưởng đến khả năng nhận dạng chính xác ký tự.
  • Về mô hình phân vùng: Khâu tiền xử lý phát hiện vùng đơn thuốc vẫn phải dựa trên tập dữ liệu thay thế là ảnh hóa đơn bán lẻ do tính bảo mật thông tin đơn thuốc tại các cơ sở y tế khiến việc thu thập ảnh đơn thuốc số lượng lớn gặp khó khăn.
  • Về phạm vi trích xuất: Hệ thống mới tập trung bóc tách tên thuốc thông qua cơ chế so khớp từ điển, chưa bóc tách và liên kết ngữ nghĩa toàn diện các trường thông tin đi kèm như liều lượng, số lượng, thời điểm uống (sáng, trưa, chiều, tối) hay lời dặn của bác sĩ.

Các hướng phát triển tiếp theo được nhóm tác giả đề xuất:

  • Tiếp tục mở rộng và nâng cao chất lượng tập dữ liệu đơn thuốc, bổ sung thêm nhiều mẫu toa thuốc viết tay phức tạp và các dạng đơn thuốc điện tử đa dạng từ nhiều cơ sở khám chữa bệnh khác nhau.
  • Nghiên cứu tối ưu hóa kiến trúc mạng để rút ngắn hơn nữa thời gian xử lý và suy luận của các mô hình trên máy chủ.
  • Nâng cấp server API và hoàn thiện ứng dụng di động trực quan, tích hợp sâu vào hệ sinh thái quản lý sức khỏe cá nhân nhằm đưa giải pháp vào ứng dụng thực tiễn rộng rãi.

Giá trị tham khảo

Khóa luận là tài liệu tham khảo có giá trị học thuật và ứng dụng thực tiễn rõ ràng cho:

  • Sinh viên, học viên chuyên ngành Kỹ thuật Máy tính, Khoa học Máy tính, Trí tuệ Nhân tạo và Công nghệ Thông tin đang thực hiện đồ án, khóa luận hoặc nghiên cứu về thị giác máy tính, nhận dạng ký tự quang học (OCR) trên văn bản tiếng Việt.
  • Các nhóm nghiên cứu ứng dụng mô hình học sâu thuộc họ YOLO (đặc biệt là biến thể phân vùng YOLOv8-seg và phát hiện đối tượng YOLOv8m) vào bài toán phân tích bố cục tài liệu (Document Layout Analysis) và bóc tách dữ liệu có cấu trúc từ hình ảnh thực tế.
  • Các kỹ sư phát triển phần mềm muốn tham khảo kiến trúc tích hợp hệ thống trí tuệ nhân tạo hoàn chỉnh: từ khâu tiền xử lý, suy luận mô hình học sâu, đến xây dựng API dịch vụ bằng FastAPI và lưu trữ dữ liệu phi cấu trúc trên MongoDB.
  • Nội dung đáng tham khảo nhất trong khóa luận là phương pháp luận chia tách bài toán OCR tài liệu y tế thành chuỗi xử lý khép kín (cắt vùng đơn thuốc -> phát hiện vùng chữ -> nhận dạng ký tự -> so khớp cơ sở dữ liệu chuyên ngành) và quy trình chuẩn bị dữ liệu gán nhãn thực tế với hơn 225.000 bounding box.

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

1. Khóa luận sử dụng mô hình nào cho bài toán phân vùng cắt đơn thuốc ban đầu và tại sao lại chọn phiên bản đó?
Khóa luận sử dụng mô hình YOLOv8-seg phiên bản nano (yolov8n-seg). Tác giả lựa chọn mô hình này vì bài toán xác định đường bao đơn thuốc không đòi hỏi trích xuất đặc trưng quá phức tạp; biến thể nano có kích thước gọn nhẹ, tốc độ suy luận nhanh, tiết kiệm tài nguyên bộ nhớ và thời gian tính toán nhưng vẫn đảm bảo độ chính xác cao nhờ cấu trúc module C2f và hai đầu ra phân đoạn (segmentation heads).

2. Quy mô và đặc điểm của bộ dữ liệu phục vụ bài toán phát hiện vùng chứa chữ (Text Detection) được xây dựng ra sao?
Bộ dữ liệu gồm 2.481 ảnh toa thuốc thực tế, phân chia thành hai nhóm: 1.353 ảnh đơn thuốc chụp tay và 1.128 ảnh đơn thuốc điện tử. Toàn bộ ảnh được gán nhãn bằng Roboflow với tổng cộng 225.524 bounding box thuộc nhãn "text". Tập dữ liệu được phân chia ngẫu nhiên theo tỷ lệ 7:3 thành tập huấn luyện (157.867 nhãn) và tập đánh giá (67.657 nhãn), cùng một tập kiểm thử độc lập gồm 100 ảnh (50 ảnh chụp tay và 50 ảnh điện tử).

3. Cơ chế nào giúp hệ thống nhận diện chính xác đâu là tên thuốc giữa nhiều thông tin chữ khác trên đơn thuốc?
Mô hình OCR trích xuất toàn bộ các từ xuất hiện trên đơn thuốc. Sau đó, hệ thống thực hiện thuật toán sắp xếp lại các vùng chữ theo tọa độ không gian (trục tọa độ YOLO) và tiến hành so khớp chuỗi ký tự nhận dạng được với cơ sở dữ liệu chuyên ngành gồm hơn 28.000 tên thuốc thu thập từ Drugbank (hỗ trợ cả hai tập dữ liệu tên thuốc tiếng Việt có dấu và không dấu). Các từ trùng khớp với danh mục thuốc mới được trích xuất trả về, qua đó loại bỏ được các nội dung hành chính, chẩn đoán và thông tin phụ.

4. Cấu hình phần cứng và framework nào được lựa chọn để triển khai máy chủ API thực tế?
Máy chủ API được lập trình bằng framework FastAPI (Python), kết nối cơ sở dữ liệu MongoDB. Nhóm tác giả triển khai hệ thống máy chủ bằng cách thuê dịch vụ GPU trên nền tảng thuegpu.vn với gói cấu hình gồm: GPU NVIDIA P40, bộ nhớ RAM 48GB, vi xử lý CPU 24 nhân (E5 v3/v4), dung lượng ổ cứng 300GB với chi phí vận hành 8.000 VNĐ/giờ. Quá trình huấn luyện mô hình trước đó được thực hiện trên Google Colab.

Kết luận

Khóa luận tốt nghiệp của Nguyễn Quốc Vương và Võ Quốc Việt đã giải quyết trọn vẹn bài toán tự động trích xuất tên thuốc từ ảnh chụp đơn thuốc y tế bằng cách kết hợp chuỗi mô hình học sâu YOLOv8-seg, YOLOv8m và hệ thống cơ sở dữ liệu hơn 28.000 tên thuốc từ Drugbank. Hệ thống được đóng gói hoàn chỉnh theo kiến trúc Client - Server với máy chủ FastAPI hiệu năng cao và cơ sở dữ liệu NoSQL MongoDB, đáp ứng tốt cả khả năng nhận dạng lẫn nghiệp vụ quản trị dữ liệu đơn thuốc. Mặc dù vẫn còn một số thách thức đối với ảnh chụp có độ phân giải thấp và dữ liệu viết tay phức tạp, kết quả thực nghiệm của đề tài đã khẳng định tính khả thi cao, mở ra hướng ứng dụng thiết thực trong việc số hóa dữ liệu y tế và hỗ trợ người bệnh quản lý thông tin điều trị chủ động.