Skip to content

Dashboard

Sử dụng FFMPEG để giải mã luồng stream H.264 với thư viện tăng tốc NVDIAI GPU

Created by Admin

Xin chào các bạn, mình là Hưng - Lập Trình Viên AI - AI Engineer. Hiện tại mình đang làm các dự án phần lớn liên quan tới mảng Computer Vision (Thị Giác Máy Tính). Các bài toán mình giải quyết toàn tập trung đến việc xử lí luồng stream từ các cameras, giúp công ty xậy dựng hệ thống VMS (Video Management System), tối ưu hóa và quản lý việc sử dụng Camera, đưa các luồng stream này đến các core ứng dụng AI ví dụ Nhận Diện Khuôn Mặt, Nhận Diện Phương Tiện và Đếm Số Lượng Xe trên đường, ...

Do đó, đối với mảng Computer Vision, các bạn cũng cần chút kiến thức về xử lí hình ảnh (Image Processing) và xử lí Video (Video Processing). Hiện tại, có 2 ông lớn cung cấp cung cấp công cụ rất mạnh cho việc xử lý Video đó là FFMPEGGStreamer. Mỗi công cụ sẽ có ưu và nhược điểm khác nhau, mình sẽ có bài viết khác nói về GStreamer.

Các bạn làm việc nhiều với thư viện OpenCV thì biết rằng OpenCV sử dụng backend FFMPEG để giải mã (decode) thông tin video, lấy những frame hình ảnh từ video ra , rồi cuối cùng đưa vào AI model để xử lí (inference).

Mình xin ví dụ đoạn code dùng để đọc 1 luồng stream từ Webcam

# import the opencv library
import cv2


# define a video capture object
vid = cv2.VideoCapture(0)

while(True):
	
	# Capture the video frame by frame
	ret, frame = vid.read()

	# Display the resulting frame
	cv2.imshow('frame', frame)
	
	# the 'q' button is set as the
	# quitting button you may use any
	# desired button of your choice
	if cv2.waitKey(1) & 0xFF == ord('q'):
		break

# After the loop release the cap object
vid.release()
# Destroy all the windows
cv2.destroyAllWindows()

Khi sử dụng hàm vid.read(), nó sẽ lấy frame, giải mã (decode) và trả về numpy array image cho mình.

Tuy nhiên, nếu các bạn có để ý thì mọi công đoạn giải mã của FFMPEG sẽ được thực hiện hầu hết ở trên CPU. Các bạn có thể kiểm tra bằng cách sử dụng tool htop trên Ubuntu.

# install via sudo apt-get install htop
htop

Ngoài ra, openCV còn cung cấp một function khác sử dụng FFMPEG đó là cv2.VideoWriter. Các máy tính chạy AI dùng để phát triển phần mềm sẽ gắn 1 con card đồ họa từ NVIDIA. Ví dụ trên công ty mình đang sử dụng con NVIDIA Gefore 1050ti cung cấp 4GB VRAM. Công ty NVIDIA có cung cấp một bộ SDK tên là NVIDIA Video Codec SDK để tăng tốc quá trình xử lí video trên chính con card GPU, thay vì sử dụng CPU như trước đây. Tại sao giải mã (decode) video trên GPU lại quan trọng?

  1. Tăng tốc độ inference trên toàn bộ hệ thống.
  2. GIảm áp lực tài nguyên sử dụng trên CPU
  3. Tận dụng tối đa bộ encoder, decoder có sẵn của NVIDIA để xử lí
Source: https://viblo.asia/p/su-dung-ffmpeg-de-giai-ma-luong-stream-h264-voi-thu-vien-tang-toc-nvdiai-gpu-YWOZrr6EZQ0