Phần lớn các ứng dụng trong y khoa đều dựa trên cơ sở chẩn đoán thông qua hệ thống thu thập hình ảnh.. Với đề tài “Nghiên cứu và thiết kế hệ thống nhúng cho máy nội soi nha khoa” sử dụng
Trang 1ĐẠI HỌC QUỐC GIA TP HCM
TRƯỜNG ĐẠI HỌC BÁCH KHOA
O
BÁO CÁO TỔNG KẾT KẾT QUẢ
ĐỀ TÀI KHCN CẤP TRƯỜNG
Tên đề tài: NGHIÊN CỨU VÀ THIẾT KẾ HỆ THỐNG NHÚNG CHO
MÁY NỘI SOI NHA KHOA
Mã số đề tài: T_ĐĐT_2012_12
Thời gian thực hiện: 02/2012 – 02/2013
Chủ nhiệm đề tài: TS Trương Quang Vinh
Cán bộ tham gia đề tài: TS Trương Quang Vinh
ThS Bùi Quốc Bảo
Thành phố Hồ Chí Minh – Tháng 02/2013
Trang 2Danh sách các cán bộ tham gia thực hiện đề tài
TT Họ và tên Chuyên ngành Cơ quan
Trang 3MỤC LỤC
1 GIỚI THIỆU 5
1.1 Tổng quan 5
1.2 Tình hình nghiên cứu các hệ thống máy nội soi nha khoa của nước ngoài 5
1.3 Nhiệm vụ đề tài 7
2 MÔ TẢ HỆ THỐNG 7
3 THIẾT KẾ PHẦN CỨNG 8
4 THIẾT KẾ PHẦN MỀM 9
4.1 Bootloader 9
4.2 Embedded Linux 14
4.3 Các thư viện hỗ trợ 16
4.4 Thiết kế ứng dụng 17
5 KẾT QUẢ THỰC HIỆN 222
5.1 Xây dựng ứng dụng hoạt động trên hệ điều hành nhúng Linux-2.6.32.2 222
5.2 Giao tiếp cảm biến hình ảnh nha khoa thông qua USB và hiển thị được hình ảnh răng trực tiếp trên màn hình 222
5.3 Giao diện đồ họa sử dụng công cụ Qt trên màn hình cảm ứng chạm 233
5.4 Quản lý hồ sơ bệnh nhân cùng với hình ảnh chụp răng 255
5.5 Hỗ trợ tiếng Việt 255
5.6 Hỗ trợ chỉnh sửa ảnh chụp răng để hình ảnh rõ hơn 266
5.7 Tải dữ liệu lên server 266
5.8 Bảng so sánh với một số hệ thống camera nha khoa khác 277
6 TÀI LIỆU THAM KHẢO 298
7 KẾT LUẬN VÀ KIẾN NGHỊ 30
Trang 4MỤC LỤC HÌNH ẢNH
Hình 1-1: TPC Advance Cam Intraoral Camera System 6
Hình 1-2: Máy nội soi nha khoa Miharu 6
Hình 1-3: Hai chế độ hoạt động của Miharu 7
Hình 3-1: Kit Friendly ARM Mirco2440 8
Hình 3-2: Phần cứng board Mirco2440 8
Hình 4-1: Cấu trúc phần mềm 9
Hình 4-2: Cài đặt arm-linux-gcc 10
Hình 4-3: Tùy chỉnh trong Minicom 11
Hình 4-4: Cấu hình Qt-Embedded 12
Hình 4-5: Các thành phần của giao diện người dùng 177
Hình 4-6: Lưu đồ giải thuật bàn phím ảo tiếng Việt 19
Hình 4-7: Giao diện bàn phím ảo tiếng Việt 199
Hình 4-8: Sơ đồ nguyên lí của việc thu thập và xử lí ảnh từ camera 199
Hình 4-9: Giải thuật xử lí ảnh tooth segmentation 20
Hình 4-10: Tooth segmentation sử dụng Active Contour without Edge 21
Hình 5-1: Giao diện khởi động của board Mirco2440 222
Hình 5-2: Hiển thị ảnh răng trên board 222
Hình 5-3: Giao diện thông tin bệnh nhân 233
Hình 5-4: Giao diện khung chẩn đoán 233
Hình 5-5: Giao diện ngày và giờ khám bệnh 233
Hình 5-6: Giao diện hiển thị ảnh và video 233
Hình 5-7: Giao diện khung list ảnh 244
Hình 5-8: Giao diện công cụ xử lí ảnh 244
Hình 5-9: Giao diện người dùng 244
Hình 5-10: Giao diện người dùng khi chạy trên board 255
Hình 5-11: Lưu trữ dữ liệu vào server 255
Hình 5-12: Bàn phím ảo tiếng Việt 255
Hình 5-13: Chỉnh sáng tối, màu sắc cho ảnh 266
Hình 5-14: Ảnh quan sát trước và sau khi dùng giải thuật tách ảnh răng 266
Hình 5-15: Tải dữ liệu lên server 277
Trang 5Hệ thống nhúng được ứng dụng vào nhiều lĩnh vực khác nhau của cuộc sống, trong đó có lĩnh vực y tế Cácứng dụng ta thường gặp trong y tế như: máy quét tia X quang, máy chụp cắt lớp
vi tính (CT), máy chụp cộng hưởng (MRI), hệ thống hình ảnh nha khoa Phần lớn các ứng dụng trong y khoa đều dựa trên cơ sở chẩn đoán thông qua hệ thống thu thập hình ảnh Các hệ thống thu thập hìnhảnh thường hỗ trợ ba chức năng chính đó là: thu thập hình ảnh từ camera, xử lý hìnhảnh và hiển thị kết quả lên màn hình
Với đề tài “Nghiên cứu và thiết kế hệ thống nhúng cho máy nội soi nha khoa” sử dụng board Friendly ARM Micro2440 dựa trên nền tảng hệ thống nhúng Linux, nền tảng Qt4 cũng như các thư viện về hình ảnh như: OpenCV, V4L, Libcurl sẽ giúp chúng ta giao tiếp với USB Camera
và phát triển ứng dụng của nó trong việc khám bệnh nha khoa thông qua chẩn đoán hình ảnh
1.2 Tình hình nghiên cứu các hệ thống máy nội soi nha khoa của nước ngoài
1.2.1 Hệ thống máy nội soi nha khoa “TPC Advance Cam Intraoral Camera
System”
TPC Advance Cam Intraoral Camera System là hệ thống camera nội soi nha khoa có nhiều tiện ích Với nhiều dòng sản phẩm cũng như nhiều lựa chọn giúp TPC Advance Cam Intraoral Camera System trở nên quen thuộc với nhiều phòng khám nha khoa
Trang 6Hình 1-1: TPC Advance Cam Intraoral Camera System Các sản phẩm của TPC Advance Cam Intraoral Camera System đảm bảo 4 yếu tố: đơn giản, di động, đa năng và rõ ràng Các yếu tố đó thể hiện ở những đặc điểm sau:
- Ống kính có tiêu cự cố định giúp tập trung vào hình ảnh răng
- Thao tác sử dụng và chụp hình đơn giản
- Gọn nhẹ, tiện lợi khi sử dụng và vận chuyển
- Có thể lưu trữ 112 hình ảnh vào bộ nhớ
- Kích thước ảnh thu được là: 640*480
- Sử dụng 6 đèn LED để cung cấp ánh sáng
- Có thể giao tiếp bằng cáp USB hoặc phát qua wireless qua bộ thu phát của hệ thống
1.2.2 Hệ thống máy nội soi nha khoa Miharu
Một hệ thống camera nha khoa khác là Miharu Miharu là một hệ thống camera tiện lợi và
dễ sử dụng Các thông số của hệ thống Miharu như hình dưới
Hình 1-2: Máy nội soi nha khoa Miharu
Trang 7Hệ thống Miharu có 2 chế độ Chế độ xem ảnh răng bình thường và chế độ phát hiện cao răng Chế độ phát hiện cao răng cho phép các nha sĩ và bệnh nhân có thể quan sát và thấy cao răng của mình
Hình 1-3: Hai chế độ hoạt động của Miharu
1.3 Nhiệm vụ đề tài
Xây dựng ứng dụng hoạt động trên hệ điều hành nhúng Linux kernel 2.6
Khả năng giao tiếp cảm biến hình ảnh nha khoa thông qua USB
Hiển thị được hình ảnh răng trực tiếp trên màn hình sử dụng thư viện V4L
Quản lý hồ sơ bệnh nhân cùng với hình ảnh chụp răng
Giao diện độ họa sử dụng công cụ Qt trên màn hình cảm ứng chạm
Phần mềm của hệ thống được xây dựng dựa trên hệ điều hành nhúng Linux Ứng dụng được xây dựng dựa trên nền tảng Qt4 với sự hỗ trợ của các thư viện như: OpenCV, V4L, LibCurl
Hệ thống hỗ trợ nhiều chức năng như: giao diện quản lí bệnh nhân, hỗ trợ nha sĩ chẩn đoán thông qua hình ảnh nha khoa, hệ thống xử lý ảnh nha khoa và lưu trữ dữ liệu
Trang 83 THIẾT KẾ PHẦN CỨNG
Hình 3-1: Kit Friendly ARM Mirco2440 Board Friendly ARM Mini2440 dựa trên nền tảng ARM9, sử dụng chip S3C2440 của Samsung có thể chạy với xung clock tối đa 533Hz Board được sản xuất hướng đến người dùng cho các phát triển ứng dụng nhúng, điều khiển thiết bị công nghiệp, phát triển các thiết bị PDA, GPS receiver
Phần cứng của Board Mini2440 bao gồm các thành phần sau:
Hình 3-2: Phần cứng board Mirco2440
CPU: S3C2440A SAMSUNG, tần số hoạt động 400MHz, tối đa là 533MHz
SDRAM: Hai chíp HY57V561620, mỗi chip 32M, gắn trực tiếp trên board, hoạt động ở tần số 100MHz
Flash Memory: Một chíp Nand Flash K9F1208 256M gắn trực tiếp trên board, một chíp Nor Flash AM29LV160D 2M gắn trực tiếp trên Board
Trang 9 LCD: Hỗ trợ màn hình cảm ứng và màn hình LCD kiểu 41 chân
Các cổng giao tiếp mở rộng: Cổng Ethernet RJ-45 100M được điều khiển bởi chíp network DM9000 Ba cổng kết nối nối tiếp Một cổng USB Host, một cổng USB Slave Cổng cắm SD card Một ngõ ra single stereo audio, một ngõ vào single microfone Cổng kết nối cho giao tiếp JTAG 10 chân 2.0mm Bốn Led đơn chỉ trạng thái hoạt động Sáu nút bấm dành cho người dùng PWM buzzer Một điều chỉnh điện trở dành cho bộ bộ chuyển đổi AD Chíp AT24C08 dành cho việc test BUS I2C Cổng cắm 20 chân dành cho giao tiếp camera Một đồng hồ thời gian thực gắn trên Board chạy bằng PIN lithium Cổng 34 chân 2.0mm dành cho việc kết nối với các GPIO, cổng 40 chân 2.0mm nối với BUS hệ thống Lỗ cắm nguồn 5V cùng với công tắc bật và tắt nguồn Các công tắc chọn chế độ khác
Clock của hệ thống: Được cung cấp bởi dao động của thạch anh 12M [3]
Với các cấu hình phần cứng hiện tại thì Development Board Mini2440 có thể chạy được các hệ điều hành sau:
4.1 Bootloader
Đối với bất kì một hệ điều hành nào, thì Bootloader là một phần không thể thiếu Nó giúp cho phần cứng tải hạt nhân (Kernel) của hệ điều hành lên bộ nhớ RAM
Trang 10Trong đề tài này, Bootloader được sử dụng là Vivi (U-boot), một phần mềm khá thân thiện và được hỗ trợ rộng rãi bởi người dùng mạng Đặc biệt nó có tính tương thích rất tốt đối với
hệ điều hành phát triển trên Linux kernel
Để có được U-boot chạy trên kiến trúc ARM thì ta cần tải source code của nó về và biên dịch bằng trình biên dịch chéo Sau khi hoàn thành ta sẽ có được file “u-boot.bin”, đây chính là file nhị phân thực thi được trên kiến trúc ARM Source code của nó có thể tải về thông qua lệnh sau:
sudo apt-get install git git clone git://repo.or.cz/u-boot-openmoko/mini2440.git
4.1.1 Cài đặt arm-linux-gcc
Khi sử dụng arm để chạy một chương trình trên arm từ Linux thì cần phải xây dựng một trình biên dịch chéo để biên dịch từ linux sử dụng lên arm Arm-linux-gcc là một trình biên dịch chéo thỏa mãn điều đó
Đầu tiên ta download cross toolchain ở địa chỉ:
http://friendlyarm.net/forum/topic/1582 Sau khi download về ta có file arm-linux-gcc-4.4.3.tar.gz
Sau đó ta tiến hành giải nén file vừa download về tại thư mục user của mình
Sudo tar xvzf arm-linux-gcc-4.4.3.tar.gz –C /home/icdesign
Lệnh này sẽ giải nén file vừa mới download về vào thư mục opt tại /home/icdesign Tiếp theo ta edit file bashrc bằng lệnh
Sudo nano /home/icdesign/.bashrc
Thêm vào file đoạn code như sau:
Trang 114.1.2 Thiết lập kết nối giữ PC và board dùng Minicom
Để kết nối giữa kit với PC thì ta cần dùng 2 sợi cáp, một sợi là “USB Device” hỗ trợ quá trình tải u-boot lên RAM thông qua công cụ “usbpush” trên PC và chương trình “supervivi” trên
bộ nhớ NORFLASH của kit, sợi kia là cổng chuyển đổi từ cổng “COM-to-USB” để ta tương tác với “supervivi” lúc ghi “u-boot” và u-boot khi ghi “Kernel” và Root File System” Tiếp theo ta phải cài đặt một công cụ điều khiển thiết bị đầu cuối “minicom” Quá trình cài đặt như sau:
sudo apt-get install minicom minicom -s
Di chuyển đến tùy chọn “Serial port setup” và thiết lập các thông số như hình dưới Lưu ý
ở mục “Serial Device” cấu hình ttyUSB0 chỉ dành cho cáp chuyển đổi từ cổng nối tiếp sang cổng USB và cổng USB được cắm vào Host PC, cổng nối tiếp thì cắm vào board
Hình 4-3: Tùy chỉnh trong Minicom Sau khi chọn xong thì nhấn Enter và chọn Exit
4.1.3 Cài đặt qt-embedded
Qt-Embedded là một công cụ cần thiết để ta có thể biên dịch ứng dụng đồ họa cho board
Để ứng dụng có thể làm việc với màn hình cảm ứng trên board thì ta cần cài đặt thêm thư viện
“tslib” cho công cụ Qt mà ta muốn tạo ra Phiên bản embedded mà ta sử dụng ở đây là embedded-4.7.4
qt-Ta download gói qt-embedded tại địa chỉ
http://qt.nokia.com/downloads/embedded-linux-cpp Sau đó giải nén file vừa download về
Chỉnh sửa file conf của qt-embedded bằng lệnh
Trang 12vi g++/qmake.conf
/home/icdesign/qt-everywhere-opensource-src-4.7.4/mkspecs/qws/linux-arm-Hình 4-4: Cấu hình Qt-Embedded
Ta thêm vào file conf 2 dòng
QMAKE_INCDIR += /usr/local/tslib/include QMAKE_LIBDIR += /usr/local/tslib/lib
Sau đó tiến hành builb bằng các lệnh
Sudo -s
Cd /home/icdesign/qt-everywhere-opensource-src-4.7.4 ./configure -embedded arm -xplatform qws/linux-arm-g++ -prefix /usr/local/Qt - qt-mouse-tslib -little-endian
Sau khi build xong ta tiến hành cài đặt bằng lệnh
Make –j4 Make install
Sau khi cài đặt xong ta có thể dùng để biên dịch các pro mà ta đã viết bằng Qt lên ARM
4.1.4 Cài đặt vsftpd
Vsftpd là một gói cho phép ta có thể tao server ftp cho quá trình truyền tải dữ liệu giữa các máy và giữa các máy với server
Để cài đặt vsftpd từ cửa sổ terminal ta dùng lệnh sau:
sudo atp-get install vsftpd
Sau khi cài đặt xong ta tiến hành sửa file “vsftpd.conf” bằng lệnh:
sudo nano /etc/vsftpd.conf
Trong file “vsftpd.conf” ta tiến hành chỉnh sửa các mục có nội dung như sau:
Trang 13Anonymous_enable=YES Local_enable=YES Write_enable=YES Anon_mkdir_write_enable=YES Ftpd_banner=welcome to blan FTP service Pam_service_name=vsftpd
Cuối cùng cuối file ta thêm dòng: anon_root=/home/icdesign/vsftpd là địa chỉ mà board
có thể download file từ đó
Sau đó ta save và thoát ra Tại cửa sổ terminal ta restart vsftpd bằng lệnh:
sudo service vsftpd restart
4.1.5 Ghi U-boot lên Nand Flash
Sau khi chạy chương trình minicom và kết nối PC với kit qua 2 dây cáp nói trên, ta chuyển Switch trên kit qua chế độ khởi động từ NOR FLASH và khởi động kit Hệ thống sẽ hiện lên giao diện khởi động, đây là giao diện dòng lệnh của supervivi được cài đặt sẵn trong NOR FLASH Đầu tiên ta chọn “x” để Format Nand Flash dành cho Liux, tiếp theo ta chọn “q” để đi vào chế độ dòng lệnh của supervivi
Supervivi> load ram 0x31000000 242360 u-boot
Với lệnh trên thì ta sẽ ghi u-boot vào địa chỉ RAM là 0x31000000 và 242360 là dung lượng u-boot tính bằng byte Bây giờ ta sử dụng công cụ “usp-push” để đưa u-boot lên RAM của kit từ PC thông qua cáp “USB-Device” Mở một cửa sổ Terminal khác trên PC và làm như sau:
sudo chmod 777 u-boot_20100701/tools/usbpush sudo u-boot_20100701/tools/usbpush u-boot_20100701/u-boot-256M.bin csum = 0x3a3e
send_file: addr = 0x30000000, len = 0x0003b2b8
Sau khi u-boot đã được chép hết lên RAM ta sẽ khởi động u-boot ngay trên RAM bằng
Trang 144.2Embedded Linux
4.2.1 Kernel
Kernel là phần cốt lõi nhất của một hệ điều hành, chứa đựng các hàm điều khiển hoạt động của phần cứng từ sự tương tác của người dùng Đối với mỗi phần cứng khác nhau thì sẽ phù hợp với một Kernel được cấu hình riêng cho nó Ở đây, ta sử dụng kit Mirco2440 phát triển trên nền tảng ARM9, nó tương thích với các phiên bản Kernel Linux sau này Ta chỉ cần biên dịch Kernel với cấu hình phù hợp cho các thiết kế trên kit Bản Kernel Linux-2.6.32.2 thì rất tương thích với kit Mirco2440 Bản Kernel linux-2.6.32.2 có thể tải ở địa chỉ sau:
http://www.friendlyarm.net/dl.php?file=linux-2.6.32.2-mini2440_201100609.tar.gz Giải nén file vừa tải về:
Tar -xf linux-2.6.32.2-mini2440-20100609.tar.gz
Sau khi giải nén ta sẽ có một thư mục chứa source code của Kernel Trong thư mục này
có chứa sẵn một số file cấu hình để biên dịch tương ứng với các màn hình khác nhau dành cho kit Với kit Mirco2440 ở đây có màn hình LCD 7 inch, vậy ta sẽ chọn file có tên là config_mini2440_a70:
cd linux-2.6.32.2
cp config_mini2440_a70 .config make menuconfig
Để tạo ra được một “Kernel Image” tương thích với U-boot thì ta cần cấu hình Kernel lại cho phù hợp với hệ thống của chúng ta Sau đó cài đặt thêm công cụ “mkimage” rồi mới biên dịch bằng lệnh sau:
sudo apt-get installl uboot-mkimage make uImage
Vậy là ta đã biên dịch thành công Kernel Image linux dành cho board Mirco2440 tương thích với u-boot
Sau đó ta tiến hành đưa Kernel lên board Bước đầu tiên là ta dùng một “SD-card” Format theo định dạng “ext2”, và sau đó chép “uImage” vào Cắm SD-card vào khe cắm trên board Trước tiên ta cần khai báo địa chỉ để thiết lập các biến môi trường trong Nand Flash:
# dynpart
# dynenv set 40000
Bây giờ ta ghi Kernel vào Nand Flash:
# nand erase kernel
# mmcinit
Trang 15# nand write.e 0x31000000 0x00060000 0x0024d568
4.2.2 Root File System
Bất cứ hệ điều hành nào ngoài Bootloader, Kernel cũng phải có 1 hệ thống cây thư mục gốc, đó là nơi lưu trữ chương trình thực thi, các thư viện, cấu hình hoạt động của máy sau khi khởi động, được gọi là Root File System Đối với hệ một hệ điều hành Linux thì tất cả mọi thứ đều được chứa trong thư mục gốc “/” và bên trong thư mục này gồm có những thư mục chính sau: bin, sbin, boot, etc, dev, home, lib, usr, opt, media, mnt, root, proc, tmp, sys, var, selinux
Ta có thể tải root file system về tạiđịa chỉ:
http://mini2440.googlecode.com/files/emdebian-grip-090306-armel- lenny-installed.tar.bz2
Tiến hành giải nén file vừa tải về:
mkdirrootfs tar-xjvf emdebian-grip-090306-armel-lenny-installed.tar.bz2 -C rootfs
Sửa lại file “/etc/init.d/rcS” để cho phép kit khởi động với cấu hình dành cho các ứng dụng giao diện trên nền tảng Qt4
Trong thư mục “/bin” ta thêm vào file “qt4” để thiết lập các yêu cầu cho phần cứng chạy các ứng dụng giao diện được viết bởi Qt4
Kit Mini2440 sử dụng bộ nhớ Nand Flash 256M tương thích với kiểu file dữ liệu dạng
“JFFS2” nên ta sẽ chuyển hệ thống cây thư mục trên thành một file có định dạng là “JFFS2” bằng công cụ “mtd-utils”
Tiếp theo ta sẽ ghi root file system vào bộ nhớ Nand Flash của board Ta dùng một card” Format theo định dạng “ext2”, và sau đó chép ““rootfs.jffs2”” vào Cắm SD-card vào khe cắm trên board Tương tự như kernel ta dùng các lệnh sau để ghi root file system lên board
“SD-# nand erase rootfs
# mmcinit
# ext2load mmc 0:1 0x31000000 rootfs.jffs2
# nand write.jffs2 0x31000000 rootfs ${filesize}
# setenv mini2440 'mini2440=1tb'
# setenv bootargs_init 'init=linuxrc'
# setenv ipaddr '192.168.1.230'
# setenv netmask '255.255.255.0'
# setenv bootcmd nboot.e kernel \; bootm
# run set_bootargs_nand