HỆ THỐNG NHẬN DẠNG NGƯỜI TỪ GCS

Một phần của tài liệu Đồ án tốt nghiệp XÂY DỰNG HỆ THỐNG TÌM KIẾM TRONG CỨU HỘ SỬ DỤNG MÁY BAY KHÔNG NGƯỜI LÁI ỨNG DỤNG MẠNG HỌC SÂU YOLOv4 (Trang 68)

3.2.1. Tổng quan về hệ thống

Hệ thống nhận dạng vật thể dựa trên trạm điều khiển mặt đất được chia ra làm hai phần 2 phần: Khối truyền hình ảnh và Khối xử lý hình ảnh. Khối truyền hình ảnh sẽ có nhiệm vụ nhận dữ liệu từ webcam ghi hình, sau đó mã hóa dữ liệu hình ảnh thu được rồi truyền dữ liệu về GCS thông qua mạng không dây Wifi được phát từ trạm điều khiển mặt đất. Tại khối xử lý hình ảnh tại thông qua mạng Wifi phát đi sẽ thu dữ liệu hình ảnh, giải mã rồi đưa vào mạng học sâu Yolo để nhận dạng vật thể. Dựa trên thông tin video phản hồi đã qua xử lý và mạng học sâu, trạm điều khiển sẽ tự động xử lý tác vụ gửi lệnh điều khiển lên thiết bị UAV thông qua datalink Telemetry. Sơ đồ khối miêu tả hệ thống nhận dạng từ GCS được mô tả qua hình ảnh dưới đây

HÌNH 3.15.Sơ đồ khối hệ thống nhận dạng.

3.2.1.1. Khối truyền hình ảnh

Thiết bị truyền hình ảnh gắn trên thiết bị bay UAV bao gồm camera ghi hình ảnh, và máy tính nhúng, camera ghi hình em sử dụng Webcam C170 của hàng Logitech. Dữ liệu hình ảnh thu được từ webcam sẽ được đưa vào máy tính nhúng đã kết nối chung cùng một mạng không dây wlan với GCS để nén dữ liệu hình ảnh và truyền về trạm mặt đất bằng giao thức mã nguồn mở GStreamer.

SVTH: Nguyễn Nhật Anh Lớp: KTDT & THCN K56

HÌNH 3.16. Wifi kết nối chung ubiquityrobotE95B.

3.2.1.2. Khối xử lý hình ảnh

Khối xử lý ảnh ở đây chính là trạm điều khiển mặt đất GCS, tại trạm mặt đất bao gồm một máy tính, đã cài đặt hệ điều hành Linux Ubuntu 18.04 Beaver, tại trạm máy tính chạy phần mềm GCS và chạy chương trình nền hỗ trợ xử lý dữ liệu truyền thông đa phương tiện. Máy tính sẽ chủ động phát mạng không dây Wifi để máy tính nhúng thuộc bộ truyền hình ảnh truy cập để gửi dữ liệu video về GCS. Ngoài ra bộ xử lý ảnh còn mô-đun truyền dữ liệu Telemetry Sik Radiolink 433MHz để giao tiếp điều khiển với thiết bị bay UAV.

HÌNH 3.17. Máy tính cá nhân được sử dụng làm trạm điều khiển mặt đất.

3.2.2. Phương thức truyền hình ảnh trực tuyến sử dụng Gstreamer

Cơ chế xử lý dữ liệu truyền thông đa phương tiện (MMF) là một hệ thống nền xử lý các luồng dữ liệu multimedia (các loại ảnh, video, hoạt hình hiển thị) trên hệ điều hành Linux. GStreamer là một MMF mã nguồn mở mà em đã sử dụng để xử lý dữ liệu video và truyền hình ảnh trực tuyến về GCS. Qui trình của Gstreamer được chia thành các bộ phận (element). Các bộ phận nối với nhau

SVTH: Nguyễn Nhật Anh Lớp: KTDT & THCN K56

bằng các đường dẫn (pipeline) có đầu vào (source pad) và đầu ra (sink pad). Các bộ phận đường cung cấp thông qua các plug-in (phần mềm bổ sung) như các thư viện dùng chung.

HÌNH 3.18. Qui trình truyền dữ liệu của GStreamer.

Trên thực tế, việc sử dụng kỹ thuật nén video kỹ thuật số đóng một vai trò rất quan trọng cho phép truyền và lưu trữ hiệu quả nội đa phương tiện trong môi trường giới hạn băng thông và không gian lưu trữ. Đặc biệt trong trường hợp gửi dữ liệu theo thời gian thực thông qua mạng internet này nên em đã lựa chọn chuẩn nén h.264. Thư viện MMF cũng hỗ trợ plug-in mã hóa và giải nén theo tiêu chuẩn H.264/ AVC, được gọi là “x264”.

X264 là kỹ thuật nén dữ liệu tiên tiến theo chuẩn H.264/ AVC, và kỹ thuật này chứa một số xử lý tăng cường tâm thần – thị giác (psychovisual enhancement) giúp cả thiện chất lượng mã hóa video như lượng tử hóa tương thích ở hai chế độ, sử dụng làm mới định kỳ (Periodic Intra Refresh). Điều này cho phép mỗi khung hình được đăng lên theo cùng một kích thước, nên cho phép từng lát cắt được truyền ngay lập tức trong từng gói UDP/ TCP và cho phép giải mã ngay lập tức khi nhận, và nhiều chức năng khác được nêu trong [21].

Để sử dụng MMF GStreamer trên hệ điều hành Ubuntu rất đơn giản. Sua khi cập nhật gói dependencies của ubuntu core, ta cài đặt framework thông qua các lệnh sau: sudo apt-get install gstreamer1.0-tools gstreamer1.0-plugins-base streamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly

Tổng quan về qui trình xử lý video gửi dữ liệu video trực tuyến. Đầu tiên ở phía bộ truyền hình ảnh chúng ta cần thực hiện các bước sau:

1. Lấy dữ liệu video 2. Nén dữ liệu video

3. Đóng thành các gói dữ liệu video 4. Gửi các gói dữ liệu qua giao thức mạng

SVTH: Nguyễn Nhật Anh Lớp: KTDT & THCN K56

Ở phía bộ xử lý hình ảnh để nhận dữ liệu hình ảnh truyền đến, ta cần thực hiện các bước sau:

1. Nhận các gói dữ liệu thông qua giao thức mạng 2. Tái tạo dữ liệu video từ các gói dữ liệu

3. Giải mã dữ liệu video 4. Hiển thị dữ liệu video

Theo các bước thực hiện ở trên, tại bên gửi em thực hiện lệnh:

gst-launch-1.0 v4l2src device = “/dev/video0” ! video/x-raw,framerate=30/1 ! videoscale ! videoconvert ! x264enc latency = zero-latency bitrate = 1024 speed-preset=superfast ! rtph264pay ! udpsink host=42.0.3.1 port=5000

Câu lệnh trên của bên gửi (sender) sẽ thực hiện lấy dữ liệu từ camera đã kết nối với máy tính nhúng Raspberry Pi chạy hệ điều hình Ubiquity Robotics. Dữ liệu video sẽ được ghi lại bằng hàm video4linux “v4l2src”. Sau đó dữ liệu sẽ được đưa vào “x264enc” để nén theo tiêu chuẩn h.264, tốc độ truyền dữ liệu là 1024 và cài đặt độ trễ là “zero-latency” tức là không có. Tiếp theo sau khi mã hóa dữ liệu hoàn tất là bước đóng gói dữ liệu bằng “rtph264pay”, việc đóng gói dữ liệu là chuyển đổi các dữ liệu thành giao thức mạng RTP (Real-time Transport Protocol). Đây là giao thức được thiết kế dành riêng cho việc truyền tín hiệu kỹ thuật số đa phương tiện trên giao thức mạng internet (Internet Protocol - IP), tín hiệu video kỹ thuật số sẽ được đóng thành các gói dữ liệu theo định dạng RFC 6184 dành riêng cho H.264/AVC [22]. Dữ liệu sẽ được truyền qua địa chỉ IP của bên phía nhận bằng giao thức UDP “udpsink” cổng 5000.

HÌNH 3.19.Qui trình truyền dữ liệu hình ảnh về trạm.

x264 encoder videosrc v4l2src

src sink src

rtph264pay

sink src

udpsinkadd=<client’s IP>

port = 5000

sink

x264enc bitrate = 1024 latency = Zero-latency

SVTH: Nguyễn Nhật Anh Lớp: KTDT & THCN K56

HÌNH 3.20. Truyền hình ảnh từ UAV (trái) và nhận dữ liệu ở GCS (phải) sử dụng Gstreamer.

Qui trình nhận dữ liệu tại trạm GCS:

gst-launch-1.0 -v udpsrc port=5000 caps = "application/x-rtp, media=(string)video, clock- rate=(int)90000, encoding-name=(string)H264, payload=(int)96" ! rtph264depay ! ffdec_h264 ! h264parse ! autovideosink

Tại phía nhận (client) sẽ gọi các gói dữ liệu video bằng udpsrc đã được điều hướng tới địa chỉ của client từ phía gửi. Do dữ liệu vẫn đang là các gói định dạng rtp nên ta phải giải nén các gói dữ liệu bằng “rtph264depay”, nhưng dữ liệu vẫn còn ở dạng mã hóa h.264 nên ta sẽ giải mã dữ liệu sử dụng

“ffdec_h264”. Sau khi giải mã dữ liệu video sẽ được kiểm tra và hiển thị bằng “h264parse” và “autovideosink”.

HÌNH 3.21. Qui trình nhận dữ liệu hình ảnh từ thiết bị bay.

rtph264depay udpsrc port = 5000 src sink src ffdec_x264 sink src autovideosink sink application/x-rtp enconding-name = H264 payload = 96

SVTH: Nguyễn Nhật Anh Lớp: KTDT & THCN K56

3.3. HIỆU CHUẨN MÁY ẢNH

Hiệu chuẩn hình học máy ảnh là quá trình đo đạc các tham số của thấu kính máy ảnh và thông số cảm biến hình ảnh của một hình ảnh hoặc đoạn ghi hình ảnh video.

HÌNH 3.22. Các ứng dụng của việc hiệu chuẩn hình ảnh máy ảnh.

Thư viện hiệu chuẩn hình ảnh sử dụng ở đây là thư viện của chương trình thư viện xử lý ảnh mã nguồn mở OpenCV (Open Computer Vision), được viết bằng ngôn ngữ lập trình Python Để tìm kích thước của vật ta chỉ cần đến tham số ma trận nội tại trong các tham số.

Sử dụng một tấm bảng hình ca-rô loại 11 x 8 ô có kích cỡ 594 x 420mm để thực hiện hiệu chuẩn hóa tham số máy ảnh, với kích cỡ chuẩn mỗi ô vuông cạnh là 50mm.

HÌNH 3.23. Quá trình hiệu chuẩn máy ảnh.

Để hiệu chuẩn máy ảnh, bước đầu tiên ta sẽ lấy dữ liệu hình ảnh chụp tấm bảng ca-rô. Tổng cộng em chụp 20 tấm ảnh để làm dữ liệu hiệu chuẩn, bước thứ

SVTH: Nguyễn Nhật Anh Lớp: KTDT & THCN K56

hai trong code hiệu chuẩn ta sẽ đọc các hình ảnh dữ liệu mà ta đã thu được bằng thư viện glob

images = glob.glob('./data/*.jpg') size = np.zeros((w, h-1), dtype='uint8')

Sau khi đã đọc dữ liệu lưu thành mảng đa chiều. Tạo hai mảng array để chứa tọa độ 2 chiều và tọa độ 3 chiều của hình ảnh

objpoints = [] # 3D points in real world space imgpoints = [] # 2D points in image plane

Khởi tạo các điểm trong mảng objp, sử dụng hàm Numpy.zeros để tạo mảng có các giá trị bằng 0, mảng có số lượng tương đương với số góc của bảng hiệu chuẩn ca-rô là 10 x 7, mỗi điểm sẽ có 3 cột cho lần lượt tọa độ x,y và z của từng góc. Giữ nguyên tọa độ z bằng 0, ta sử dụng hàm mgrid vào giá trị tọa độ của x và y để tạo tọa độ mong muốn. Hàm mgrid sẽ trả về giá trị tọa độ với kích cỡ ô và hình dạng ma trận của bảng hiệu chuẩn ca-rô về lại hai cột.

objp = np.zeros((6*8,3), np.float32)

objp[:,:,] = mp.mgrid[0:8,0:6].T.reshape(-1,2) # x,y coordinates

Tiếp theo để tìm các điểm tọa độ ảnh trong ICS ta sẽ chuyển dữ liệu ảnh màu RGB về ảnh chỉ có màu ghi theo thang độ xám, sau đó tìm các góc của ô vuông trên hình.

# Convert image to grayscale

gray = cv2.cvtColor(img, cv2.COLOR_BRG2GRAY) # Find the Chesse board corners

rer, corners = cv2.findChessboardCorners(gray, (10,7), None)

Thư viện OpenCV cung cấp hàm calibrateCamera() để hiệu chuẩn máy ảnh, thuật toán được sử dụng để hiệu chuẩn máy ảnh được nêu trong tài liệu [23] của tác giả Zhang.

ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, size, None, None)

np.save("./ret", ret)

np.save("./mtx", mtx) # camera matrix np.save("./dist", dist) # distortion coefficients np.save("./rvecs", rvecs) # rotation vectors np.save("./tvecs", tvecs) # translation vectors

SVTH: Nguyễn Nhật Anh Lớp: KTDT & THCN K56

Hàm này sẽ lấy điểm Object point, Image point và hình dạng ma trận của dữ liệu hình ảnh để tính toán và trả về ma trận nội tại và ma trận ngoại lai.

3.4. ĐIỀU KHIỂN BAY TỪ TRẠM GCS 3.4.1. Phương thức điều khiển tự động 3.4.1. Phương thức điều khiển tự động

Chuẩn giao thức Liên kết phương tiện trên không siêu nhỏ - Micro Aerial Vehicle Link (MAVLink) là phương thức đảm bảo liên lạc giữa các hệ thống không người lái và các trạm mặt đất.

MAVLink là một giao thức mã nguồn mở tuần tự hóa tin nhắn nhẹ được thiết lập tốt dành riêng cho các hệ thống không người lái, bao gồm cả máy bay không người lái UAV. Lorenz Meier là người đã phát triển MAVLink, phát hành vào năm 2009 theo giấy phép LGPL.

HÌNH 3.24. Phương thức điều khiển thiết bị bay từ trạm mặt đất.

Dronekit-Python là một API truyền thông sử dụng chuẩn giao thức MAVLink. Nó cung cấp quyền truy cập theo chương trình vào thông tin từ xa thông qua các kênh truyền được đề cập trong phần phụ lục về MAVLink Phương thức truyền MAVLink, nhận tất cả các tham số trạng thái và thông số tham số của thiết bị bay như góc quay, góc nghiêng, dữ liệu định vị như vị trí, góc chỉ hướng, độ cao;

SVTH: Nguyễn Nhật Anh Lớp: KTDT & THCN K56

và cho phép cả quản lý nhiệm vụ và kiểm soát trực tiếp chuyển động và vận hành của thiết bị bay UAV.

Chiến lược điều khiển thiết bị bay của thiết bị bay là dựa trên dữ liệu hình ảnh phản hồi mà trạm GCS nhận được có nhận dạng có người hay là không mà trạm sẽ ra quyết định. Nếu không có phát hiện ra người thì thiết bị bay sẽ bay theo chế độ tìm kiếm theo các điểm đã được định trước, còn nếu phát hiện ra người thì trạm mặt đất sẽ dựa trên hình ảnh nhận được để ra quyết định. Nếu vị trí người lệch tâm thì ta sẽ tính sai lệch rồi điều khiển góc yaw sao cho heading chỉ thẳng vào vị trí của đối tượng bị phát hiện, sau đó ta sẽ tính vị trí tọa độ tương đối rồi gửi thông tin đó về cho trạm điều khiển mặt đất. Sau khi xác nhận rõ là người thì thiết bị bay sẽ chuyển chế độ bay về điểm xuất phát ban đầu.

3.4.2. Lưu đồ thuật toán điều khiển UAV

Chương trình điều khiển bay của thiết bị bay UAV gồm có 3 chế độ: Chế độ 1 bay thử, Chế độ 2 bay bằng tay, Chế độ 3 bay tìm kiếm người. Các hình lưu đồ dưới đây thể hiện cách thức hoạt động của từng chế độ bay khác nhau.

SVTH: Nguyễn Nhật Anh Lớp: KTDT & THCN K56

Chế độ 3: Bay tìm kiếm. Đây là chế độ bay tích hợp với mạng học sâu YOLO được viết trên cơ sở thư viện trí tuệ nhân tạo Pytorch. Thiết bị bay sẽ lần lượt bay đến các vị trí định sẵn và sử dụng mạng học sâu để kiểm tra có người hay là không, trước khi ra quyết định bay đến điểm tiếp theo.

HÌNH 3.26. Lưu đồ thuật toán điều khiển tìm kiếm người. Bắt đầu Bay đến điểm thứ i Đúng Cất cánh Đạt đến độ cao Vehicle.Mode = “GUIDED” YOLO Sai Phát hiện người ? Điều khiển góc Yaw i > 4 ? Hạ cánh Đúng Đúng Sai Sai Hiển thị hình ảnh và báo vị trí i++ Tính sai lệnh vị trí của đối tượng

SVTH: Nguyễn Nhật Anh Lớp: KTDT & THCN K56

3.4.3. Điều khiển thiết bị bay UAV

3.4.3.1. Điều khiển góc Yaw

Lấy điểm giữa của khung ảnh làm điểm đối chiếu, việc điều khiển để đưa hình ảnh vật thể vào tâm của khung ảnh có hai vấn đề, điều khiển góc yaw và điều khiển độ cao. Bằng việc chia giá trị góc nhìn của máy ảnh fov cho số lượng pixel tương ứng, chúng ta có thể ước chừng giá trị góc tương ứng với từng pixel

𝑎𝑛𝑔𝑙𝑒𝑠𝑡𝑒𝑝 = 𝑓𝑜𝑣

𝑛𝑝𝑖𝑥𝑒𝑙𝑠 (16)

Khi có kết quả của nhận dạng vật thể, ta sẽ có tọa độ của hộp giới hạn xmin ymin xmax ymax. Tọa độ tâm của hộp giới hạn được tính qua công thức (17)

(𝑢𝑐𝑒𝑛𝑡𝑟𝑜𝑖𝑑, 𝑣𝑐𝑒𝑛𝑡𝑟𝑜𝑖𝑑) = (𝑥𝑚𝑎𝑥−𝑥𝑚𝑖𝑛

2 ,𝑦𝑚𝑎𝑥−𝑦𝑚𝑖𝑛

2 ) (17)

Từ tâm của khung hình đến tâm của hộp giới hạn có khoảng cách pixel theo chiều ngang và chiều dọc lần lượt là ℎ𝑝𝑖𝑥𝑒𝑙 và 𝑣𝑝𝑖𝑥𝑒𝑙 như diễn tả trong hình 3.27. Với khoảng cách đó ta có thể sử dụng để tính chuyển vị góc ℎ𝑎𝑛𝑔𝑙𝑒 và 𝑣𝑎𝑛𝑔𝑙𝑒, như trong hình 3.28, sử dụng công thức (18) sau để tính:

𝑎𝑛𝑔𝑙𝑒𝑑𝑖𝑠𝑝 = 𝑝𝑖𝑥𝑒𝑙𝑑𝑖𝑠𝑝 × 𝑎𝑛𝑔𝑙𝑒𝑠𝑡𝑒𝑝 (18) Góc Yaw cần chỉnh ℎ𝑎𝑛𝑔𝑙𝑒 có thể được tính từ công thức trên (18), trong đó 𝑝𝑖𝑥𝑒𝑙𝑑𝑖𝑠𝑝 là ℎ𝑝𝑖𝑥𝑒𝑙, tương tự như vậy 𝑣𝑝𝑖𝑥𝑒𝑙 có thể tính theo công thức trên. Ta cũng có được sai số phương ngang 𝑒𝑟𝑟𝑜𝑟ℎ𝑜𝑟𝑖𝑧𝑜𝑛 = 𝑎𝑛𝑔𝑙𝑒𝑑𝑖𝑠𝑝 , do fov của camera là góc nhìn của camera và độ phân giải của hình ảnh cũng được biết trước.

SVTH: Nguyễn Nhật Anh Lớp: KTDT & THCN K56

HÌNH 3.28. Tính góc sai lệch phương ngang bằng fov.

3.4.3.2. Xác định vị trí của đối tượng

Phần điều khiển phương ngang hoạt động theo trục hướng thẳng từ máy ảnh trên UAV đến vật thể nhận dạng, và đó cũng là trục của máy ảnh. Phần điều khiển này sẽ ra quyết định sẽ bay tiến đến vật hoặc lùi ra xa vật để giữ khoảng cách an toàn cố định giữa người và thiết bị bay. Khoảng cách chúng ta muốn

𝑑𝑡𝑎𝑟𝑔𝑒𝑡 = ℎ𝑒𝑖𝑔ℎ𝑡𝑟𝑒𝑎𝑙

tan(ℎ𝑎𝑛𝑔𝑙𝑒)+ 𝑑𝑏𝑖𝑎𝑠 (19) Trong đó ℎ𝑒𝑖𝑔ℎ𝑡𝑟𝑒𝑎𝑙 là độ cao đo được thực tế của đối tượng, ℎ𝑎𝑛𝑔𝑙𝑒 là góc tìm được qua công thức (18). Nếu đối tượng người tiến đến gần hoặc rời ra xa hơn máy ảnh, kích thước pixel của hộp giới hạn sẽ thay đổi, tuy độ cao thực tế của người thì không thay đổi nhưng mỗi đối tượng người lại có chiều cao thực tế khác nhau, vậy nên phải thêm biến nhiễu 𝑑𝑏𝑖𝑎𝑠 =∆ℎ𝑒𝑖𝑔ℎ𝑡𝑚𝑒𝑎𝑛

tan(∆ℎ𝑎𝑛𝑔𝑙𝑒) là giá trị trung bình sai lệch của chiều cao trung bình thực tế của người khoảng 1,70m chia cho tan sai lệch trung bình của pixel tương ứng với chiều cao đó.

SVTH: Nguyễn Nhật Anh Lớp: KTDT & THCN K56

3.5.KẾT QUẢ THỬ NGHIỆM

3.5.1. Kết quả ứng dụng mạng học sâu để phát hiện người từ trên cao

Một phần của tài liệu Đồ án tốt nghiệp XÂY DỰNG HỆ THỐNG TÌM KIẾM TRONG CỨU HỘ SỬ DỤNG MÁY BAY KHÔNG NGƯỜI LÁI ỨNG DỤNG MẠNG HỌC SÂU YOLOv4 (Trang 68)

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

(92 trang)