Xin chào, có đồng học. Hôm nay chúng ta sẽ học cách trích xuất hình ảnh từ video bằng mô-đun Python OpenCV. Vì vậy, hãy bắt đầu
Mục tiêu của hướng dẫn
Chúng tôi mong muốn trích xuất từng khung hình từ một tệp video với sự trợ giúp của mô-đun OpenCV của ngôn ngữ lập trình Python
Trích xuất hình ảnh từ video bằng Python OpenCV
Bây giờ chúng ta đã biết chính xác chúng ta sẽ làm gì. Hãy để chúng tôi bắt đầu thực hiện mã
1. Nhập mô-đun
Bước đầu tiên giống như bất kỳ dự án nào khác là nhập các mô-đun. Chúng tôi sẽ chỉ cần mô-đun openCV
cho chương trình
Đảm bảo rằng bạn đã cài đặt mô-đun trong hệ thống của mình. Và nếu bạn không biết OpenCV là gì, hãy xem hướng dẫn này. Hướng dẫn sẽ giúp bạn làm quen với các khái niệm cơ bản về OpenCV
2. Chụp video
Để quay video, chúng tôi sẽ sử dụng chức năng
while[True]: ret,frame = cam.read[] if ret: name = 'Video to Images\Frame[' + str[currentframe] + '].jpg' cv2.imwrite[name, frame] currentframe += 1 else: break0 của mô-đun opencv và lưu trữ video đã ghi vào một biến
Đảm bảo video nằm cùng thư mục với tệp mã hoặc bạn cần nhập chính xác đường dẫn của tệp video
đề nghị đọc. Làm cách nào để chỉnh sửa video bằng mô-đun moviepy?
Trong trường hợp bạn không mang theo video, bạn có thể thu thập dữ liệu trực tiếp từ webcam của mình sau khi chuyển giá trị
while[True]: ret,frame = cam.read[] if ret: name = 'Video to Images\Frame[' + str[currentframe] + '].jpg' cv2.imwrite[name, frame] currentframe += 1 else: break1 bên trong hàm
import cv2 cam = cv2.VideoCapture["video.mp4"] currentframe = 0
3. Trích xuất từng khung hình và lưu hình ảnh khung hình
Chúng ta hãy xem mã và sau đó hiểu nó từng dòng một
while[True]: ret,frame = cam.read[] if ret: name = 'Video to Images\Frame[' + str[currentframe] + '].jpg' cv2.imwrite[name, frame] currentframe += 1 else: break
Dòng 1. Tạo vòng lặp tiếp tục hoạt động cho đến khi không còn khung hình nào trong video
Dòng 2. Với sự trợ giúp của hàm
while[True]: ret,frame = cam.read[] if ret: name = 'Video to Images\Frame[' + str[currentframe] + '].jpg' cv2.imwrite[name, frame] currentframe += 1 else: break2, chúng tôi nhận được hai điều. liên kết và khung.
______13 – trả về True hoặc False cho biết liệu chúng tôi có nhận được khung hay không.
______14 – trả lại toàn bộ khung hình tại một thời điểm cụ thể.
Dòng 3-6. Điều kiện
while[True]: ret,frame = cam.read[] if ret: name = 'Video to Images\Frame[' + str[currentframe] + '].jpg' cv2.imwrite[name, frame] currentframe += 1 else: break0 kiểm tra xem khung có sẵn hay không sử dụng giá trị
while[True]: ret,frame = cam.read[] if ret: name = 'Video to Images\Frame[' + str[currentframe] + '].jpg' cv2.imwrite[name, frame] currentframe += 1 else: break3. Sau đó, chúng tôi đặt định dạng đường dẫn và tên của khung hiện tại
Biến khung hình hiện tại giữ số lượng khung hình. Sau đó, chúng ta sẽ sử dụng hàm
while[True]: ret,frame = cam.read[] if ret: name = 'Video to Images\Frame[' + str[currentframe] + '].jpg' cv2.imwrite[name, frame] currentframe += 1 else: break2 để ghi khung tại đường dẫn đã đề cập trước đó
Dòng 7-8. Điều kiện
while[True]: ret,frame = cam.read[] if ret: name = 'Video to Images\Frame[' + str[currentframe] + '].jpg' cv2.imwrite[name, frame] currentframe += 1 else: break3 được xem xét khi không có khung nào để ngắt vòng lặp
4. Phát hành và phá hủy tất cả Windows
Bước cuối cùng và cuối cùng là giải phóng tất cả các đối tượng videocaptures đã được tạo trước đó bằng hàm
while[True]: ret,frame = cam.read[] if ret: name = 'Video to Images\Frame[' + str[currentframe] + '].jpg' cv2.imwrite[name, frame] currentframe += 1 else: break4
Tiếp theo, chúng tôi sử dụng chức năng
while[True]: ret,frame = cam.read[] if ret: name = 'Video to Images\Frame[' + str[currentframe] + '].jpg' cv2.imwrite[name, frame] currentframe += 1 else: break5 để hủy mọi cửa sổ đã tạo và thoát khỏi toàn bộ mã
cam.release[] cv2.destroyAllWindows[]
Mã cuối cùng và đầu ra
Mã hoàn chỉnh và ảnh chụp màn hình của các khung đã tạo được hiển thị bên dưới
________số 8
Phần kết luận
Xin chúc mừng. Bạn biết có thể trích xuất hình ảnh từ video. Hy vọng bạn thích nó. Hãy theo dõi để tìm hiểu thêm
Chúng tôi biết rằng các ứng dụng thị giác máy tính đang gia tăng nhanh chóng trong các vấn đề thực tế. e, giám sát giao thông bằng camera quan sát, nhận dạng người vì mục đích an ninh, phát hiện và phân loại dịch bệnh, v.v.
Chúng tôi biết rằng đối với bất kỳ sự phát triển ứng dụng thị giác máy tính nào, chúng tôi sẽ cần một tập dữ liệu, trên đó chúng tôi đào tạo mô hình của mình. Đôi khi khách hàng sẽ đưa cho bạn dataset nhưng nhiều trường hợp khách hàng yêu cầu bạn thu thập hoặc tìm dataset vậy trong trường hợp đó bạn sẽ cần tìm dataset nhưng nếu tìm mãi không thấy data thì sao?
chúng tôi sẽ làm việc trên Google-Colab, nhưng người dùng Jupyter Notebook có thể thực hiện các bước tương tự vì trong Google-Colab, chúng tôi sẽ sử dụng video được lưu trữ trong google drive, vì vậy, ở đây trước tiên chúng tôi sẽ cần gắn google drive trong khi ở trong Jupyter notebook, bạn sẽ . Tất cả các bước khác sẽ giống nhau đối với việc triển khai sổ ghi chép và triển khai Colab
Hãy để chúng tôi bắt đầu thực hiện từng bước. Nếu bạn làm theo các bước dưới đây thì cuối cùng bạn sẽ có thể trích xuất khung hình từ video trực tiếp hoặc video được lưu trữ
Bước 1. chúng tôi sẽ bắt đầu với việc nhập các thư viện sẽ giúp chúng tôi đạt được giải pháp cho vấn đề của mình. Người dùng Jupyter Notebook chỉ cần nhập thư viện OpenCV
Thư viện nhập khẩu
Bước 2. Bây giờ chúng tôi cần gắn ổ đĩa google để truy cập video từ đó chúng tôi sẽ trích xuất khung hình
Đã gắn google drive
Bước 3. Bây giờ chúng tôi sẽ đặt đường dẫn cho video của chúng tôi từ đó chúng tôi sẽ trích xuất các khung hình. Video tôi đã sử dụng có thể được tìm thấy ở đây. Đối với thời gian thực, bạn có thể bỏ qua bước này
Đường dẫn video
Bước 4. Bây giờ chúng tôi sẽ quay video [từ đường dẫn trên] với sự trợ giúp của mô-đun quay video OpenCV. Đối với thời gian thực, bạn sẽ cần thay thế đường dẫn video bằng 0 [Không]
Đã quay video
Bước 5. Chúng tôi sẽ sử dụng vòng lặp while để trích xuất khung. Ngoài ra, chức năng đọc sẽ được sử dụng cho mỗi lần trích xuất khung hình từ video đã quay và chức năng đọc này sẽ trả về hai điều,
- thành công, sẽ trả về giá trị boolean [True/False]. Trong đó giá trị True sẽ cho biết khung được trích xuất thành công. trong khi giá trị Sai sẽ cho biết khung không được trích xuất
- hình ảnh, sẽ cung cấp khung được trích xuất nếu thành công sẽ đúng
- Ghi chú. biến đếm sẽ được sử dụng để đếm tổng số khung được trích xuất
trong khi lặp lại
Bước 6. Bây giờ chúng tôi sẽ lưu trữ các khung đã trích xuất trong một thư mục, để thực hiện việc này, bạn sẽ cần tạo một thư mục bên trong google drive trong khi người dùng máy tính xách tay có thể tạo một thư mục ở bất kỳ vị trí nào nhưng hãy nhớ rằng đường dẫn lưu trữ các khung cần phải chính xác
Đường dẫn khung
Bước 7. Bây giờ chúng tôi sẽ cần lưu các khung đã trích xuất, để thực hiện việc này, chúng tôi sẽ sử dụng điều kiện if-else theo một cách cụ thể
- nếu khung sẽ được trích xuất thì thành công sẽ là đúng, vì vậy chúng tôi sẽ lưu trữ khung, trong khi nếu thành công sẽ là sai, vì vậy chúng tôi sẽ dừng mã bằng câu lệnh ngắt
Bước 8. Nếu đoạn mã trên chạy thành công, thì bạn sẽ có thể thấy các khung được trích xuất ở đầu ra như bên dưới
Khung được trích xuất
Đó là tất cả về trích xuất khung hình từ video hoặc thời gian thực, bạn có thể thử trên video của riêng mình
Dự án Github. liên kết
Về tôi
tôi có hơn 1. 5 năm kinh nghiệm làm việc trong lĩnh vực Phát triển phần mềm. Hiện tại, tôi làm Kỹ sư phần mềm cải thiện các sản phẩm và dịch vụ cho khách hàng của chúng tôi bằng cách sử dụng phân tích bán lẻ, xây dựng các công cụ phân tích dữ liệu lớn, tạo và duy trì các mô hình cũng như giới thiệu các bộ dữ liệu mới hấp dẫn
Trước đây, tôi là Thực tập sinh thị giác máy tính tại The Spark Foundation, nơi tôi đã có kinh nghiệm phân tích dữ liệu thị giác từ các nền tảng nguồn mở khác nhau bao gồm Kaggle, Google Images, Open Images, v.v. và đào tạo các mô hình học sâu khác nhau trên dữ liệu đó