Giới thiệu về ứng dụng blynk

Một phần của tài liệu NGHIÊN cứu, PHÁT TRIỂN hệ THỐNG tự ĐỘNG NHẬN DIỆN và PHÂN LOẠI một số BỆNH THÔNG THƯỜNG TRÊN THỎ NUÔI BẰNG CÔNG NGHỆ xử lý ẢNH THÂN NHIỆT (Trang 39)

6. Thời gian và địa điểm thực hiện

2.4 Giới thiệu về ứng dụng blynk

Blynk là một phần mềm mã nguồn mở được thiết kế cho các ứng dụng IoT(Internet of Things). Ứng dụng giúp người dùng điều khiển phần cứng từ xa, có thể hiển thị dữ liệu cảm biến, lưu trữ dữ liệu, biến đổi dữ liệu hoặc làm nhiều việc khác..

Đồ án này lựa chọn Blynk vì một số lý do sau:

 Dễ sử dụng: Quá đơn giản, chỉ việc vào store, cài đặt, sau đó đăng ký tài khoản và mất không quá 5 phút để làm quen.

 Đẹp và đầy đủ: Giao diện của Blynk quá tuyệt vời, sử dụng bằng cách kéo thả, bạn cần nút bấm, kéo thả nút bấm, bạn cần đồ thị, kéo thả đồ thị, bạn cần LCD, kéo thả LCD, tóm lại là bạn cần gì thì kéo thả cái đó.

 Không phải lập trình android hay ios: Nếu như không có kiên thức về làm app trên điện thoại thì việc điều khiển thiết bị từ chính smartphone của mình quả là điều vô cùng khó khăn và phức tạp. Nhờ blynk thì chúng ta có thể bỏ qua bước lập trình tạo app. Có thể thử nhanh chóng và ứng dụng được dự án của mình vào thực tế.

 Thử nghiệm nhanh chóng, có thể điều khiển giám sát ở bất kỳ nơi nào có internet.

Hình 2. 6 Cấu trúc nền tảng của blynk

 Blynk App – Ứng dụng Blynk cho phép khởi tạo giao diện cho các dự án của mình.

 Blynk Server – Chịu trách nhiệm giao tiếp qua lại hai chiều giữa điện thoại và phần cứng.

 Blynk Library – Thư viện chứa các nền tảng phổ biến , giúp việc giao tiếp phần cứng với Server dễ dàng hơn.

- Tính năng, đặc điểm

 Cung cấp API & giao diện người dùng tương tự cho tất cả các thiết bị và phần cứng được hỗ trợ

 Kết nối với server bằng cách sử dụng: Wifi, Bluetooth và BLE, Ethernet, USB (Serial), GSM…

 Các tiện ích trên giao diện được nhà cung cấp dễ sử dụng

 Thao tác kéo thả trực tiếp giao diện mà không cần viết mã

 Dễ dàng tích hợp và thêm chức năng mới bằng cách sử dụng các cổng kết nối ảo được tích hợp trên blynk app

 Theo dõi lịch sử dữ liệu

 Gửi email, tweet, thông báo realtime, v.v.z

- Các bước chuẩn bị

Bước 1: Cài đặt và cấu hình Blynk App

Sau khi tải xuống ứng dụng thành công. Bạn sẽ cần tạo một tài khoản mới!

Hình 2. 7 Tạo tài khoản blynk

Chọn vào CUSTOM để chọ server của mình:

Hình 2. 8 Vào custom chọn server

Host address các bạn nhập vào : makerblynk.ddns.net Sau đó nhập email và mật khẩu để đăng nhập

- Giao diện app Blynk sẽ hiện thị như dưới đây:

Hình 2. 9 Giao diện blynk

Như vậy là chúng ta đã xong phần cấu hình app Blynk! 2.5 Lập trình và upload 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.

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

2.6 Tìm hiểu về ngôn ngữ lập trình Python và phần mềm OpenCV

2.6.1 Ngôn ngữ lập trình Python

Python là một ngôn ngữ lập trình bậc cao cho các mục đích lập trình đa năng, do Guido van Rossum tạo ra và lần đầu ra mắt vào năm 1991. Python được thiết kế với ưu điểm mạnh là dễ đọc, dễ học và dễ nhớ. Python là ngôn ngữ có hình thức rất sáng sủa, cấu trúc rõ ràng, thuận tiện cho người mới học lập trình. Cấu trúc của Python còn cho phép người sử dụng viết mã lệnh với số lần gõ phím tối thiểu. Vào tháng 7 năm 2018, Van Rossum đã từ chức Leader trong cộng đồng ngôn ngữ Python sau 30 năm lãnh đạo

Python hoàn toàn tạo kiểu động và dùng cơ chế cấp phát bộ nhớ tự động, do vậy nó tương tự như Perl, Ruby, Scheme, Smalltalk, và Tcl. Python được phát triển trong một dự án mã mở, do tổ chức phi lợi nhuận Python Software Foundation quản lý.

Các bước tạo ứng dụng python bằng pycharm được thực hiện như sau: Bước 1: Nhấp đúp chuột mở pycharm.

Hình 2. 11Mở pycharm

Bước 2: Vào New Project để tạo Project mới

Hình 2. 12 Tạo project mới

Hình 2. 13 Nhấn vào create

Bước 4: VàoPython File để tạo một file sử dụng mã nguồn Python.

Bước 5: Đặt tên cho file

Hình 2. 15 Đặt tên cho file

Bước 7: Viết xong mã nguồn, nhấn lưu lại, sau đó nhấn chọn mục Run để thực thi chạy file Python.

Hình 2. 17 Nhấn chọn mục Run để thực thi file

Hình 2. 18 Chạy thực nghiệm file

2.6.2 Thư viện OpenCV

OpenCV (OpenSource Computer Vision) là một thư viện mã nguồn mở. 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ợ 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 bằng tối ưu hóa C/C++, thư viện có thể tận dụng lợi thế của 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.

Thư viện OpenCV cung cấp cho người dùng các cấu trúc dữ liệu, đối tượng và hàm bằng cách khai báo nguyên mẫu (prototype) của chúng trong các tập tin thư viện C/C++ (*.h, *.hpp…) và định nghĩa chi tiết trong các tập tin mã nguồn (*.c,*.cpp). Với mức độ sử dụng OpenCV, ta chỉ cần giải nén các tập tin đã được biên dịch sẵn rồi thực hiện các thao tác cài đặt đường dẫn cho thích hợp để hệ điều hành tìm đến đúng vị trí của các tập tin thư viện. Ở mức độ cao hơn, nếu muốn hiệu chỉnh sửa đổi thuật toán hay sử dụng phần mở rộng của OpenCV ta cần phải biên dịch mã nguồn trực tiếp trên máy trước khi cài đặt.

OpenCV bao gồm một số module khác nhau, mỗi module có các chức năng riêng biệt và bổ sung cho nhau. Chẳng hạn như, "Core" cung cấp cho người dùng cấu trúc dữ liệu cơ sở và các tính năng, trong khi thành phần "Imgproc" có tính năng xử lý hình ảnh, bao gồm lọc ảnh (cả tuyến tính và phi tuyến tính), cũng như các tuỳ chọn chỉnh sửa ảnh khác (thay đổi kích thước, biến dạng...) và chuyển đổi không gian màu. Bên cạnh những tính năng có thể khai thác từ Photoshop thì bộ chỉnh sửa ảnh đến từ OpenCV cũng khá thú vị, hơn nữa chức năng của nó cũng có phần đơn giản hơn Photoshop cho nên bạn dễ dàng xử lý hơn.

2.7 Cơ sở và lưu đồ thuật toán

2.7.1 Cơ sở thuật toánChọn giải màu cho đối tượng Chọn giải màu cho đối tượng

import cv2

print ("Quanghuan")

image = cv2.imread("Opencvanh/g.jpg") cv2.imshow("image", image)

cv2.waitKey(0)

Hình 2. 19 Trackbars sau khi được tạo

Bước 2: Điều chỉnh các giá trị màu để chọn màu cần tìm.

Bước 3: Từ trackbars ta tìm được giá trị khoảng màu cần lọc, với lower=[0, 171, 172] và upper=[11, 255, 255].

Lọc màu ảnh

Với giải thật này chúng ta sẽ xử dụng không gian màu HSV:

Hình 2. 21 Ảnh không gian màu HSV [8]

HSV[37] hay còn gọi là không gian màu HSB là một không gian màu dựa trên 3 thông số chính của không gian màu:

-H viết tắt của HUE là vùng màu.

-S viết tắt của SATURATION có nghĩa là độ bão hòa màu.

-V viết tắt của VALUE có nghĩa là giá trị hay độ sáng của màu sắc.

Sau khi chuyển từ hệ màu RGB sang HSV thì filter giá trị màu bằng hàm cv2.inRange(), kết quả là ảnh nhị phân gọi là mask, sau đó ta áp dụng vào ảnh gốc ta sẽ được ảnh chỉ chứ màu giới hạn.

Để lọc khoảng màu ta dùng câu lệnh:

Bước 1: Chuyển ảnh sang không gian màu HSV ta sử dụng lệnh hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

Bước 2: Để lọc màu từ ảnh ta sử dụng lệnh: white_mask = cv2.inRange(hsv, lower, upper)

result = cv2.bitwise_and(frame, frame, mask = white_mask) cv2.imshow('inrange', result)

Xám hóa và nhị phân ảnh

Để xám hóa và nhị phân ảnh ta sử dụng các lệnh: gray = cv2.cvtColor(result, cv2.COLOR_BGR2GRAY) cv2.imshow('gray', gray)

ret, thresh = cv2.threshold(gray ,1 ,255, cv2.THRESH_BINARY) cv2.imshow('thresh', thresh)

Các phương pháp xử lý đối tượng trong ảnh

Chuyển qua ảnh xám:

Đơn vị cơ bản của một bức ảnh là điểm ảnh (pixel)[38], mỗi điểm ảnh có thể được biểu diễn bằng n bytes dưới các hệ màu khác nhau. Việc chuyển đổi giữa các hệ màu thông thường được thực hiện thông qua các phép biến đổi ma trận. Xét đến phương thức chuyển đổi từ ảnh 24 bit RGB sang ảnh 8 bit đa mức xám, để thực hiện yêu cầu trên, thông thường ta sử dụng cách chuyển đổi từ ảnh 24 bit RGB sang ảnh 8bit GrayScale.

GrayScale[39]: là một hệ thống màu có mô hình màu đơn giản nhất với 256 cấp độ xám biến thiên từ màu đen đến màu trắng. Sản phẩm được xuất ra sẽ có màu trắng đen. Được sử dụng cả trong công nghiệp in lẫn dùng trong việc thể hiện ảnh lên các thiết bị số.

Ảnh xám (Gray image) hay còn gọi là ảnh đơn sắc (Monochromatic), mỗi giá trị điểm ảnh (Pixel) trong ma trận điểm ảnh mang giá trị từ 0 đến 255.

Trong không gian màu RGB, để có một ảnh xám cần có phải có giá trị kênh màu Red(x, y) = Green(x, y) = Blue(x, y). (Với x, y lần lượt là tọa độ của điểm ảnh). Công thức tính cường độ sáng tại một điểm ảnh từ ảnh RGB:

I(x, y) = 0.3086 * Red(x, y) + 0.6094 * Green(x, y) + 0.0820 * Blue(x, y) Ix,y=0.299*Red(x,y)+0.587*Green(x,y)+0.114*Blue(x,y)

Phân tích:

- I (x, y): Là cường độ sáng tại điểm ảnh (x, y) của ảnh xám.

-Red (x, y): Là giá trị của kênh màu Red (Đỏ) tại điểm ảnh (x, y) của ảnh màu (RGB).

-Green (x, y): Là giá trị của kênh màu Green (Xanh lá cây) tại điểm ảnh (x, y) của ảnh màu (RGB). Blue(x, y): Là giá trị của kênh màu .

Theo [20] ta có công thức khác tính cường độ sáng tại một điểm ảnh từ ảnh RGB: I(x, y) = (2 * Red(x, y) + 5 * Green(x, y) + 1 * Blue(x, y)) / 8

Chú ý:

Các phép toán trong số nguyên (Int) nhanh hơn rất nhiều trong số thực (Float). Trong OpenCV[20], hệ thống màu có thứ tự các kênh màu là Blue-Green-Red. Các thông số dùng để tính toán cường độ sáng cho ảnh xám như: 0.3086, 0.6094, 0.0820… Được coi là những con số đẹp do người ta nghiên cứu ra. Các con số này có thể thay đổi. Chúng ta hoàn toàn có thể chọn một giá trị một kênh màu hoặc chia trung bình cộng của 3 kênh màu để tìm cường độ sáng tại một điểm ảnh (Pixel).

Lưu ý rằng giá trị mỗi điểm ảnh I(x, y) hay còn gọi là cường độ sáng (Luminance Intensity) trong ảnh đa mức xám tính được là tổng trọng số khác nhau của mỗi thành phần màu trong hệ màu RGB. Một trong những lý do của việc này là nếu chúng ta sử dụng cùng trọng số, ví dụ (R + G + B) / 3 thì màu đỏ, màu xanh nước biển hay màu xanh da trời sẽ có cùng mức xám sau khi chuyển đổi. Mặt khác khoa học đã chứng minh thì mắt người nhạy cảm hơn với thành phần màu xanh lá cây và màu đỏ so với xanh da trời.

Phân ngưỡng (Threshold).

Khi xử lý trực tiếp ảnh từ không gian màu (RGB, HIS…) hoặc ảnh xám (gray) đôi khi chúng ta phải tiếp nhận một số lượng lớn thông tin từ ảnh. Điều này có thể gây khó khăn cho việc xây dựng thuật toán và làm giảm tốc đọ xử lý. Vì thế có lớp thuật toán phân ngưỡng để chuyển ảnh đầu vào (ảnh màu hoặc ảnh xám) về không gian ảnh nhị phân: chỉ gồm hai giá trị 0 hoặc 1, hoặc 0 và 255 tùy theo quy định của cấu trúc ảnh. Theo đó, giá trị 0 sẽ là giá trị ứng với những điểm đen trên ảnh và giá trị 1 (hoặc 255) sẽ là giá trị ứng với những điểm trắng. Nhằm làm đơn giản hóa quá trình tính xử lý.

Phân ngưỡng với ngưỡng cố định[17]: nếu pixel có giá trị lớn hơn giá trị ngưỡng thì nó được gán 1 giá trị (thường là 1), ngược lại nhỏ hơn giá trị ngưỡng thì nó được gán 1 giá trị khác (thường là 0).

Hàm sử dụng là threshold, tham số đầu tiên là 1 ảnh xám, tham số thứ 2 là giá trị ngưỡng, tham số thứ 3 maxval là giá trị được gán nếu giá pixel lớn hơn giá trị ngưỡng, tham số thứ 4 là loại phân ngưỡng. Tùy theo các loại phân ngưỡng mà

THRESH_BINARY

Nếu giá trị pixel lớn hơn ngưỡng thì gán bằng maxval, ngược lại bằng gán bằng 0. THRESH_BINARY_INV

Nếu giá trị pixel lớn hơn ngưỡng thì gán bằng 0, ngược lại bằng gán bằng maxval. THRESH_TRUNC

Nếu giá trị pixel lớn hơn ngưỡng thì gán giá trị bằng ngưỡng, ngược lại giữ nguyên giá trị.

THRESH_TOZERO

Nếu giá trị pixel lớn hơn ngưỡng thì giữ nguyên giá trị, ngược lại gán bằng 0. THRESH_TOZERO_INV

Nếu giá trị pixel lớn hơn ngưỡng thì gán giá trị bằng 0, ngược lại giữ nguyên Ưu điểm của thuật toán đơn giản dễ lập trình.

Nhược điểm là khó chọn ngưỡng thích nghi với nhiều loại ảnh trong các điều kiện ánh sáng khác nhau.

Adaptive Thresholding (phân ngưỡng thích nghi): phương pháp phân ngưỡng ở trên không phù hợp cho nhiều trường hợp, như là ánh sáng không đồng đều trên ảnh. Trong trường hợp đó chúng ta dùng hàm adaptive Threshold. Phương thức này tính giá trị trung bình của các n điểm xung quanh pixel đó rồi trừ cho C chứ không lấy ngưỡng cố định (n thường là số lẻ, còn C là số nguyên bất kỳ).

Ngoài các tham số giống như phân ngưỡng thường, adaptiveThreshold có thêm các tham số:

ADAPTIVE_THRESH_MEAN_C: giá trị của pixel phụ thuộc vào các pixel lân cận.

ADAPTIVE_THRESH_GAUSSIAN_C: giá trị của pixel cũng phụ thuộc vào các pixel lân cận, tuy nhiên được khử nhiễu.

Block Size: số pixel lân cận dùng để tính toán. C: hằng số trừ đi giá trị trung bình

2.7.2 Lưu đồ thuật toán

Lưu đồ thuật toán giải thích phần xử lý ảnh thân nhiệt của thỏ sau khi thu được qua quá trình chụp lấy ảnh mẫu. Ảnh RGB được chuyển sang không gian màu HSV để chọn ngưỡng và lấy đặc tính nhiệt độ cao sau đó được xám hóa và nhị phân để trích xuất các đường biên bao quanh vùng nhiệt độ cao. Dựa trên những đường biên

này, ta hoàn toàn có thể xác định được vùng nhiệt độ cao và thực hiện tính toán. Cuối cùng là gửi kết quả nhiệt độ sang ứng dụng blynk.

Trong đó:

I_RGB: Ảnh thân nhiệt đầu vào của thỏ ở không gian màu RGB I_HSV: Ảnh thân nhiệt khi chuyển sang không gian màu HSV I_Mask: Ảnh mặt nạ sau khi được xám hóa và nhị phân

Bước 1: Đưa vào ảnh đầu vào định dạng RGB

Bước 2: Kiểm tra ảnh đầu vào có khác rỗng không, nếu không thoát chương trình, nếu có chuyển sang bước 3

Bước 3: Chuyển ảnh đầu vào RGB sang ảnh không gian màu HSV

Bước 4: Tiến hành phân đoạn ảnh, chọn ngưỡng để lấy được đặc tính nhiệt độ cao Bước 5: Xám hóa và nhị phân ảnh

Bước 6: Trích xuất đường biên bao quanh vùng nhiệt độ cao

Bước 7: Dựa vào đường biên để xác định vùng nhiệt độ cao và tính toán Bước 8: So sánh nhiệt độ với ngưỡng rồi báo kết kết quả sang ứng dụng blynk

45

Ảnh đầu vào I_RGB, nhietdo=0, t_thresh Bắt đầu

sai I_RGB==NULL

đúng Chuyển I_RGB sang không gian màu HSV về

I_HSV

Phân đoạn ảnh I_HSV, chọn ngưỡng để lấy được đặc tính nhiệt độ cao

Xám hóa và nhị phân ảnh để thu về ảnh mặt nạ I_Mask

Trích xuất các đường biên Egde [] bao quanh các vùng nhiệt độ cao từ ảnh mặt nạ

sai Egde [] ==NULL

đúng

Dựa vào cùng đường biên để xác định vùng nhiệt độ cao trên ảnh I_RGB ban đầu

Tính toán nhiệt độ trên ảnh I_RGB: nhietdo=i*0.1+38

sai Nhietdo>t_thresh

đúng

(1) Gửi nhiệt độ sang app BLYNK

Hình 2. 22 Lưu đồ thuật toán của hệ thống

2.8 Kết luận chương 2

Qua việc nghiên cứu, lựa chọn phương pháp và thiết bị cho hệ thống trong chương 2, ta đã giải quyết được bài toán nhận diện, phân loại các loại bệnh thông thường trên thỏ thông qua ảnh camera thân nhiệt của chúng.

Hệ thống sử dụng camera thân nhiệt kết hợp với điều khiển arduino và công nghệ xử lý hình ảnh đã đưa ra một loạt phân tích ảnh cụ thể từ chuyển sang không gian màu phù hợp, phân đoạn, xám hóa và nhị phân, trích xuất đường biên nhiệt độ cao và tính toán thông số nhiệt độ để có thể nhận định chính xác loại bệnh mà thỏ

Một phần của tài liệu NGHIÊN cứu, PHÁT TRIỂN hệ THỐNG tự ĐỘNG NHẬN DIỆN và PHÂN LOẠI một số BỆNH THÔNG THƯỜNG TRÊN THỎ NUÔI BẰNG CÔNG NGHỆ xử lý ẢNH THÂN NHIỆT (Trang 39)