Lãnh đạo tư tưởng
Áp dụng Trí tuệ nhân tạo vào Xử lý Video thời gian thực: Cơ bản và hơn thế nữa

By Maksym Tatariants, Khoa học Dữ liệu Engineer tại MobiDev.
Không có gì mới về việc sử dụng trí tuệ nhân tạo (AI) trong xử lý video. Nếu bạn nhìn vượt ra ngoài xử lý hình ảnh – nó là một trong những trường hợp sử dụng phổ biến nhất cho AI. Và giống như xử lý hình ảnh, xử lý video sử dụng các kỹ thuật đã được thiết lập như thị giác máy tính, nhận dạng đối tượng, học máy và học sâu để nâng cao quá trình này.
Cho dù bạn sử dụng thị giác máy tính và NLP trong chỉnh sửa video và tạo video, nhận dạng đối tượng trong tự động gắn thẻ nội dung video, học máy để tối ưu hóa phân tích video AI, hoặc học sâu để đẩy nhanh loại bỏ nền thời gian thực, các trường hợp sử dụng tiếp tục phát triển mỗi ngày.
Tiếp tục đọc để tìm hiểu cách tiếp cận bạn có thể thực hiện khi nói đến việc sử dụng AI trong xử lý video.
Cơ bản về Xử lý Video thời gian thực
Hãy bắt đầu với những điều cơ bản. Xử lý video thời gian thực là một công nghệ thiết yếu trong các hệ thống giám sát sử dụng nhận dạng đối tượng và nhận dạng khuôn mặt. Nó cũng là quá trình cung cấp năng lượng cho phần mềm kiểm tra thị giác AI trong lĩnh vực công nghiệp.
Vậy, xử lý video hoạt động như thế nào? Xử lý video bao gồm một loạt các bước, bao gồm giải mã, tính toán và mã hóa. Dưới đây là những gì bạn cần biết:
- Giải mã: Quá trình cần thiết để chuyển đổi video từ tệp nén trở lại định dạng thô của nó.
- Tính toán: Một hoạt động cụ thể được thực hiện trên khung hình video thô.
- Mã hóa: Quá trình chuyển đổi khung hình đã xử lý trở lại trạng thái nén ban đầu của nó.
Bây giờ, mục tiêu của bất kỳ nhiệm vụ xử lý video nào là hoàn thành các bước này càng nhanh và chính xác càng tốt. Các cách dễ nhất để thực hiện điều này bao gồm: làm việc song song và tối ưu hóa thuật toán cho tốc độ. Trong những thuật ngữ đơn giản? Bạn cần tận dụng việc chia tệp và kiến trúc đường ống.
Video File Splitting là gì?
Chia tệp video cho phép các thuật toán hoạt động đồng thời, cho phép chúng sử dụng các mô hình chậm hơn, chính xác hơn. Điều này được thực hiện bằng cách chia video thành các phần riêng biệt sau đó được xử lý tại cùng một thời điểm.
Bạn có thể nghĩ về việc chia tệp video như một hình thức tạo tệp ảo thay vì tạo tệp con.
Mặc dù vậy, việc chia tệp video không phải là lựa chọn tốt nhất cho xử lý video thời gian thực. Tại sao chính xác? Quá trình này làm cho nó khó khăn để bạn có thể tạm dừng, tiếp tục và quay lại tệp trong khi nó đang được xử lý.
Kiến trúc Đường ống là gì?
Lựa chọn khác là kiến trúc đường ống. Quá trình này hoạt động để chia và song song hóa các nhiệm vụ được thực hiện trong quá trình xử lý, thay vì chia tệp video trực tiếp.
Dưới đây là một ví dụ nhanh về kiến trúc đường ống trông như thế nào trong thực tế và cách nó có thể được sử dụng trong hệ thống giám sát video để phát hiện và làm mờ khuôn mặt theo thời gian thực.
Trong ví dụ này, đường ống đã chia các nhiệm vụ thành giải mã, phát hiện khuôn mặt, làm mờ khuôn mặt và mã hóa. Và nếu bạn muốn cải thiện tốc độ của đường ống, bạn có thể sử dụng các kỹ thuật học sâu đường ống.
Giải mã và Mã hóa được Giải thích
Vậy giải mã và mã hóa là gì? Có hai cách bạn hoàn thành các quá trình này: phần mềm và phần cứng.
Bạn có thể đã quen với khái niệm gia tốc phần cứng. Quá trình này được thực hiện có thể nhờ vào các bộ giải mã và mã hóa được cài đặt trong các card đồ họa NVIDIA mới nhất, cũng như các lõi CUDA.
Vậy, bạn có những lựa chọn nào khi nói đến gia tốc phần cứng cho các quá trình mã hóa và giải mã? Dưới đây là một số lựa chọn phổ biến:
- Biên dịch OpenCV với Hỗ trợ CUDA: Biên dịch OpenCV với CUDA tối ưu hóa cả giải mã và bất kỳ tính toán đường ống nào sử dụng OpenCV. Hãy nhớ – bạn sẽ cần viết chúng trong C++ vì vỏ bọc Python không hỗ trợ điều này. Nhưng trong những tình huống yêu cầu cả giải mã và tính toán số với GPU mà không cần sao chép từ bộ nhớ CPU, nó vẫn là một trong những lựa chọn tốt nhất có sẵn.
- Biên dịch FFmpeg hoặc GStreamer với Hỗ trợ Codec NVDEC/NVENC: Lựa chọn khác là sử dụng bộ giải mã và mã hóa NVIDIA tích hợp sẵn với các bản cài đặt tùy chỉnh của FFmpeg và Gstreamer. Tuy nhiên, chúng tôi建议 sử dụng FFmpeg nếu có thể vì nó yêu cầu ít bảo trì hơn. Ngoài ra, hầu hết các thư viện đều được hỗ trợ bởi FFmpeg, có nghĩa là bạn sẽ tự động tăng hiệu suất của thư viện bằng cách thay thế nó.
- Sử dụng Khung xử lý Video NVIDIA: Lựa chọn cuối cùng là sử dụng một vỏ bọc Python để giải mã khung hình trực tiếp vào tensor PyTorch trên GPU. Lựa chọn này loại bỏ việc sao chép thêm từ CPU sang GPU.
Phát hiện và Làm mờ Khuôn mặt
Các mô hình phát hiện đối tượng (SSDs hoặc RetinaFace) là một lựa chọn phổ biến để hoàn thành phát hiện khuôn mặt. Những giải pháp này hoạt động để tìm vị trí khuôn mặt của con người trong khung hình. Và dựa trên kinh nghiệm của chúng tôi, chúng tôi có xu hướng thích các mô hình theo dõi khuôn mặt Caffe và phát hiện đối tượng TensorFlow vì chúng cung cấp kết quả tốt nhất. Ngoài ra, cả hai đều có sẵn bằng cách sử dụng thư viện dnn của OpenCV.
Vậy, bước tiếp theo sau khi khuôn mặt đã được phát hiện là gì? Tiếp theo, hệ thống Python và OpenCV-dựa sẽ tiết lộ các hộp giới hạn và độ tin cậy phát hiện. Cuối cùng, một thuật toán làm mờ được áp dụng cho các khu vực được cắt.
Làm thế nào để Xây dựng Phần mềm Xử lý Video thời gian thực được Nâng cao bởi Trí tuệ nhân tạo?
Không có bí mật nào rằng xử lý video, codec cung cấp năng lượng cho nó và cả phần cứng và phần mềm cần thiết đều khá kỹ thuật về bản chất.
Tuy nhiên, điều đó không có nghĩa là bạn không thể sử dụng những công cụ này để xây dựng phần mềm xử lý video trực tiếp của riêng mình.
Dưới đây là một bản tóm tắt ngắn gọn về những gì bạn cần làm:
- Bắt đầu bằng cách điều chỉnh mạng nơ-ron đã được đào tạo trước của bạn để hoàn thành các nhiệm vụ yêu cầu.
- Cấu hình cơ sở hạ tầng đám mây của bạn để xử lý video và mở rộng quy mô khi cần.
- Xây dựng một luật sư phần mềm để cô đọng quá trình và tích hợp các trường hợp sử dụng cụ thể như ứng dụng di động và bảng điều khiển quản trị hoặc web.
Phát triển một MVP cho phần mềm xử lý video tương tự có thể mất đến bốn tháng bằng cách sử dụng mạng nơ-ron đã được đào tạo trước và các lớp ứng dụng đơn giản. Tuy nhiên, phạm vi và thời gian biểu phụ thuộc vào chi tiết của từng dự án. Trong hầu hết các trường hợp, nó có ý nghĩa khi bắt đầu với phát triển Proof of Concept để khám phá các chi tiết của dự án và tìm ra một luồng tối ưu.














