3.2.2.1 Phần mềm được sử dụng
OpenCV là một thư viện mã nguồn mở hàng đầu cho thị giác máy tính được hầu hết các thiết bị nhúng ứng dụng như IPcamera, máy ảnh, các phần mềm xem video…
OpenCV có rất nhiều các modules và mỗi module này sẽ được build dưới dạng thư viện liên kết tĩnh và thư viện liên kết động giúp dễ dàng sử dụng trong project. Tính đến phiên bản 3.1.0 OpenCv đã có 57 module, mỗi module có một chức năng riêng biệt. Một số module OpenCv như:
- Core: sử dụng trong việc lưu trữ và xử lý hình ảnh như Mat, Scale, Point, Vec… và các phương thức cơ bản sử dụng cho các module khác.
- Imgproc: Xử lý ảnh
- Imgcodecs. Đọc và ghi tập tin ảnh
- Highgui: cho phép tương tác với người dùng trên UI (User Interface) như hiển thị hình ảnh, video capturing.
- Features2d: trích rút đặc trưng (feature) của hình ảnh. - Calib3d: Hiệu chuẩn máy ảnh và xây dựng lại 3D.
- Objdetect: phát hiện các đối tượng như khuôn mặt, đôi mắt, cốc, người, xe hơi… trong hình ảnh.
- Ml: các thuật toán về Machine Learning phục vụ cho các bài toàn phân lớp, gom cụm.
- Videoio: Hỗ trợ đọc và ghi đa phương tiện, mã hóa và giải mã video theo các chuẩn nén (codec)…
Trong phần mềm này, module videoio của OpenCv sẽ được sử dụng để xây dựng chương trình nhận dữ liệu từ máy chủ RTSP và giải mã dữ liệu nhận được.
Ngôn ngữ lập trình xây dựng hệ thống: C++ 3.2.2.2 Xây dựng chương trình Kết nối tới máy chủ và nhận các gói tin RTP Phân tích gói tin RTP thành Khung dữ liệu Phân tích NAL Giải mã Hiển thị hình ảnh
Hình 3.3. Sơ đồ hoạt động chương trình máy khách
Mô tả chương trình:
- Bước 1: Khởi tạo kết nối tới máy chủ RTSP. Hàm VideoCapture trong
module videoio để tạo kết nối đến máy chủ RTSP câu lệnh:
VideoCapture vid("rtsp://"+IP+":port/"+fileName, cv::CAP_FFMPEG) Trong đó: rtsp là mã giao thức yêu cầu kết nối.
IP là địa chỉ IP của máy chủ. Port là cổng kết nối tới máy chủ. Filename là tên file cần nhận.
- Bước 2: Nhận dữ liệu: Đọc dữ liệu từ gói tin rtp và phân tách thành các
khung dữ liệu
- Bước 3: Xử lý dữ liệu: Thực hiện phân tích khung dữ liệu nhận được để
lấy được từng ảnh. Quá trình phân tích được thực hiện bằng hàm: vid.read(frame). Trong hàm này thực hiện lần lượt các bước:
o Đọc dữ liệu vào bộ đệm: FFMPEG:: av_read_frame
o Tìm kiếm NAL trong bộ đệm, giải mã và giải nén dữ liệu FFMPEG: find_nal_unit. Quá trình giải mã được đặt trong hàm này.
o Hiển thị hình ảnh CV::imshow