Ảnh nhiệt cơ thể lợn không chứa vùng bất thường[17]

Một phần của tài liệu ĐỒ ÁN TỐT NGHIỆP 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 LỢN NUÔI BẰNG CÔNG NGHỆ XỬ LÝ ẢNH THÂN NHIỆT (Trang 72 - 106)

Bước 2: Thực hiện lọc màu cần tìm trong ảnh:

Hình 3.4: Ảnh sau khi được lọc màu

a: Ảnh nhiệt cơ thể lợn có chứa vùng bất thường b: Ảnh nhiệt cơ thể lợn không chứa vùng bất thường

b a

b a

Bước 3: Xám hóa ảnh vừa lọc màu

Hình 3.5: Ảnh sau khi được xám hóa a: Ảnh nhiệt cơ thể lợn có chứa vùng bất thường b: Ảnh nhiệt cơ thể lợn không chứa vùng bất thường

Bước 4: Nhị phân hóa ảnh

Hình 3.6: Ảnh sau khi được nhị phân hóa a: Ảnh nhiệt cơ thể lợn có chứa vùng bất thường

b: Ảnh nhiệt cơ thể lợn không chứa vùng bất thường

b a

b a

Bước 5: Xác định vị trí của vùng màu bất thường, giá trị nhiệt lớn nhất biểu diễn lên ảnh gốc ban đầu (vùng nhiệt cao nhất được đánh dấu bằng màu đen).

Hình 3.7: Kết quả cuối cùng phần mềm đưa ra

Bước 6: Chương trinh gửi thông tin xuống mạch cảnh báo, sau đó mạch cảnh báo sẽ gửi đi tin nhắn cảnh báo về số điện thoại cài đặt trước trong trường hợp có bất thường về nhiệt trên cơ thể vật nuôi

3.3. Thành lập bảng kết quả chạy thử chương trình

3.3.1. Bảng kết quả khi dùng chương trình để phân tích ảnh

Để đánh giá độ chính xác khi phân tích ảnh tôi tiến hành khảo nghiệm thông qua các bước sau đây:

Bước 1: Lựa chọn ảnh mẫu

Bước 2: Sử dụng chương trình kết quả của đề tài để phân tích xử lí các ảnh làm mẫu

Bước 3: Đo thời gian đáp ứng của chương trình

Bước 4: So sánh các giá trị nhiệt tìm được bằng chương trình với cái giá trị nhiệt thực tế. Các giá trị nhiệt thực tế được xác định bằng việc sử dụng trackbars để lọc theo từng list màu bằng tay để tìm giá trị nhiệt độ cao nhất trong vùng nhiệt bất thường.

Bước 5: Tính độ chính xác bằng sai số tương đối thông qua công thức [16]

() (3.16)

Trong đó : x là giá trị đo được bởi thiết bị flir 267 là kết quả đề tài. x0 là giá trị nhiệt thưc tế đo được bởi nhiệt kế để xác định.

*x0 là phương pháp đo tiếp xúc xử dụng nhiệt kế:

-Dùng nhiệt kế ‘NURSE ANGIE’[33] tiếp xúc trực tiếp với lợn để đo, đo cách vị trí cần đo khoảng 1-3cm

-Độ chính xác đến 0.10C

- x0 được đo cùng thời điểm, cùng số lần với camera ảnh nhiệt filr

Bảng 3.1: Bảng kết quả phân tích với đầu vào là ảnh lợn bị dịch tả lợn cổ điển tại các thời điểm trong ngày

Bảng 3.2: Bảng kết quả phân tích với đầu vào là ảnh lợn bị stress tại các thời điểm trong ngày

Bảng 3.3: Bảng kết quả phân tích với đầu vào là ảnh lợn bị cảm sốt ở lợn con mới sinh tại các thời điểm trong ngày

Nhận xét: Chương trình hoạt động tốt đã xác định được vị trí các cá thể có nhiệt độ bất thường, đưa ra được nhiệt độ cao nhất trong vùng đó đồng thời gửi tin nhắn cảnh báo đối với các ảnh có vùng nhiệt bất thường.

Qua quá trình phân tích thực tế cho thấy hệ thống có độ tin cậy cao, không bị ảnh hưởng bởi các yếu tố thời tiết.

Khi phân tích ảnh chương trình xác định giá trị nhiệt độ cao nhất có sai lệch với nhiệt độ thực tế tuy nhiên sai lệch không quá 0.5°C (1.3%).

3.3.2. So sánh giá trị kinh tế

Qua tìm hiểu một số hệ thống có tính năng tương tự tôi có bảng so sánh về giá trị kinh tế như sau:

Bảng 3.4: Bảng so sánh giá trị kinh tế

Hệ thống thiết kế Hệ thống đo thân nhiệt Fluke Ti29

Hệ thống đo thân nhiệt Vantech VP-TN83Z

Chức năng:Phát hiện các vùng nhiệt có nhiệt độ tăng giảm bất thường, xác định vị trí, tọa độ vùng nhiệt bất thường và đưa ra cảnh báo bằng âm thanh,tín hiệu đèn led

Chức năng:Phát hiện các vùng nhiệt có nhiệt độ tăng giảm bất thường, xác định vị trí, tọa độ vùng nhiệt bất thường và đưa ra cảnh báo bằng âm thanh,tín hiệu đèn led Thống kê thiết bị Link mua sản phẩm: https://tktech.vn/camera- nhiet-fluke-ti29/ Link mua sản phẩm: https://lnk.vn/hgZ36 STT Tên Số lượng Giá thành (đồng) 1 Camera ảnh nhiệt cầm tay Flir 1 12.925.00 0 2 Arduino uno 1 100.000 3 Module sim 900a 1 300.000 Thành tiền 13.325.00 0 Thành tiền 166.262.00 0 Thành tiền 180.000.000

Nhận xét :

a, Ưu, nhược điểm của việc tự thiết kế hệ thống: Ưu điểm

+ Do là hệ thống tự thiết kế nên có thể chủ động về phần mềm dễ dàng thay đổi theo ý muốn

+ Đo được nhiều cá thể cùng một lúc

+ Phát hiện cá thể có nhiệt độ bất thường trong khu vực nuôi

+Thuận tiện và đo được từ khoảng cách xa không ảnh hưởng đến vật nuôi + Tính chính xác cao

+ Camera nhiệt cho ra hình ảnh rõ nét ngay cả trong điều kiện ánh sáng yếu, thậm chí là trong bóng tối.

Nhược điểm:

+Yêu cầu người xử lý phải có trình độ chuyên môn

+ Nguồn pin có thời lượng sử dụng nhất định, cần kiểm tra và bổ sung kịp thời để đảm bảo khả năng vận hành và không bị gián đoạn trong quá trình sử dụng.

+ Yêu cầu người vận hành có trình độ chuyên môn cao b, Ưu nhược điểm của hệ thống đo thân nhiệt Fluke Ti29[39]

Ưu điểm:

+ Ghi âm và chú thích được lưu thêm chi tiết với tệp hình ảnh

+ Camera nhiệt cho ra hình ảnh rõ nét ngay cả trong điều kiện ánh sáng yếu, thậm chí là trong bóng tối.

+ Tự động căn chỉnh (hiệu chỉnh thị sai) các ảnh hồng ngoại và phổ kiến bằng công nghệ đã được cấp bằng sáng chế IR-Fusion® của Fluke

+ Dễ dàng lắp đặt, sử dụng ít nhân lực hoạt động.

+Giao tiếp nhanh hơn với truyền hình ảnh không dây trực tiếp đến PC, Apple® iPhone® hoặc iPad®

+Nhận xét bằng giọng nói được lưu cùng từng hình ảnh để tham khảo về sau

Nhược điểm

+ Chi phí lắp đặt cao .

+ Yêu cầu người vận hành có trình độ chuyên môn cao c, Ưu nhược điểm của hệ thống đo thân nhiệt Vantech VP-TN83Z

Ưu điểm:

+ Hoểm:ủa hệ thống đo thân nhiệt n caonh

+ Đo thân nhithống đo thân nhiệt n ca

+ Đ + Đo thân nhithống đo thân nhiệt n caonh để .

+ Lưu trn nhithống đo thân nhiệt n caonh để tham khảo về saule® iPhon

+ Nhu trn nhithống

Nhược điểm

+ Chi phí lắp đặt cao .

+ Lắp đặt cố định, khó khăn trong việc thay đổi vị trí

+ Yêu cầu người vận hành có trình độ chuyên môn cao

3.4. Đánh giá và thảo luận3.4.1. Đánh giá 3.4.1. Đánh giá

Qua quá trình thực hiện đồ á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 LỢN NUÔI

BẰNG CÔNG NGHỆ XỬ LÝ ẢNH THÂN NHIỆT” em đã thu được số kết quả như sau:

Tìm hiểu được công nghệ và ứng dụng công nghệ xử lý ảnh trong nhận diện một số bệnh thông thường trên lợn do tăng nhiệt độ bất thường.

Sử dụng tốt các phần mềm chuyên ngành như: Python, OpenCV.

Tìm hiểu được nguyên lí hoạt động và phạm vi sử dung của các loại camera ảnh nhiệt.

Đáp ứng được yêu cầu đặt ra của khóa luận là tìm được cá thể có dấu hiệu nhiệt bất thường, xác định được tọa độ của vùng nhiệt bất thường, xác định và chỉ ra cá thể có nhiệt độ cao nhất và gửi tin nhắn cảnh báo.

Đánh giá được mức độ tin cậy, chính xác của hệ thống thông qua thực nghiệm.

3.4.2. Thảo luận

Để hoàn thành khóa luận này, em đã sử dụng nhiều phần mềm và các tài liệu liên quan như : Phần mềm Open CV, ngôn ngữ lập trình python, phần mềm IDLE Python, excel..v.v

Em đã hoàn thành được khóa luận đúng với thời gian và mục đích đề ra từ đầu.

Thời gian làm khóa luận là khoảng thời gian vô cùng ý nghĩa và quan trọng đối với cá nhân em,trong học tập cũng như trong cuộc sống làm hành trang vững chắc trong tương lai.

Khóa luận của em hoàn thành xong vẫn còn tồn tại nhiều thiếu sót. Em mong các thầy cô giáo trong hội đồng giúp đỡ để đề tài của em được hoàn thiện tốt nhất, để có thể ứng dụng giúp ích trong việc chăn nuôi.

Em xin chân thành cảm ơn !

3.5. Những mặt còn hạn chế và hướng phát triển3.5.1 Những mặt còn hạn chế. 3.5.1 Những mặt còn hạn chế.

- Do còn hng mặt còn hạn chế hệ thống chưa kết nối trực tiếp với camera flir TG267 mà phải phân tích ảnh off-line

3.5.2 Hướng phát triển đề tài

Phát triển hệ thống có thể kết nối trực tiếp với camera ảnh nhiệt để phân tích không cần phải thu thập lưu trữ ảnh sau đó mới nhập dữ liệu để phân tích.

KẾT LUẬN VÀ KIẾN NGHỊ 1 Kết luận

Mục tiêu chính của đề tài là xác định được vùng có dấu hiệu bất thường về nhiệt trên cơ thể lợn thông qua xử lý ảnh đã thành công . Sau quá trình thực hiện thì thuật toán còn một số chỗ chưa hoàn toàn tối ưu nên chưa được chính xác tuyệt đối dẫn đến sai số.

Qua thời gian nghiên cứu và thực hiện thì đồ án đã tiếp cận với thực tế

bằng việc sử dụng camera thân nhiệt flir TG267 và nhiệt kế để đo thân nhiệt trực tiếp trên lợn. Bên cạnh đó còn có một số hạn chế như xử lý ảnh off- line. Mặc dù em đã cố gắng nhưng do giới hạn về thời gian nghiên cứu cũng

như kinh phí thực hiên và năng lực còn kém nên em đề tài nghiên cứu vẫn còn

nhiều thiếu sót

2.Kiến nghị

Trong quá trình thực hiện đề tài, việc tìm hiểu tài liệu tham khảo gặp nhiều khó khăn. Em mong rằng nhà trường và khoa có thể xây dựng một phòng thực hành hiện đại hơn với đầy đủ các trang thiết bị mới. Như vậy, sẽ giúp cho sinh viên sau này có thể tìm được các tài liệu đầy đủ hơn, khả năng tiếp cận với công nghệ hiện đại càng sớm hơn.

TÀI LIỆU THAM KHẢO [1] https://cameraviet.vn/bai-viet/nguyen-ly-hoat-dong-cua-camera-anh-nhiet? fbclid=IwAR2SQBadbAplM53G9qkLcgweFzpylhudgVGMG6mKTumeVcor7k SyllWTBmw [2] https://www.youtube.com/watch?v=P6G-ziAxGng [3] https://volcano.si.edu/showreport.cfm?doi=10.5479/si.GVP.BGVN201311- 360050 [4] https://maydochuyendung.com/tin-tuc/cong-nghe-ky-thuat/camera- nhiet-kiem-tra-sua-chua-linh-kien-dien-tu-duoc-khong [5] đohttp://kiemtra.wap.sh/cach%20do%20than%20nhiet [6] https://www.emtake.vn/products/camera-nhiet-don-mt30-phat-hien-than- nhiet [7]tếhttps://anninhviet.vn/giai-phap-an-ninh/giai-phap-nhan-dien-hinh-anh/ [8]Nguyễn Thái Học, Phạm Văn Hùng, Nguyễn Thị Duyên, Lê Xuân Hải, Đặng Hữu Anh, Bùi Quí Việt. "Tổng quan về công nghệ IoT và xử lý ảnh trong chăm sóc sức khỏe vật nuôi", Journal of Military Science and Technology ISSN: 1859-1043, No. 66, April, 2020.

[9] Tabuaciri, Poasa & Bunter, Kim & Graser, Hans-Ulrich. (2016). “Thermal imaging as a potential tool for identifying piglets at risk”.

10.13140/RG.2.1.1332.4400. [10]https://thegioidienco.vn/camera-do-than-nhiet-tu-dong.html [11]https://extech.vn/camera-nhiet-flir-tg267/ [12]http://arduinokit.vn/mach-arduino-uno-la-gi/ [13] https://components101.com/wireless/sim900a-gsm-module [14]https://vi.wikipedia.org/wiki/Python_(ng%C3%B4n_ng%E1%BB%AF_l %E1%BA%ADp_tr%C3%ACnh) [15] https://eitguide.net/tong-quan-ve-thu-vien-opencv-open-source-computer- vision/

[16]https://highmarksecurity.com/camera-nhiet/ [17]https://thigiacmaytinh.com/ly-thuyet-ve-phan-nguong-anh-threshold/ [18]https://www.semanticscholar.org/paper/Thermal-imaging-as-a-potential- tool-for-identifying-Bunter- Graser/50ea67d27f8e8ba66c29ab85490c3656382532b1 [19]https://www.researchgate.net/figure/Pig-body-surface-temperature-before- B-and-after-A-heat-stress-Body-surface_fig1_41122190 [20] https://www.stdio.vn/computer-vision/ky-thuat-grayscale-va-nhi-phan-hoa- anh-adaptive-threshold-Fhjcg [21]https://animaid.vn/cac-loai-benh-va-cach-tri-benh-cho-lon-con-moi-sinh [22] https://www.vinmec.com/vi/tin-tuc/thong-tin-suc-khoe/virus-gay-dich-ta- lon-song-o-nhiet-do-bao-nhieu/ [23]https://hoaphuongcamera.com/giai-phap-an-ninh/camera-cam-bien-than- nhiet.html/ [24]https://mptmed.com/may%20do%20than%20nhiet%20tu%20xa.htm [25]https://maydochuyendung.com/tin-tuc/cong-nghe-ky-thuat/cau-tao-va-ung- dung-thuc-te-cua-camera-nhiet [26] https://mpc247.com/vat-li-kham-pha/565318/camera-nhiet-hoat-dong-nhu- the-nao.html [27] https://cameraanhung.com/9983/camera-nhiet-la-gi-hoat-dong-nhu-the- nao/ [28]https://xaydungtruonggia.vn/tho-sua-ong-nuoc/huong-dan-phat-hien-ro-ri- nuoc-tuong.html [29] https://cameradongduong.com/news/cam-nang/tim-hieu-ve-camera-hong- ngoai-85.html [30] https://samtech.vn/tinh-nang-va-ung-dung-cua-camera-hong-ngoai [31] https://vi.wikipedia.org/wiki/Cortisol [32] https://animaid.vn/cac-loai-benh-va-cach-tri-benh-cho-lon-con-moi-sinh

[33] https://cargillfeed.com.vn/benh-dich-ta-lon-chau-phi-nhung-cau-hoi- thuong-gap/ [34] https://xachtaynhat.net/products/nhiet-ke-do-tran-nurse-angi/ [35] https://nongnghiep.vn/xem-lon-gan-chip-d147092.html [36] https://www.tinhoccoban.net/2018/10/tu-hoc-xu-ly-anh-nhap-mon-xu-ly- anh.html [37] http://inanlubi.vn/tin-tuc/khong-gian-mau-sac-hsv [38] https://vi.wikipedia.org/wiki/Pixel [39] https://en.wikipedia.org/wiki/Grayscale [40]https://www.fluke.com/vi-vn/product/thermal-cameras/ti29 [41]https://en.wikipedia.org/wiki/RNA_virus

PHỤ LỤC 1.Chương trình xử lí ảnh

#khai bao thu vien from tkinter import *

from tkinter import filedialog import tkinter as tk

import tkinter.messagebox import cv2

import sys

import numpy as np from serial import Serial import serial.tools.list_ports import time

import os

from urllib.parse import urlparse import threading OPTIONS = [ "egg", "bunny", "chicken" ] if not os.path.exists('temp'): os.makedirs('temp')

if not os.path.exists('output'): os.makedirs('output') list_lower = [ np.uint8([10, 252, 251]), np.uint8([9, 244, 243]), np.uint8([8, 236, 235]), np.uint8([7, 228, 227]), np.uint8([6, 220, 219]), np.uint8([5, 212, 211]), np.uint8([4, 204, 203]), np.uint8([3, 196, 195]), np.uint8([2, 188, 187]), np.uint8([1, 180, 179]), np.uint8([0, 172, 171]), ] list_upper = [ np.uint8([11, 255, 255]), np.uint8([10, 248, 247]), np.uint8([9, 240, 240]), np.uint8([8, 232, 231]),

np.uint8([7, 224, 223]), np.uint8([6, 216, 215]), np.uint8([5, 208, 207]), np.uint8([4, 200, 199]), np.uint8([3, 192, 191]), np.uint8([2, 184, 183]), np.uint8([1, 176, 175]) ] window = Tk() filename = '' foundCOM = serial.tools.list_ports.comports()

url = Label(window,text="Chọn Cổng COM") url.grid(row=1, column=0 ,padx=10,pady=10)

variable = StringVar(window) variable.set("") # default value

w = OptionMenu(window , variable, *(window, variable) + tuple(foundCOM))

w.grid(row=1, column=1)

global filename a, file_extension = os.path.splitext(filename) img = frame hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) lower = list_lower[10] upper = list_upper[0]

white_mask = cv2.inRange(hsv, lower, upper)

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

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)

contours, hier = cv2.findContours(thresh.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

cv2.drawContours(img, contours, -1, (0,255,0), 3) print(len(contours))

if (len(contours) > 0): # get biggest contour

biggest_contour = contours[0] max_area = 0

for contour in contours:

area = cv2.contourArea(contour) if max_area < area: max_area = area biggest_contour = contour M = cv2.moments(biggest_contour) cx = int(M['m10']/M['m00']) cy = int(M['m01']/M['m00']) # font font = cv2.FONT_HERSHEY_SIMPLEX # org org = (250, 250) # fontScale fontScale = 2 # Blue color in BGR color = (0, 0, 0)

# Line thickness of 2 px thickness = 2

# text = '[' + str(cx) + ',' + str(cy) + ']' # cv2.putText(img, text, org, font,

# fontScale, color, thickness, cv2.LINE_AA) # print(cx, cy)

# cv2.imshow("origin after", img)

# cv2.imwrite("output/origin after [" + str(cx) + "," + str(cy) + "].png", img)

# cv2.imwrite("output/origin after ALL" + str(index) + ".png", img) flag = True for i in range(10, 0, -1): print(i) lower = list_lower[i] upper = list_upper[i]

white_mask = cv2.inRange(hsv, lower, upper) result = cv2.bitwise_and(frame, frame, mask = white_mask)

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)

contours, hier = cv2.findContours(thresh.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

cv2.drawContours(img, contours, -1, (0,0,0), 12) print(len(contours))

if (len(contours) > 0): # get biggest contour

biggest_contour = contours[0] max_area = 0

for contour in contours:

area = cv2.contourArea(contour) if max_area < area: max_area = area biggest_contour = contour M = cv2.moments(biggest_contour) # cx = int(M['m10']/M['m00']) # cy = int(M['m01']/M['m00'])

# font font = cv2.FONT_HERSHEY_SIMPLEX # org org = (90, 90) # fontScale fontScale = 2 # Blue color in BGR color = (255, 255, 255) # Line thickness of 2 px thickness = 3 # text = '[' + str(cx) + ',' + str(cy) + ']' text = '{}'.format(i*0.1 + 36.5)

cv2.putText(img, text, org, font,

fontScale, color, thickness, cv2.LINE_AA) # print(cx, cy)

cv2.imshow("origin after", img)

# cv2.imwrite("output/origin after [" + str(cx) + "," + str(cy) + "].png", img)

cv2.imwrite("output/origin after" + ' ' + str(index)+ "[" + str(i*0.1 + 36.5) + "].png",img)

a = urlparse(filename)

print(os.path.basename(a.path))

# Send To Arduino

textToSend = str(index) + "[" + str(i*0.1 + 36.5) + "].png" + '*' print(textToSend) if variable.get() != '': ser.write(textToSend.encode()) # output = ser.read(10) if file_extension != '.mp4':

# mess = "{} [{},{}] có dấu hiệu bất thường về nhiệt cần kiểm tra sức khoẻ".format(os.path.basename(a.path), str(cx), str(cy))

#mess = "Nhiệt độ: {} => có dấu hiệu bất thường về nhiệt cần kiểm tra sức khoẻ".format(i*0.1 + 36.5)

tkinter.messagebox.showwarning(title="Bất thường", message=mess)

# Found Highest temperature flag = False

if flag: print("Not Found") # output = ser.read(10) a = urlparse(filename) print(os.path.basename(a.path)) textToSend = '' #textToSend = str(index) + '.png' print(textToSend) if variable.get() != '': ser.write(textToSend.encode()) if file_extension != '.mp4':

#mess = a.path + " không có dấu hiệu bất thường về nhiệt chú ý theo dõi thường xuyên"

tkinter.messagebox.showinfo(title="Bình thường", message=mess)

def getFile():

global filename

filename = filedialog.askopenfilename(initialdir =

"C:/Users/Admin/Desktop/python",title = "Select file",filetypes = (("jpeg files","*.jpg"),("mp4 files","*.mp4"),("all files","*.*"))) e.delete(0,"end")

e.insert(0, filename)

def process_video(filename, ser): print(filename)

cap = cv2.VideoCapture(filename) current_time = time.time()

i = 0

while cap.isOpened(): ret, frame = cap.read()

Một phần của tài liệu ĐỒ ÁN TỐT NGHIỆP 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 LỢN NUÔI BẰNG CÔNG NGHỆ XỬ LÝ ẢNH THÂN NHIỆT (Trang 72 - 106)

Tải bản đầy đủ (DOCX)

(106 trang)
w